我们在做支付时,如果第一次吊起支付,用户没有支付,下次再进入订单列表重新支付时,就会报这个错误。 201 商户订单号重复
解决办法呢,就是每次支付的时候,不管是新下单支付,还是第一次没有支付成功,再次吊起支付,我们都做一个随机的处理,就是每一次提交的outTradeNo都不一样。
pay云函数
// 云函数代码
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
let orderId = event.outTradeNo.substring(0, 15) + new Date().getTime()
await cloud.database().collection('mh-dingdan')
.doc(event.outTradeNo)
.update({
data: {
orderId: orderId
}
})
const res = await cloud.cloudPay.unifiedOrder({
"body": event.goodName, //商品名称或商品描述
"outTradeNo": orderId, //订单号
"spbillCreateIp": "127.0.0.1",
"subMchId": "1615986178", //****** 微信支付商户号
"totalFee": event.totalFee * 100, //支付的金额,单位分
"envId": "cloud1-3g5spw8wbb2af38f",
"functionName": "payCallBack" //支付成功的回调
})
return res
}
对应的payCallBack云函数做定当状态更新
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async (event, context) => {
//订单号 event.outTradeNo
return await cloud.database().collection('mh-dingdan')
.where({
orderId: event.outTradeNo
})
.update({
data: {
status: 1
}
}).then(res => {
return {
errcode: 0,
errmsg: '支付成功'
}
}).catch(res => {
return res
})
}