前一段跟收銀系統打了一波交道,因為用到了微信人臉支付,在對接的程序中也踩了一波小
坑,現在專案搞完運行了,特地寫個博客記錄一下,
先說開發檔案鏈接的事情,微信這個檔案鏈接容易讓人混淆,先貼出目前正確的檔案地址
SDK模式 | 微信刷臉支付,建議直接看這個跑demo,然后跟后臺統一,我這對接的時候跟后臺看的
地址就不一樣,略坑.
接下來就是對接了,新的檔案簡單明了,看設備是走SDK模式,還是青蛙定制的設備,一般來
說都是SDK模式,開放程度高,下面來說一下我們的SDK模式,
微信的檔案寫的很是清晰,按照步驟一步一步來就OK了,我們來看一下步驟
1.程式啟動時初始化這個建議在application中做,在activity中搞的話我測驗過,有
點拉胯
private void initWeChatFace() {
WxPayFace.getInstance().initWxpayface(instance, new IWxPayfaceCallback() {
@Override
public void response(Map info) throws RemoteException {
if (!isSuccessInfo(info)) {
return;
}
Logger.d("微信人臉服務","初始化完成");
}
});
}
2.獲取資料getWxpayfaceRawdata
這個是獲取本地資料,目的是為了后面進行呼叫介面,加密等使用,前提是本地正確按照微信
的apk哈,因為這種模式,就是呼叫微信自己apk完成人臉支付操作的,安裝包就在首頁下載,
WxPayFace.getInstance().getWxpayfaceRawdata(new IWxPayfaceCallback() {
@Override
public void response(final Map info) throws RemoteException {
if (!isSuccessInfo(info)) {
return;
}
final String rawdata = info.get("rawdata") + "";
Logger.d("rawdata", rawdata);
String returnCode = (String) info.get(RETURN_CODE);
String returnMsg = (String) info.get(RETURN_MSG);
Logger.d("人臉資料", returnCode + "-----" + returnMsg);
try {
// HashMap<String, Object> map = new HashMap<>();
//
// map.put("rawdata", rawdata);
// map.put("mch_id", "1900007251");
// map.put("mch_id", "1900007231");
getAuthInfo(rawdata);
} catch (Exception e) {
e.printStackTrace();
}
}
});
3.獲取呼叫憑證
這一步比較重要,需要后臺配合,安裝微信檔案上的引數配置,一個都不能少,因為這個是涉
及到企業資訊,這個關鍵點在后臺,請提醒后臺認證看檔案配置引數畢竟都是機密資訊

4.進行人臉識別
第三步呼叫憑證如果正常通過的話,客戶端就會拿到檔案上一些機密的引數,通過這些引數,
去拉起人臉識別,請注意,到這一步是識別,也就是說到這一步可以調起攝像頭了,
WxPayFace.getInstance().getWxpayfaceCode(params, new IWxPayfaceCallback() {
@Override
public void response(final Map info) throws RemoteException {
if (info == null) {
showToast("呼叫回傳為空, 請查看日志");
new RuntimeException("呼叫回傳為空").printStackTrace();
return false;
}
String code = (String) info.get("return_code");
String msg = (String) info.get("return_msg");
String facecode = (String) info.get("face_code");
String openid = (String) info.get("openid");
String subOpenid = (String) info.get("sub_openid");
....
}
}, new IWxPayfaceCallback() {
@Override
public void response(Map info) throws RemoteException {
if (info == null) {
new RuntimeException("呼叫回傳為空").printStackTrace();
return;
}
String code = (String) info.get("return_code"); // 錯誤碼
String msg = (String) info.get("return_msg"); // 錯誤碼描述
if (code == null || !code.equals("SUCCESS")) {
new RuntimeException("呼叫回傳非成功資訊,return_msg:" + msg + " ").printStackTrace();
return ;
}
/*
在這里處理您自己的業務邏輯:
執行到這里說明用戶已經確認支付結果且成功了,此時刷臉支付界面關閉,您可以在這里選擇跳轉到其它界面
*/
}
});
如果 成功的話,就會拉起微信人臉,點亮攝像頭,這一步容易出現的問題就是
1.傳參一定要注意,要注意,要注意(大部分都是因為這個)
2.攝像頭白屏或者呼叫失敗,可以用出廠工具去測驗攝像頭,也有可能是設備本身的問題
(設備沒有經過微信認證,大概率會出現白屏)
5.發起訂單支付
這個也是后臺介面,客戶端將上一步識別成功的人臉資訊facecode和其它一些后臺所需要的信
息,通過介面交給后臺,后臺向微信下單,發起扣款,然后跟咱們就沒得關系了,是不是有點小舒
服,哈哈,因為微信的apk頁面邏輯幫我們搞完了,咱們只要傳給后臺就OK了,
我們只傳了face_code和訂單號,做個參照哈哈,我們后臺還是非常給力的,

6.支付結果處理
微信新版的檔案取消了介面回呼的,所以又給我們省了一步操作,我們只要跟后臺異步拿結
果 就OK了,然后跟根據自己的專案邏輯去做下面的邏輯處理,另外新版的SDK版本里面,還增加
了語音和打斷支付的環節,但是沒有更新,不知道為啥日志寫的那么新,堪稱迷之操作,如果哪位
小伙伴對接了,能用最新的就用最新的,因為舊版的安裝包實在是太大了,


7.總結
總的來說,對接流程還是比較清晰明了,只是記得要認真看檔案,因為引數比較多,客戶端或
者后臺任意一個地方出錯,就會導致流程出錯,因為一些涉密資訊所以不太方便貼的太多,有對接
的小伙伴可以加Q940917911交流一下,目前為止我們的設備運行還比較流暢,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/299366.html
標籤:其他
