返回

条理清晰!支付宝小程序之间带参扫码在线付款具体实现

前端

一、业务场景

在实际业务中,我们经常需要在两个小程序之间进行支付。例如,小程序A有一个订单付款码,二维码中带了一个订单id,需要将这个id作为参数传递给小程序B,小程序B用支付宝扫码后获取到该参数,并且加载该订单后发起支付宝支付。

二、实现思路

支付宝官网为我们提供了两种实现思路:

  1. 通过支付宝开放平台提供的统一收单接口进行支付。
  2. 通过支付宝小程序SDK提供的扫码支付接口进行支付。

三、实现方法

1. 通过支付宝开放平台提供的统一收单接口进行支付

步骤如下:

  1. 在小程序A中,生成一个订单,并将订单id作为参数传递给小程序B。
  2. 在小程序B中,使用支付宝小程序SDK扫码支付接口,获取订单id。
  3. 使用订单id调用支付宝开放平台提供的统一收单接口进行支付。

2. 通过支付宝小程序SDK提供的扫码支付接口进行支付

步骤如下:

  1. 在小程序A中,生成一个订单,并将订单id作为参数传递给小程序B。
  2. 在小程序B中,使用支付宝小程序SDK扫码支付接口,获取订单id。
  3. 使用支付宝小程序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: '签名'
        });
      }
    });
  }
});

五、注意事项

在实现支付宝小程序之间带参扫码在线付款时,需要特别注意以下几点:

  1. 参数传递的安全性。在小程序A中传递给小程序B的参数,一定要加密处理,防止被他人截获。
  2. 支付的安全性。在小程序B中使用支付宝小程序SDK进行支付时,一定要使用支付宝开放平台提供的安全支付接口。
  3. 支付结果的处理。在小程序B中收到支付结果后,需要将支付结果通知小程序A。