@jameszuo
2018-10-26T15:58:21.000000Z
字数 1629
阅读 504
文档
// 处理微信支付人脸小程序授权回调代码示例// 如果用户完成人脸授权后却没有点击页面上的返回按钮(不会执行navigateBackMiniProgram),而是主动打开商户小程序,就不会通过回调参数返回授权状态,此时就需要商户小程序通过后台主动查询人脸开通状态。/*** @type {Boolean} 授权状态: null 未知, true 已授权, false 未知*/let wxFaceAuthed = nullApp({getWxFaceAuthStatus() {return new Promise((resolve, reject) => {// 如果人脸小程序已返回授权状态,即表示已授权if (typeof wxFaceAuthed === 'boolean') {resolve(true)}// 如果人脸小程序未返回授权状态,则需要主动查询授权状态else {fetch('/your-server/query-wxfaceauth').then(res => {// 授权状态wxFaceAuthed = res['auth_status'] === 1resolve(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({// 人脸小程序APPIDappId: '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) {// 拉起失败},})}})