@jameszuo
2018-10-26T15:58:21.000000Z
字数 1629
阅读 423
文档
// 处理微信支付人脸小程序授权回调代码示例
// 如果用户完成人脸授权后却没有点击页面上的返回按钮(不会执行navigateBackMiniProgram),而是主动打开商户小程序,就不会通过回调参数返回授权状态,此时就需要商户小程序通过后台主动查询人脸开通状态。
/**
* @type {Boolean} 授权状态: null 未知, true 已授权, false 未知
*/
let wxFaceAuthed = null
App({
getWxFaceAuthStatus() {
return new Promise((resolve, reject) => {
// 如果人脸小程序已返回授权状态,即表示已授权
if (typeof wxFaceAuthed === 'boolean') {
resolve(true)
}
// 如果人脸小程序未返回授权状态,则需要主动查询授权状态
else {
fetch('/your-server/query-wxfaceauth')
.then(res => {
// 授权状态
wxFaceAuthed = res['auth_status'] === 1
resolve(wxFaceAuthed)
})
.catch(reject)
}
})
},
// 理论上来说每次切换回商户小程序,都应该判断人脸授权状态,以规避用户主动回到商户小程序
onShow({referrerInfo} = {}) {
let {appId, extraData = {}} = referrerInfo
/**
* @type {Boolean} 授权状态 true 已授权, false 未知
*/
let {authStatus} = extraData
// 检查回调来源、授权状态
if (appId === 'wxd6ced4b24adebe76') {
wxFaceAuthed = authStatus
} else {
wxFaceAuthed = null // 未知
}
}
})
<block wx:if="{{wxFaceAuthed === null}}">
加载中
</block>
<block wx:if="{{wxFaceAuthed === true}}">
已授权
</block>
<block wx:if="{{wxFaceAuthed === false}}">
<button bind:tap="handleWXFaceAuth">跳转微信支付人脸授权</button>
</block>
Page({
data: {
wxFaceAuthed: null,
},
// 显示时检查授权状态
onShow() {
getApp().getWxFaceAuthStatus()
.then(wxFaceAuthed => {
this.setData({wxFaceAuthed})
})
.catch(err => {
// ...
})
},
handleWXFaceAuth() {
wx.navigateToMiniProgram({
// 人脸小程序APPID
appId: 'wxd6ced4b24adebe76',
// 页面路径
path: 'pages/auth/auth',
// 参数
extraData: {
/**
* 门店ID,最大长度32
* @type {String}
*/
store_id: 'SZ_123',
/**
* 生效时间戳(如:酒店入住时间),最大长度64,单位秒
* @type {Number}
*/
effective_time: 1540563473,
/**
* 过期时间戳(如:酒店退房时间),最大长度64,单位秒。永远不失效则传9999999999(10位数字)
* @type {Number}
*/
expire_time: 1540612345,
/**
* 订单号,用于记录人脸授权对应的酒店流水号,最大长度32
* @type {String}
*/
mch_trade_no: 'MP20000712789337612637',
},
success(res) {
// 拉起成功
},
fail(err) {
// 拉起失败
},
})
}
})