需求如下
A为我方小程序,B为三方小程序。要求点击A某页面上的领取按钮,跳转至B,B拉取用户授权或强制用户登录后将得到的openid等信息在跳转的时候返回给A
第一步:A跳转到B
使用uniapp的uni.navigateToMiniProgram方法进行跳转,只要确定B的appid和版本类型就可以了
uni.navigateToMiniProgram({
appId: 'xxxxxxxxxxx',
path: `/tpjump/pages/openid?auth_scope=base_info&callback_params=cmVxX25vPTEyMzQ1Njc4OTAmY2xpZW50X2lkPTk4NzY1NDMyMQ==&callback_type=wxmini&msg_sender=${msgSender}&nonce_str=${nonceStr}&sign_type=RSA×tamp=${timeStamp}&sign=${sign}`,
envVersion: 'trial',
success: (r) => {
console.log('跳转成功了', r)
},
fail: (e) => {
console.log(e, '跳转失败了', e)
}
})
第二步:B带参数跳转回A
这一步有两个可能性,
第一种是B使用uni.navigateBackMiniProgram方法,这个方法有一个extraData用来放B返回来的参数。这种情况下B会跳转至A当时跳过去的页面,但是extraData的内容需要在app.vue的onShow里面获取。这种情况可以在app.vue的onShow方法中把获取到的数据存入vueX或者存到本地。然后再到页面的onshow里面获取vueX或者本地的数据就可以了;
第二种是B使用uni.navigateToMiniProgram同一个方法,这种情况可以直接在跳转的时候设置跳回A的页面path,如果path带上query参数,那在A的页面就可以直接在onLoad中获取数据,(如果是跳回原页面,onload可能不执行)
附:跳回A小程序后先执行app.vue的onShow,再执行跳回页面的onShow,所以才不会耽误在页面获取数据
附:这次需求还涉及到了前端RSA加签的问题,后续附上链接