參考 : https://blog.csdn.net/qq_36710146/article/details/105110741
實際項目中:以下為封裝的 小程序 支付 人臉識別 的方法js文件 在具體的頁面中進行引入使用
const request = require('request.js')
var app = getApp();
let payUtil = {
/**
* 獲取簽名
*/
getSign: function (requestParam) {
let params = {
url: '/wechat/pay/sign',
body: requestParam.data,
method: 'POST'
}
request.doRequest(
params,
function (data) {
wx.requestPayment({
'timeStamp': data.timeStamp + '',
'nonceStr': data.nonceStr,
'package': data.package,
'signType': data.signType,
'paySign': data.paySign,
'success': function (res) {
// 支付成功回調
requestParam.successFun(data.wechatpayid);
},
'fail': function (res) {
// 支付成功回調
requestParam.failFun(data.wechatpayid);
},
'complete': function (res) { }
})
},
function (data) {
wx.showToast({
title: '請求錯誤',
icon: 'none'
})
}
)
},
/**
* 支付
* params:
* total_fee: 總金額
* paytype: 交易類型
* desc: 交易描述
* vipid: 交易用戶
*/
pay: function(params) {
var that = this;
wx.getStorage({
key: 'openId',
success: function(res) {
params.data['openid'] = res.data;
that.getSign(params);
},
fail: function(res) {
that.getOpenid(function() {
that.pay(params);
})
}
})
},
/**
* 調用登錄接口獲取code
* successFun: 成功回調函數
*/
getOpenid: function(successFun) {
//調用登錄接口
wx.login({
success: function (res) {
let params = {
url: '/wechat/session',
body: {
js_code: res.code
},
method: 'POST'
}
request.doRequest(
params,
function (data) {
wx.setStorageSync('openId', data.openid); //存在小程序緩存中
wx.setStorageSync('sessionKey', data.session_key);
if (successFun && successFun instanceof Function) {
successFun();
}
},
function (data) {
wx.showToast({
title: '請求錯誤',
icon: 'none'
})
}
)
}
})
},
/**
* 校驗session
* @param {*} callBack
*/
checkSession: function(callBack) {
var that = this;
// 獲取sessionKey
wx.checkSession({
success() {
//session_key 未過期,並且在本生命周期一直有效
if (callBack && callBack instanceof Function) {
callBack();
}
},
fail() {
// session_key 已經失效,需要重新執行登錄流程
that.getOpenid(function() {
if (callBack && callBack instanceof Function) {
callBack();
}
})
}
})
},
/**
* 獲取用戶信息
*/
getUserInfo: function(callBack) {
var that = this;
// 查看是否授權
wx.getSetting({
success(res) {
if (res.authSetting['scope.userInfo']) {
// 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱
wx.getUserInfo({
success: function (resp) {
that.getOpenid(function() {
resp.userInfo['openid'] = wx.getStorageSync('openId');
wx.setStorage({
key: 'userInfo',
data: resp.userInfo,
})
callBack();
})
}
})
}
}
})
},
/**
* 獲取用戶信息
* @param {*} callBack
*/
getUser: function(callBack) {
var that = this;
wx.getUserInfo({
success: function (resp) {
that.getOpenid(function() {
wx.getStorage({
key: 'openId',
success: function(res) {
resp.userInfo['openid'] = res.data;
wx.setStorage({
key: 'userInfo',
data: resp.userInfo,
})
callBack();
}
})
})
}
})
},
/**
* 進行人臉識別
*/
gotoVerify: function (successFun) {
this.getBizToken(function(BizToken) {
// 調用實名核身功能
wx.startVerify({
data: {
token: BizToken // BizToken
},
success: (res) => { // 驗證成功后觸發
// res 包含驗證成功的token, 這里需要加500ms延時,防止iOS下不執行后面的邏輯
setTimeout(() => {
let params = {
url: '/wechat/detectInfo',
body: {
"bizToken": BizToken
},
}
request.doRequest(
params,
function (data) {
wx.showModal({
title: "認證成功",
showCancel: false
})
// if (successFun instanceof Function) {
// successFun(data);
// }
successFun(data);
},
)
}, 500);
},
fail: (err) => { // 驗證失敗時觸發
// err 包含錯誤碼,錯誤信息,彈窗提示錯誤
setTimeout(() => {
wx.showModal({
title: "提示",
content: err.ErrorMsg,
showCancel: false
})
}, 500);
}
});
});
},
/**
* 獲取bizToken之后回調人臉識別
* @param {*} callBack
*/
getBizToken: function(callBack) {
let params = {
url: '/wechat/bizToken',
body: {},
}
request.doRequest(
params,
function (data) {
callBack(data.bizToken);
},
function () {
wx.showModal({
title: "提示",
content: '網絡異常',
showCancel: false
})
}
)
}
}
module.exports = {
payUtil: payUtil
}


