我统一下单,我的functionName:pay_cb函数中返回 retrun{ errcode:0 ,errmsg:success}怎么传回小程序端呢?我现在只能在日志里面能看到这个返回值。
统一下单云函数:
const res = await cloud.cloudPay.unifiedOrder({
"body" : "德海生鲜",
"outTradeNo" : event.order_number_send,
"spbillCreateIp" : "127.0.0.1",
"subMchId" : "1591",
"totalFee" : 1,
"envId": "dehai-alpha-bq",
"functionName": "pay_cb",
})
console.log("bpay=",res)
return res
}
"functionName": "pay_cb" 云函数:
// pay_cb 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env:'dehai-alpha-bk9zq'
})
const db = cloud.database()
const _ = db.command
exports.main = async (event, context) => {
await db.collection('orders').doc(event.outTradeNo).set({
data:event
})
return {
errcode:0,
errmsg:'SUCCESS'
}
}
并不能返回通知给小程序端。需要小程序主动查询数据库,看某订单是否支付成功。
watch应该能满足你,我没用过,自己去试试
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/collection/Collection.watch.html
pay_cb是你接收支付异步回调的云函数,你的pay_cb写得太简单了
应该判断状态
先根据outTradeNo找到订单记录,然后进行相应的判断,来决定是否更新订单业务,这样才比较严谨合理
exports.main = async (event, context) => {
let {
returnCode = 'FAIL',
resultCode = 'FAIL',
outTradeNo = '',
} = event || {}
if(returnCode == 'SUCCESS' && resultCode == 'SUCCESS'){
// 注意:两者都为SUCCESS,支付才算正真成功
var order = await db.collection('orders').doc(outTradeNo).get()
if(order.state == 2){
// 此处假设订单有state字段,并且为2是表示已成功已支付过了,不再对订单记录做任何处理,则直接返回SUCCESS,告诉微信服务器不需要再异步通知了
return { errcode:0, errmsg:'SUCCESS' }
}else if(order.state == 1){
// 此处假设订单state 为 1 ,即支付中状态,则更新订单状态等等业务
var upd = await db.collection('orders').doc(outTradeNo).update({
data:{
state: 2 //假设2为支付成功状态
}
})
if(upd.stat.updated == 1){
// 表示更新成功,则返回SUCCESS,告诉微信服务器不需要再异步通知了
return { errcode:0, errmsg:'SUCCESS' }
}else{
// 记录错误信息
conslog.log('更新订单出错:', event)
// 否则返回FAIL,告知微信服务器还需要再异步通知
// 注意:同个支付订单异步通知次数有限的
// 所以这个时候你可以将异步通知的数据,存到一个专门的表里
// 以便后续出问题好人工手动处理
return { errcode:1, errmsg:'FAIL' }
}
}
}else{
// 记录错误信息
conslog.log('支付出错:', event)
return { errcode:1, errmsg:'FAIL' }
}
}