# 五、扫码功能文档
# 扫码功能场景说明
对于使用微信人脸sdk的支付设备,我们提供对外接口,可以在启动摄像头进行扫码,当微信人脸sdk扫码成功后,会通知扫码结果给商户APP,扫码成功间隔3000ms。
# 接入过程
# 扫码功能时序图
sequenceDiagram
participant A as 商户APP
participant B as 微信人脸sdk
Note over A, B: Step 1:程序启动时初始化
A ->> B: 1. 程序启动时初始化 initWxpayface
B ->> A: 返回初始化结果
Note over A, B: Step 2:启动扫码,完成扫码
A ->> B: 2. 启动扫码 startCodeScanner
activate B
B ->> B: 打开摄像头
B ->> B: 进入扫码模式,进行扫码检测
B ->> B: 扫码成功
B ->> A: 返回返回扫码结果(code_msg)
B ->> B: 3000ms后继续进入扫码模式,进行扫码检测
Note over A, B: 执行商户侧的逻辑
A ->> B: 3. 停止扫码识别 stopCodeScanner
deactivate B
A ->> A: 程序退出(...)
A ->> B: 4. 释放资源 releaseWxpayface
# 公共响应参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见公共错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
# 公共错误码
参数 | 错误码 | 类型 | 说明 |
---|---|---|---|
return_code | SUCCESS | string | 接口成功 |
return_code | ERROR | string | 接口失败 |
return_code | PARAM_ERROR | string | 参数错误 |
return_code | SYSTEMERROR | string | 接口返回错误 |
# 二级错误码
参数 | 错误码 | 类型 | 说明 |
---|---|---|---|
err_code | 271378620 | Interger | 刷脸服务未初始化,请调用初始化 |
err_code | 271378621 | Interger | 刷脸服务初始化中,等待500ms左右重新调用init |
# 接口调用流程
# 1、程序启动时初始化
# 程序启动时初始化initWxpayface
接口作用:对人脸SDK进行初始化
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
ip | 否 | string | HTTP代理IP或域名 |
port | 否 | string | HTTP代理端口, 须为数字 |
user | 否 | string | HTTP代理的用户名 |
passwd | 否 | string | HTTP代理的密码 |
proxy_type | 否 | int | 0:none; 1:HttpTunnel; 2:Socks5; 3:Http v2.12及以上 |
tcp_port | 否 | string | TCP的代理端口,如果TCP代理与IP代理同一端口,则无需设置v2.12及以上 |
perform_mode | 否 | string | NORMAL_PRFORM : 正常性能表现; LOW_PERFORM : 低性能表现 默认为正常性能表现 v2.13及以上 |
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
# 请求示例
/**
* 初始化
*
*/
Map<String, String> m1 = new HashMap<>();
// m1.put("ip", "192.168.1.1"); //若没有代理,则不需要此行
// m1.put("port", "8888");//若没有代理,则不需要此行
// m1.put("user", mEtnUser.getText().toString());//若没有代理,则不需要此行
// m1.put("passwd", mEtnPassword.getText().toString());//若没有代理,则不需要此行
// m1.put("proxy_type", 1 ); //若没有代理,则不需要此行
// m1.put("perform_mode", "LOW_PERFORM");//低性能表现,默认关闭美颜等
WxPayFace.getInstance().initWxpayface(this, m1, new IWxPayfaceCallback() {
@Override
public void response(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");
showToast("初始化完成");
}
});
建议:1、您可以自定义一个Application,然后在自定义Application的onCreate()中调用initPayFace()完成人脸识别模块的初始化 2、您可以只在被调用人脸识别模块的activity的onCreate()中完成initPayFace()的调用
注意:目前我们没有在initPayFace()中做app保活的自启措施,所以当您的应用在启动过程中遇到重启/更新的问题,您必须重新调用initPayFace(),相信我们会在下一个最新的版本中对initPayFace()做进一步的完善。
# 2、启动扫码
# 启动扫码startCodeScanner
接口作用:微信人脸sdk启动摄像头进入扫码模式,扫描二维码
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
cb | 是 | IWxPayFaceCallbackAIDL | 扫码结果回调,该回掉为异步调用 |
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
return_msg | 是 | string | 对错误码的描述 |
code_msg | 是 | string | 当扫码成功时返回扫码内容 |
# 请求示例
/**
*启动扫码
*
*/
WxPayFace.getInstance().startCodeScanner(new IWxPayfaceCallback() {
@Override
public void response(Map info) throws RemoteException {
if (info != null){
String return_code = (String) info.get("return_code");
Integer errcode = (Integer) info.get("err_code");
String return_msg = (String) info.get("return_msg");
String code_msg = (String) info.get("code_msg");
final String resultString = "startCodeScanner, return_code : " + return_code + " return_msg : " + return_msg + " code_msg: " + code_msg;
/**
这里添加业务自定义的工作即可 注意该回调在异步线程
**/
}
}
});
注意:
- 该方法可以多次调用,但是扫码结果只会回调最后一次注册的回调.
- 该方法注册的回调接口在stopCodeScanner之前,扫码成功都会回调。
- 扫码模式和刷脸互斥,一旦开始刷脸则SDK会退出扫码模式,扫码回调失效,如果需要扫码功能,需要刷脸结束后再次调用该方法启动扫码。
- 请在调用初始化initWxpayface成功后调用启动扫码startCodeScanner
# 3、停止扫码识别
# 停止扫码识别stopCodeScanner
接口作用:微信人脸sdk停止摄像头扫码,退出扫码模式
# 请求示例
/**
*关闭扫码
*
*/
WxPayFace.getInstance().stopCodeScanner();
注意:请在调用启动扫码startCodeScanner成功后调用停止扫码识别stopCodeScanner
# 4、释放资源
# 释放资源releaseWxpayface
接口作用:释放人脸服务,断开连接。
# 请求示例
/**
*释放资源
*
*/
WxPayFace.getInstance().releaseWxpayface(context);