返回
条理清晰!支付宝小程序之间带参扫码在线付款具体实现
前端
2023-12-01 03:09:10
一、业务场景
在实际业务中,我们经常需要在两个小程序之间进行支付。例如,小程序A有一个订单付款码,二维码中带了一个订单id,需要将这个id作为参数传递给小程序B,小程序B用支付宝扫码后获取到该参数,并且加载该订单后发起支付宝支付。
二、实现思路
支付宝官网为我们提供了两种实现思路:
- 通过支付宝开放平台提供的统一收单接口进行支付。
- 通过支付宝小程序SDK提供的扫码支付接口进行支付。
三、实现方法
1. 通过支付宝开放平台提供的统一收单接口进行支付
步骤如下:
- 在小程序A中,生成一个订单,并将订单id作为参数传递给小程序B。
- 在小程序B中,使用支付宝小程序SDK扫码支付接口,获取订单id。
- 使用订单id调用支付宝开放平台提供的统一收单接口进行支付。
2. 通过支付宝小程序SDK提供的扫码支付接口进行支付
步骤如下:
- 在小程序A中,生成一个订单,并将订单id作为参数传递给小程序B。
- 在小程序B中,使用支付宝小程序SDK扫码支付接口,获取订单id。
- 使用支付宝小程序SDK提供的扫码支付接口进行支付。
四、代码示例
1. 在小程序A中,生成一个订单,并将订单id作为参数传递给小程序B。
const order = {
id: '123456',
amount: 100,
subject: '测试订单'
};
wx.navigateToMiniProgram({
appId: '小程序B的appId',
path: 'pages/index/index',
extraData: {
order: order
}
});
2. 在小程序B中,使用支付宝小程序SDK扫码支付接口,获取订单id。
wx.scanCode({
success: (res) => {
const order_id = res.result;
// 使用支付宝小程序SDK提供的扫码支付接口进行支付
wx.request({
url: 'https://openapi.alipay.com/gateway.do',
method: 'POST',
data: {
app_id: '支付宝小程序的appId',
method: 'alipay.trade.precreate',
charset: 'utf-8',
sign_type: 'RSA2',
timestamp: new Date().toISOString(),
version: '1.0',
notify_url: '支付成功后的回调地址',
biz_content: JSON.stringify({
out_trade_no: order_id,
total_amount: 100,
subject: '测试订单'
})
},
success: (res) => {
const prepay_id = res.data.alipay_trade_precreate_response.out_trade_no;
// 使用支付宝小程序SDK提供的扫码支付接口进行支付
wx.requestPayment({
timeStamp: new Date().getTime().toString(),
nonceStr: '随机字符串',
package: 'prepay_id=' + prepay_id,
signType: 'MD5',
paySign: '签名'
});
}
});
}
});
五、注意事项
在实现支付宝小程序之间带参扫码在线付款时,需要特别注意以下几点:
- 参数传递的安全性。在小程序A中传递给小程序B的参数,一定要加密处理,防止被他人截获。
- 支付的安全性。在小程序B中使用支付宝小程序SDK进行支付时,一定要使用支付宝开放平台提供的安全支付接口。
- 支付结果的处理。在小程序B中收到支付结果后,需要将支付结果通知小程序A。