前提:收款的支付宝商户:appId、mchId、应用公钥/秘钥、支付宝公钥
流程图:
支付宝小程序支付流程 (1).png
具体关键实现:
一、初始化:
1.0 获取authCode
由于小程序支付是需要user_id,所以需要授权获取user_id才可以完成支付。
uniapp小程序代码:
my.getAuthCode({
scopes: 'auth_user',
success: (res) => {
this.authCode = res.authCode
console.log(this.authCode)
this.oauthToken();
},
});
1.1 换取授权访问令牌
请求后端服务,通过后端服务换取token
服务端代码(nodeJS):
//使用了alipay-sdk
const result = await alipaySdk.exec('alipay.system.oauth.token', {
grantType: 'authorization_code',
code: authCode
}).catch(error => {return error});
//返回user_id、access_token
二、支付流程:
2.0 点击支付,请求后端生成交易单
alipay.trade.pay(统一收单交易支付接口)
服务端代码(nodeJS):
const result = await alipaySdk.exec('alipay.trade.create', {
notifyUrl: config.TRADE_CREATE_NOTIFY_URL,
bizContent:{
out_trade_no: outTradeNo,
total_amount: totalAmount,
buyer_id:userId,
subject:subject
}
}).catch(error => {return error});
//返回tradeNo、outTradeNo
my.tradePay({
tradeNO: tradeNo,
success: function(res) {
console.log("付款成功,严谨一点应该需要请求后端服务再次确认:",res)
},
fail: function(res) {
console.log("付款失败,严谨一点应该需要请求后端服务再次确认:",res)
},
});
三、支付结果:
3.0 :支付成功后支付宝服务器会同步主动调用回调url,这里可以同步更新订单的支付状态。
3.1:在2.1中“my.tradePay”返回的是唤起结果,不是支付结果,支付结果还是需要请求后端服务确认(支付宝同步回调支付结果)。
基本就是这样完成了小程序的支付功能。
除了uniapp开发外,还需要一个可以访问的后端服务来做交互和加解密校验等功能。