# SDK小程序
更新记录
版本 | 简要说明 | 修改日期 |
---|---|---|
1.0 | 新增SDK模式IoT小程序开发指引内容 | 2022/2/22 |
# 背景
微信小程序硬件框架( Wechat Mini-Program Framework,以下全部简称 [WMPF] )是由微信官方提供、除微信客户端之外的小程序运行环境。为方便理解,可以将“小程序框架”与“小程序应用”,类比为“浏览器”与“浏览器插件”的关系。[WMPF] 可广泛应用于多种智能硬件,本身不限于刷脸支付设备使用。
[WMPF]由于适用多种硬件环境,通过与WMPF团队沟通与协调,且刷脸设备相对于其他设备会有所不同(包括接入流程、部分接口设计)。因此,刷脸设备SDK模式IOT小程序开发有特殊的流程。
# 1.前提条件
● 请以「SDK 模式」接入刷脸支付的Android设备;
● 若设备已完成软硬件接入流程,但服务商不知何时算完成软硬件接入流程,可点击进入微信刷脸支付开放平台进行详细了解;
● 若已绑定铺设服务商,但服务商不知如何绑定,可点击进入设备关系绑定进行详细了解;
● 在刷脸设备上按照系统设计要求预置刷脸APP和iotservice(如刷脸APP版本低于2.20,则不符合最低版本要求,请通过微信刷脸支付开放平台SDK模式下载最新版本),安装 WMPF(v1.0.3版本或以上)。
# 2.接入流程
# 2.1 注册微信终端合作平台账号
以铺设服务商帐号身份,登陆微信支付商户平台 管理刷脸支付设备,并进入「刷脸SDK接入小程序框架」功能。
# 2.2 设备类型注册
激活微信终端合作平台帐号,自动完成设备类型注册,获取product_id和model_name。
# 2.3 获取相关参数
使用设备的主应用(即商户app)在微信开放平台创建移动应用,获取该移动应用的 AppID 即hostAppId,及AppSecret、 access_token 。
备注 :
1、开放平台帐号,需完成企业主体认证;
2、创建移动应用一般需7天审核,请尽早申请。同一应用的apk只可以创建一个移动应用 AppID;
3、Android应用签名生成工具。
# 2.4 绑定运行的小程序
绑定设备上的主应用(即商户app)所需运行的小程序 AppID。
特别说明:
1、此处输入的appid为步骤3生成的移动应用appid(hostappid);
2、按要求添加完以后,点击管理,添加小程序appid。
# 2.5 注册设备
设备注册为后台接口,确保设备用于调起小程序权限,详情请点击进入调用方法进行了解。
2.5.1 可在终端合作平台的「查询设备状态」功能上,检查设备是否成功注册;
2.5.2 如需批量导出设备列表可参考:微信支付IoT设备API。
特别说明:
1、device_id即设备序列号(SN);
2、model_name即设备型号。
# 3.开发流程
# 3.1 小程序的两种登录、启动模式
3.1.1 先登录再启动小程序
getWxpayfaceRawdata
get_wxpayface_authinfo A ->> C: Step2 激活 note over A,C : IPCInvokerTask_ActivateDeviceByIoT A ->> C: Step3 预置刷脸调用参数 note over A,C : IPCInvokerTask_InitWxFacePayInfo传入getWxpayfaceCode的调用参数 A ->> C: Step4 请求用户刷脸登录 note over A,C : IPCInvokerTask_AuthorizeByWxFacePay C ->> B: Step5 (自动) B ->> B: Step6 用户刷脸登录 C -->> A: Step7 登录凭据+用户信息 A ->> C: Stp8 启动小程序 note over A,C : IPCInvokerTask_LaunchWxaApp C ->> D: Step9 启动小程序(带登录状态) A ->> C: 注销登录 note over A,C : IPCInvokerTask_Deauthorize
3.1.2 先启动小程序再登录
getWxpayfaceRawdata
get_wxpayface_authinfo A ->> C: Step2 激活 note over A,C : IPCInvokerTask_ActivateDeviceByIoT A ->> C: Step3 预置刷脸调用参数 note over A,C : IPCInvokerTask_InitWxFacePayInfo传入getWxpayfaceCode的调用参数 A ->> C: Step4 启动小程序 note over A,C : IPCInvokerTask_LaunchWxaApp C ->> D: Step5 启动小程序(无登录状态) D ->> D: Step6 微信登录 note over D,D : wx.login D ->> C: Step7 (自动) C ->> B: Step8 (自动) B ->> B: Step9 用户刷脸登录 D ->> D: Step10 已登录 A ->> C: Step11 注销登录 note over A,C : IPCInvokerTask_Deauthorize
# 3.2 相关接口
3.2.1 激活设备
激活设备:IPCInvokerTask_ActivateDeviceByIoT
3.2.2 预置刷脸调用参数
1、[WMPF]及小程序调用刷脸功能前置条件:IPCInvokerTask_InitWxFacePayInfo;
2、参考刷脸SDK「刷脸支付」getWxpayfaceCode的调用参数;注意参数的有效期,如authinfo的expires_in。
3.2.3 请求用户授权登录,使[WMPF]获得用户的微信登录状态
1、刷脸登录接口:IPCInvokerTask_AuthorizeByWxFacePay;
● 用户刷脸成功后,主应用可获得用户信息,参考刷脸 SDK「人脸识别」getWxpayfaceUserInfo的返回参数。
2、二维码登录接口:IPCInvokerTask_Authorize;
3、注销登录接口:IPCInvokerTask_Deauthorize。
注意:调用后将完全退出小程序。
3.2.4 启动、关闭小程序
1、启动特定小程序:IPCInvokerTask_LaunchWxaApp;
2、扫码拉起小程序:IPCInvokerTask_LaunchWxaAppByQrCode;
3、关闭小程序:IPCInvokerTask_CloseWxaApp。
注意:
正式版小程序可以无登录状态启动;
体验版、开发版,由于平台需校验用户权限,必须前置登录才可以启动;
调用后小程序将退至后台。
3.2.5 预加载(增加小程序的打开速度,根据提示方式不同,分为以下两个接口)
1、预加载小程序运行环境:IPCInvokerTask_PreloadRuntime提升启动速度;
2、预热特定小程序:IPCInvokerTask_LaunchWxaApp需传入参数isForPreWarmLaunch=true。
注意:
预加载是预加载小程序启动所需要的环境,预热是预加载指定的小程序达到快速启动指定小程序的效果。
3.2.6 主应用与小程序的交互
1、WMPF调用通道 (Invoke Channel),主应用与小程序之间可作本地双向通讯,通讯内容及格式可自定义。
3.2.7 小程序的能力
刷脸支付硬件上的专有能力:
1、小程序运行中发起刷脸登录,仅当 [WMPF] 无登录状态时适用。
第一,由wx.login接口触发;
第二,触发逻辑如下:
● 由于 [WMPF] 无登录状态,调用wx.login时无法正常返回用户信息,所以 [WMPF] 将自动请求用户登录,再执行常规的wx.login;
● 若已前置执行IPCInvokerTask_InitWxFacePayInfo预置刷脸调用参数,优先调用刷脸登录;若刷脸失败或无法预置刷脸调用参数,降级为调用二维码登录。
第三,截至[WMPF]v1.0.3,在小程序生命周期内只可执行一次,无论是否登录成功。
2、小程序运行中发起刷脸支付。
第一,需前置执行IPCInvokerTask_InitWxFacePayInfo预置刷脸调用参数;
第二,小程序调用wmpf.wxFacePay.facePay调起刷脸支付,获取付款码。
3.2.8 其他接口
其他接口可根据自身需求,根据Service与Client的IPC交互协议进行调用。
# 3.3 相关文档(可做了解)
文档名称 | 文档内容说明 |
Home | WMPF通用步骤,和刷脸设备无关,做了解即可 |
硬件注册步骤 | WMPF通用步骤,和刷脸设备无关,做了解即可 |
硬件注册For JVM (experimental) | WMPF通用步骤,和刷脸设备无关,做了解即可 |
人脸识别及支付相关文档 | 刷脸支付设备专用 |
Service与Client的IPC交互协议 | 通用,主应用与[WMPF]的交互能力(Service 即[WMPF],Client 即主应用) |
WMPF调用通道(Invoke Channel) | 通用,主应用与小程序的交互能力 |
WMPF专有接口(JSAPI) | 通用,小程序在[WMPF]上的扩展能力 |
WMPF Push能力 | 通用,触发主应用的消息推送能力 |
以「SDK模式」接入刷脸支付的设备运行小程序的产品文档 | 以「SDK模式」接入刷脸支付的设备运行小程序的产品文档 |
常见错误码 | 通用,errCode返回的错误信息可通过此文档查询 |
Q&A | 通用,常见问答,建议阅读 |