# 前言

# ✨魁首

🔔一个没有天赋的前端程序员👨‍💻 💡博客

# 🔰关注我

🤖Github |🔑CSDN | 💎掘金 | 📖 知乎 | 💡博客 |

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

业务场景:小程序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);
          }
        }
      });
    }
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// page.axml
<view class="page">
  <image src="{{qrcode}}" mode="widthFix" style="width:200rpx;height:200rpx;margin:60rpx"/>
</view>
1
2
3
4

# 小程序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;
    }
},
1
2
3
4
5
6
7
8
9
10
11
12
13
//selfPayment.js
onLoad() {
    this.init()
},
init(){
    let { billId } = app.globalData;
    console.log("全局ID", billId);
    // ...
}
1
2
3
4
5
6
7
8
9

参考内容:支付宝官网