两个支付宝小程序之间带参扫码在线付款实现

876 阅读2分钟

业务场景:小程序A有一个订单付款码,二维码中带了一个订单id,需要将这个id作为参数传递给小程序B,小程序B用支付宝扫码后获取到该参数,并且加载该订单后发起支付宝支付;

实现思路:支付宝官网 给我们提供了跳转的不同场景,当前业务属于:小程序互相跳转,实现分两步:①小程序A的二维码中携带需要的参数;②支付宝扫码后进入到小程序B的指定页面,并读取该参数;

小程序A需要做的事

1、my.navigateToMiniProgram 传参

image.png

2、my.generateImageFromCode 生成二维码

// page.js
Page({
  data: {
   qrcode: '',
  },
  onReady() {
   if (my.canIUse('generateImageFromCode')) {
      my.generateImageFromCode({
        code: `alipays://platformapi/startapp?appId=${appId}&page=pages/selfPayment/selfPayment&query=billId=${billId}`,
        format: 'QRCODE',
        width: 400,
        correctLevel: 'H',
        success: res => {
          console.log(res.image);
          this.setData({
            qrcode: res.image
          });
        },
        fail(res) {
     console.log(res.error);
        },
        complete(res) {
         if (res.image) {
           console.log('success', res.image);
          } else {
           console.log('fail', res.error, res.errorMessage);
          }
        }
      });
    }
  }
})
// page.axml
<view class="page">
  <image src="{{qrcode}}" mode="widthFix" style="width:200rpx;height:200rpx;margin:60rpx"/>
</view>

小程序B需要做的事

1、先来了解两个概念:

  • 冷启动:当用户打开未启动过,或者是已经销毁的小程序时,称为冷启动。此时小程序会执行初始化,初始化完成后,会触发 onLaunch 回调函数。

  • 热启动:当用户打开已经关闭但仍处于后台运行的小程序时,称为热启动。在这种情况下,小程序并不会被销毁后重启,而仅是从后台切换到前台,此时,onShow 函数会触发,onLaunch 回调函数不会被触发。

  • 从后台运行切换为前台运行:当未被系统销毁的小程序再度被打开或者激活时,会从后台运行切换为前台运行。

当前场景需要在 app.js 中注册前台 / 后台切换的回调函数。当小程序从后台进入前台显示时会触发  onShow

2、解析参数

// app.js
globalData: {
    // 全局数据
    billId: "",
},
onShow(options) {
    console.log("启动参数===>",options);
    let { query = {} } = options;
    let { billId } = query;
    if (billId) {
        this.globalData.billId = billId;
    }
},
//selfPayment.js
onLoad() {
    this.init()
},
init(){
    let { billId } = app.globalData;
    console.log("全局ID", billId);
    // ...
}

参考内容:支付宝官网