1.背景介绍
使用VS2010开发一个OCX插件,实现在Windows平台的终端上刷脸支付。
2.Windows终端环境安装
安装ImiSDK-Lite-Installer-1.7.2.exe,在C:\Program Files (x86)\Hjimi生成目录。-----华捷摄像头的SDK和驱动
微信网站下载wxfacepay-windows-1.14.zip,下载地址:https://pay.weixin.qq.com/wiki/doc/wxfacepay/develop/sdk-windows.html
------应用使用的本地SDK库
3.ocx的创建同之前一篇支付宝中间件开发
4.遇到的第一个坑
sdk WxpayFaceSDK.dll使用了64位的版本,导致LoadLibrary失败,使用GetLastError跟踪错误码193,使用x86版本的动态库就可以了。分析如果要使用64位版本,ocx需要以64位的方式编译。
5.第二个坑
WxpayFaceService.exe的启动问题,使用管理员启动启动服务.bat,会报如下错误。
直接打开bat文件可以启动服务,但日志不知道在哪里输出。
6.遭遇第三个坑
在做getWxpayfaceRawdata这步时,返回{"return_code":"SYSTEMERROR","return_msg":"Unable to get device SN"}
原因是没有生成序列号路径C:\serial.txt,规则如下:
7.应用流程第三步get_wxpayface_authinfo(rawdata)
应用中发现的一个问题:
解决这个问题的方案是调整测试终端的时间:必须和北京时间的误差小于5分钟。
8.实用小技巧
ocx方法定义的不对时,可以在项目--类向导里删除
9.带传入参数的函数定义
出来参数是LPCTSTR,如下:
LONG CWxface2payCtrl::getFaceCode(LPCTSTR face_authtype, LPCTSTR authinfo, LPCTSTR telephone)
10.遭遇第四个坑
人脸识别 getWxpayfaceCode,已经只剩下
FACEPAY
模式,FACEID模式已取消
11.一个注意点
微信的等待支付UI需要等到更新支付结果updateWxpayfacePayResult之后才会关闭。使用OCX的应用可以不用自己做遮罩层。
微信的UI和函数返回不是阻塞的,当点击UI上确认支付的按钮后,应用就能通过OCX的属性获取face_code。
最新修订:调用updatePayResult,SDK服务会轮询支付结果,成功关闭窗体。支付失败,或者没成功就会继续轮询。应用在得到交易结果后,需要等updatePayResult的结果,再做应用自己的提示。
12.又一个注意点
在刷脸支付时要注意订单号与SDK函数getWxpayfaceCode的入参订单号保持一致,如果不一致,会报face_code错误。另外face_code只能使用一次。
13.关于代理模式
和支付宝的人脸支付SDK一样,当支付终端无法连上公网环境时,需要采用代理服务转发来实现功能正常运行。
官方说明:https://pay.weixin.qq.com/wiki/doc/wxfacepay/faq/network.html
14.OCX及后端接口测试
a.打开腾讯本地服务
这个已经更新,用这个打开:
b.调用ocx的Initialize方法
c.调用ocx的getFaceRawdata方法
d.获取ocx的rawdata属性
e.调用后台接口
f.调用ocx方法 getFacePay
g.获取ocx的属性facecode和openid
h.调用后台接口facepay,注意faceCodeType
0走旧的刷脸支付接口,1走扫码付接口
i.交易过程需要调用后台接口,查询,撤销,退款
j.调用ocx方法 updatePayResult,在用容器测试时侯为了提前关闭UI,好用测试网页测试。在ocx方法 getFacePay里加入DEBUG代码执行updatePayResult内容。
k.调用ocx方法releasePayFace
15.最新变更
a.安装最新终端包
安装后多出一个应用
终端配置好SN序列号后,在有网得情况下使用这个工具完成检测(通过SDK传输SN到后台)
特别注意这个过程,终端必须只连一个外网,不能内外网同时连
过程中安装人员需要刷脸成功一次,最后出现如下画面就可以使用SDK刷脸支付了