使用的是uniapp+unicloud+uni-pay模块。请问微信支付成功后怎么修改订单状态,把数据库中的订单改成 “已支付”。
如果直接写在支付api的回调里=>
- [假如用户支付成功没有点完成 ]
- [用户直接返回手机桌面 ]
- [用户支付成功没点完成,直接息屏]
- [或者是直接关闭小程序 ]
- [甚至恰好遇到断网 ]
那不就收不到回调,达不到绝对更改订单状态的效果。
所以想问下如何解决这个问题。
pay(id) {
let golist = this.goodlist[0];
var that = this
// 1.传递weixin 获取微信的code
uni.login({
provider: 'weixin',
success(code) {
console.log('code:', code.code) // 获得code
//2:获得微信openid
uni.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
method: 'GET',
data: {
appid: "wx*************965", // 你的小程序的APPID
secret: "6f1aa4f***********************df89", //你的小程序的secret,
js_code: code.code //wx.login 登录成功后的code
},
success: (cts) => {
console.log(cts);
// cts.data.openid 拿到openid
//3:调用云函数 统一下单
uniCloud.callFunction({
name: 'getOrderInfo',
data: { // 传递订单的一些基本信息
openid: cts.data.openid,
goodname: golist.name,
out_trade: id, // 订单号
outTradeNo: id,
price: golist.price, // 单位分
}
}).then(odr => {
console.log('OrderInfo:', odr)
uni.requestPayment({ // 调用支付api
provider: 'weixin',
...odr.result.orderInfo,
success() {
console.log('支付成功')
// uni.showModal({
// title: '支付成功',
// content: '感谢您的使用!'
// })
},
fail() {
console.log('支付失败或取消支付')
}
})
})
}
});
},
fail(err) {
reject(new Error('微信登录失败'))
}
})
}
'use strict';
const unipay = require('uni-pay')
exports.main = async (event, context) => {
const unipayIns = unipay.initWeixin({
appId: 'wx*************65', //小程序appid
mchId: '16*******24', //微信商户号
key: '4ga*********************l5er',
})
let orderInfo = await unipayIns.getOrderInfo({
openid: event.openid,
// subject: event.name, // 订单名称微信支付时不可填写此项
body: event.goodname,
outTradeNo: event.outTradeNo,
totalFee: event.price,
notifyUrl: 'https://uniapp.dcloud.net.cn/uniCloud/uni-id-summary.html#',
})
return { orderInfo }
};