# 一、刷脸支付文档
# 刷脸支付场景说明
该流程通过识别用户人脸、手机号,获取人脸凭证(face_code),该人脸凭证具有较高的安全等级,可用于支付。
# 接入过程
接口调用注意事项:
在刷脸支付流程中,Step1之前不进行过多的主线程耗时操作,避免耗时累计导致启动刷脸慢影响用户体验。
# 刷脸支付时序图
# 公共响应参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见公共错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
# 1、公共错误码
参数 | 错误码 | 类型 | 说明 |
---|---|---|---|
return_code | SUCCESS | string | 接口成功 |
return_code | ERROR | string | 接口失败 |
return_code | PARAM_ERROR | string | 参数错误 |
return_code | SYSTEMERROR | string | 接口返回错误 |
# 2、二级错误码
参数 | 错误码 | 类型 | 说明 |
---|---|---|---|
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、获取数据
# 获取数据getWxpayfaceRawdata
接口作用:获取rawdata数据
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
rawdata | 是 | string(2048) | 初始化数据。用于接口调用, 参见: get_wxpayface_authinfo: rawdata |
# 请求示例
/**
* 获取rawdata
*
*/
WxPayFace.getInstance().getWxpayfaceRawdata(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 rawdata = info.get("rawdata");
}
});
注意:请在初始化(initWxpayface)成功后获取数据(getWxpayfaceRawdata)
# 3、获取调用凭证
# 获取调用凭证get_wxpayface_authinfo(rawdata)(获取调用凭证)
接口作用:获取调用凭证
接口地址:https://payapp.weixin.qq.com/face/get_wxpayface_authinfo
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
store_id | 是 | string(32) | 门店编号, 由商户定义, 各门店唯一。 |
store_name | 是 | string(128) | 门店名称,由商户定义。(可用于展示) |
device_id | 是 | string(32) | 终端设备编号,由商户定义。 |
attach | 否 | string | 附加字段。字段格式使用Json |
rawdata | 是 | string(2048) | 初始化数据。由微信人脸SDK的接口返回。 获取方式参见: [获取数据 getWxpayfaceRawdata](#获取数据 getWxpayfaceRawdata) [获取数据 getWxpayfaceRawdata](#获取数据 getWxpayfaceRawdata) |
appid | 是 | string(32) | 商户号绑定的公众号/小程序 appid |
mch_id | 是 | string(32) | 商户号 |
sub_appid | 否 | string(32) | 子商户绑定的公众号/小程序 appid(服务商模式) |
sub_mch_id | 否 | string(32) | 子商户号(服务商模式) |
now | 是 | int | 取当前时间,10位unix时间戳。 例如:1239878956 |
version | 是 | string | 版本号。固定为1 |
sign_type | 是 | string | 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5 |
nonce_str | 是 | string(32) | 随机字符串,不长于32位 |
sign | 是 | string | 参数签名。详见微信支付签名算法 |
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string(16) | 错误码。公共定义见 公共错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
authinfo | 是 | string(4096) | SDK调用凭证。用于调用SDK的人脸识别接口。 参见[人脸识别 getWxpayfaceCode](#人脸识别 getWxpayfaceCode) |
expires_in | 否 | int | authinfo的有效时间, 单位秒。 例如: 3600 在有效时间内, 对于同一台终端设备,相同的参数的前提下(如:相同的公众号、商户号、 门店编号等),可以用同一个authinfo,多次调用SDK的 getWxpayfaceCode 接口。 |
nonce_str | 是 | string(32) | 随机字符串 |
sign | 是 | string(32) | 响应结果签名 |
appid | 是 | string(32) | 公众号 |
mch_id | 否 | string(32) | 商户号 |
sub_appid | 否 | string(32) | 子商户公众账号ID(服务商模式) |
sub_mch_id | 是 | string(32) | 子商户号(服务商模式) |
# 请求示例
<return_code>SUCCESS</return_code>
<return_msg>请求成功</return_msg>
<nonce_str>Tivppi4UXAbgLxk8e1Sij76YdowOFFii</nonce_str>
<sign>PL0EUID6A7ICWNKHCSMQC0UIXOYNSE5B</sign>
<appid>wx31fdaErqR31</appid>
<mch_id>12345689</mch_id>
<authinfo>q3OPhFtQBf6KZGqmZhejKCRy5K/ch0kwS11YSsEj9XmUGqcsT2QPHt0Oa7xaCMCoSZTWMmShCo4dOiO5tU+OJEsvSxXzn5m3Nkh747tinNlbpJmVq1zOPj+FJNndkzanxoiAddO8p1EfrmUhJs/aNf0pDfrPoVfkAapK+ZY6blwyaDQ9bB7+KkZq29kObsXOZ3thg+bxP4RAqC0oxNS4JiyP0uA1Euzxtkc9lCTebloFied8stILrMehUKukeMGkZ1SzTyc8/HFHApzHahNPX6yD8ttzYnhe+IRMFJgpuTlIvEOYZUxenPXE1A5clrPvOBeJDszX/OvZl4fpYWPpXAcVQlw+gfYhblt+rT6ALMsD73w/rT4NRriQEEraC4Pfb5yua4qAqv4TVo04</authinfo>
<expires_in>7200</expires_in>
建议:返回的接口凭证authinfo
,可以在expires_in
指定的有效期内,同一台机具上重复使用
注意:减少调用get_wxpayface_authinfo接口可有效减少启动耗时,提升用户体验。对于同一台终端设备,相同的参数的前提下,get_wxpayface_authinfo接口返回的authinfo在expires_in有效时间内可以重复使用,未过期建议使用缓存authinfo,即将过期再进行调用续期即可。
# 4、启动防火墙配置(非必须)
注意:这一步不是必须的,且只支持v2.21版本以上; 仅适用配置了固定IP访问微信刷脸的商户使用
# 启动防火墙配置enableFirewall
接口作用:如果您网络有防火墙,并且在后台配置了域名和IP关系,则可以调用这个方法,调用成功之后,微信支付SDK进行网络访问时,如果遇到配置的域名,则只会访问这个域名配置的对应IP列表中的IP。这样您的防火墙配置白名单IP时只需配置这些IP。该方法重启后还会生效,除非调用disableFirewall。
# 接口参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
mchId | 是 | string | 商户Id |
subMchId | 是 | string | 子商户Id |
wxpayfaceCallBack | 是 | IWxPayFaceCallbackAIDL | 回调 |
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
# 请求示例
/**
* 启动防火墙配置
* @param mchId 商户Id
* @param subMchId 子商户Id
* @param wxpayfaceCallBack 回调
*/
WxPayFace.getInstance().enableFirewall("商户ID", "子商户ID", new IWxPayfaceCallback() {
@Override
public void response(Map info) throws RemoteException {
if (!isSuccessInfo(info)) {
return;
}
showToast("初始化防火墙完成");
}
});
注意:请在初始化(initWxpayface)成功后再调用
# 5、进行人脸识别
# 进行人脸识别getWxpayfaceCode(获取用户信息)
接口作用:启动人脸APP主界面入口,开启人脸识别,获取支付凭证或用户信息。第一个callback参数wxpayfaceCallBack负责获取付款码,第二个callback参数updateResultWxpayfaceCallBack负责监听SDK查单退出。
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | 商户号绑定的公众号/小程序 appid |
mch_id | 是 | string | 商户号 |
sub_appid | 否 | string(32) | 子商户绑定的公众号/小程序 appid(可不填) |
sub_mch_id | 否 | string(32) | 子商户号(非服务商模式不填) |
store_id | 是 | string | 门店编号 |
openid | 否 | string | 通过getWxpayfaceUserInfo获取的openid,传入后可使用快捷支付模式。如果也传入了telephone,将判断手机号。 |
out_trade_no | 是 | string | 商户订单号,须与调用支付接口时字段一致,该字段在在face_code_type 为"1"时可不填,为"0"时必填 |
total_fee | 是 | string | 订单金额(数字), 单位分. 该字段在在face_code_type 为"1"时可不填,为"0"时必填 |
face_authtype | 是 | string | 可选值:FACEPAY : 人脸凭证,常用于人脸支付FACEPAY_DELAY : 延迟支付(提供商户号信息联系微信支付开通权限) FACE_AUTH : 实名认证(需联系微信支付开通权限) |
authinfo | 是 | string | 调用凭证。获取方式参见: get_wxpayface_authinfo |
ask_ret_page | 否 | string | 是否展示微信支付成功页,可选值:"0",不展示;"1",展示。 V2.13后无效 |
face_code_type | 是 | string | 目标face_code类型,必填值:"1",刷卡付款码:18位数字,通过「付款码支付/被扫支付」接口完成支付。 |
ignore_update_pay_result | 否 | string | 商户端是否对SDK返回支付结果,可选值:"0",返回支付结果,商户需在确认⽀付结果后调⽤[updateWxpayfacePayResult]通知SDK;"1",不返回支付结果。如果不填写则默认为"0"。 V2.13后无效 |
screen_index | 否 | string | 指定刷脸界面的运行屏幕,可选值:“0”, 运行在主屏; "1", 运行在副屏; "2", 双屏同显; "3", 强制用presentation方式运行在副屏; "4", 副屏运行刷脸,主屏展示引导窗 |
overlay_option | 否 | string | 指定刷脸presentation界面的层级,可选值:“0”不强制指定层级(默认);"1"强制在其他应用上层显示; |
# 接口wxpayfaceCallBack返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
face_code | 是 | string | 人脸凭证, 用于刷脸支付。 |
openid | 是 | string | openid(相当于用户身份) |
sub_openid | 否 | string | 子商户号下的openid(服务商模式) |
underage_state | 否 | int | 用户年龄信息,使用需要联系微信支付开通权限 可取值: 0:状态不明确,或权限未开通; 1: 成年年人; 2: 未成年人 |
# 接口updateResultWxpayfaceCallBack返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码(USER_QUERY_CANCEL和SUCCESS)。公共定义见 公共错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
# 请求示例1
HashMap params = new HashMap<>();
// params.put("appid", "");
// params.put("mch_id","");
// params.put("authinfo","");
...
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");
....
}
});
建议:请在获取调用凭证get_wxpayface_authinfo(rawdata)成功后进行人脸识别(getWxpayfaceCode)
# 请求示例2
HashMap params = new HashMap<>();
// params.put("appid", "");
// params.put("mch_id","");
// params.put("authinfo","");
...
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 ;
}
/*
在这里处理您自己的业务逻辑:
执行到这里说明用户已经确认支付结果且成功了,此时刷脸支付界面关闭,您可以在这里选择跳转到其它界面
*/
}
});
建议:请在获取调用凭证get_wxpayface_authinfo(rawdata)成功后进行人脸识别(getWxpayfaceCode) ; 请不要直接在副屏presentation里调用。
# 6、退出刷脸
# 退出刷脸页面quitWxpayface(2.22及以上版本新增)
接口作用:在刷脸过程中,只要付款码还没有返回,都可以调用该接口退出刷脸,通常用于用户不想刷脸的时候调用该接口退出刷脸
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
map | 是 | Map<String, String> | 示例:map.put("toast_text", "退出刷脸支付"); put的key必须是string类型,value也必须是string类型,如果map填空,则默认会弹"商家已取消刷脸"的toast提示,否则可以在map中put一个key为"toast_text"的参数来自定义toast提示文本 |
wxpayfaceCallBack | 是 | IWxPayFaceCallbackAIDL | 退出刷脸接口回调,可以填空,回调回来的也是一个map,里面包含退出刷脸的return_code和return_msg |
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
# 请求示例
/**
*退出刷脸
*
*/
Map map = new HashMap();
map.put("toast_text", "商家已停止刷脸");
WxPayFace.getInstance().quitWxpayface(map, new IWxPayfaceCallback() {
@Override
public void response(Map info) throws RemoteException {
// 通常不用,可以打印出来方便问题分析跟进
String returnCode = (String) info.get("return_code");
String msg = (String) info.get("return_msg");
}
});
# 7、进行发起订单支付
# 进行发起订单支付micropay
接口作用:发起订单支付
接口地址:https://api.mch.weixin.qq.com/pay/micropay
# 请求参数
注: 如果有分账需求,请参考分账文档, 普通商户分账 服务商分账
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|
appid | 是 | String(32) | wx8888888888888888 | 微信分配的公众账号ID(企业号corpid即为此appId) |
mch_id | 是 | String(32) | 1900000109 | 微信支付分配的商户号 |
device_info | 否 | String(32) | 013467007045764 | 终端设备号(商户自定义,如门店编号) |
nonce_str | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串,不长于32位。推荐随机数生成算法 |
sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名,详见签名生成算法 |
sign_type | 否 | String(32) | HMAC-SHA256 | 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5 |
body | 是 | String(128) | image形象店-深圳腾大- QQ公仔 | 商品简单描述,该字段须严格按照规范传递,具体请见参数规定 |
detail | 否 | String(6000) | 单品优惠功能字段,需要接入详见单品优惠详细说明 | |
attach | 否 | String(127) | 说明 | 附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 |
out_trade_no | 是 | String(32) | 1217752501201407033233368018 | 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号 |
total_fee | 是 | Int | 888 | 订单总金额,单位为分,只能为整数,详见支付金额 |
fee_type | 否 | String(16) | CNY | 符合ISO4217标准的三位字母代码,默认人民币:CNY,详见货币类型 |
spbill_create_ip | 是 | String(64) | 8.8.8.8 | 支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IP |
goods_tag | 否 | String(32) | 1234 | 订单优惠标记,代金券或立减优惠功能的参数,详见代金券或立减优惠 |
limit_pay | 否 | String(32) | no_credit | no_credit--指定不能使用信用卡支付 |
time_start | 否 | String(14) | 20091225091010 | 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 |
time_expire | 否 | String(14) | 20091227091010 | 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。注意:最短失效时间间隔需大于1分钟 |
receipt | 否 | String(8) | Y | Y,传入Y时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效 |
auth_code | 是 | String(128) | 120061098828009406 | 扫码支付付款码,设备读取用户微信中的条码或者二维码信息 (注:用户付款码条形码规则:18位纯数字,以10、11、12、13、14、15开头) |
scene_info | 否 | String(256) | {"store_info" : { "id": "SZTX001", "name": "腾大餐厅", "area_code": "440305", "address": "科技园中一路腾讯大厦" }} | 该字段用于上报场景信息,目前支持上报实际门店信息。该字段为JSON对象数据,对象格式为{"store_info":{"id": "门店ID","name": "名称","area_code": "编码","address": "地址" }} ,字段详细说明请点击行前的+展开 |
# 请求示例
<xml>
<appid>wx2421b1c4370ec43b</appid>
<attach>订单额外描述</attach>
<auth_code>120269300684844649</auth_code>
<body>付款码支付测试</body>
<device_info>1000</device_info>
<goods_tag></goods_tag>
<mch_id>10000100</mch_id>
<nonce_str>8aaee146b1dee7cec9100add9b96cbe2</nonce_str>
<out_trade_no>1415757673</out_trade_no>
<spbill_create_ip>14.17.22.52</spbill_create_ip>
<time_expire></time_expire>
<total_fee>1</total_fee>
<sign>C29DB7DB1FD4136B84AE35604756362C</sign>
</xml>
注:参数值用XML转义即可,CDATA标签用于说明数据不被XML解析器解析。
# 返回参数
参数 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|
return_code | 是 | String(16) | SUCCESS | SUCCESS/FAIL此字段是接口通信情况标识,非交易成功与否的标识 |
return_msg | 是 | String(128) | OK | 当return_code为FAIL时返回信息为错误原因 ,例如签名失败参数格式校验错误 |
当return_code为SUCCESS的时候,还会包括以下字段:
参数 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|
appid | 是 | String(32) | wx8888888888888888 | 调用接口提交的公众账号ID |
mch_id | 是 | String(32) | 1900000109 | 调用接口提交的商户号 |
device_info | 否 | String(32) | 013467007045764 | 调用接口提交的终端设备号, |
nonce_str | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 微信返回的随机字符串 |
sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 微信返回的签名,详见签名生成算法 |
result_code | 是 | String(16) | SUCCESS | SUCCESS/FAIL |
err_code | 否 | String(32) | SYSTEMERROR | 详细参见错误列表 |
err_code_des | 否 | String(128) | 系统错误 | 错误返回的信息描述 |
当return_code 和result_code都为SUCCESS的时,还会包括以下字段:
参数 | 必填 | 类型 | 示例值 | 说明 |
---|---|---|---|---|
openid | 是 | String(128) | Y | 用户在商户appid 下的唯一标识 |
is_subscribe | 是 | String(1) | Y | 用户是否关注公众账号,仅在公众账号类型支付有效,取值范围:Y或N;Y-关注;N-未关注 |
trade_type | 是 | String(16) | MICROPAY | MICROPAY 付款码支付 |
bank_type | 是 | String(32) | CMC | 银行类型,采用字符串类型的银行标识,详见银行类型 |
fee_type | 否 | String(16) | CNY | 符合ISO 4217标准的三位字母代码,默认人民币:CNY,详见货币类型 |
total_fee | 是 | Int | 888 | 订单总金额,单位为分,只能为整数,详见支付金额 |
settlement_total_fee | 否 | Int | 100 | 当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。 |
coupon_fee | 否 | Int | 100 | “代金券”金额<=订单金额,订单金额-“代金券”金额=现金支付金额,详见支付金额 |
cash_fee_type | 否 | String(16) | CNY | 符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 |
cash_fee | 是 | Int | 100 | 订单现金支付金额,详见支付金额 |
transaction_id | 是 | String(32) | 1217752501201407033233368018 | 微信支付订单号 |
out_trade_no | 是 | String(32) | 1217752501201407033233368018 | 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。 |
attach | 否 | String(128) | 123456 | 商家数据包,原样返回 |
time_end | 是 | String(14) | 20141030133525 | 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则 |
promotion_detail | 否 | String(6000) | 示例见下文 | 新增返回,单品优惠功能字段,需要接入请见详细说明 |
# 请求示例
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<device_info><![CDATA[1000]]></device_info>
<nonce_str><![CDATA[GOp3TRyMXzbMlkun]]></nonce_str>
<sign><![CDATA[D6C76CB785F07992CDE05494BB7DF7FD]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<openid><![CDATA[oUpF8uN95-Ptaags6E_roPHg7AG0]]></openid>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<trade_type><![CDATA[MICROPAY]]></trade_type>
<bank_type><![CDATA[CCB_DEBIT]]></bank_type>
<total_fee>1</total_fee>
<coupon_fee>0</coupon_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<transaction_id><![CDATA[1008450740201411110005820873]]></transaction_id>
<out_trade_no><![CDATA[1415757673]]></out_trade_no>
<attach><![CDATA[订单额外描述]]></attach>
<time_end><![CDATA[20141111170043]]></time_end>
</xml>
# 错误码
名称 | 描述 | 支付状态 | 原因 | 解决方案 |
---|---|---|---|---|
SYSTEMERROR | 接口返回错误 | 支付结果未知 | 系统超时 | 请立即调用被扫订单结果查询API,查询当前订单状态,并根据订单的状态决定下一步的操作。 |
PARAM_ERROR | 参数错误 | 支付确认失败 | 请求参数未按指引进行填写 | 请根据接口返回的详细信息检查您的程序 |
ORDERPAID | 订单已支付 | 支付确认失败 | 订单号重复 | 请确认该订单号是否重复支付,如果是新单,请使用新订单号提交 |
NOAUTH | 商户无权限 | 支付确认失败 | 商户没有开通被扫支付权限 | 请开通商户号权限。请联系产品或商务申请 |
AUTHCODEEXPIRE | 二维码已过期,请用户在微信上刷新后再试 | 支付确认失败 | 用户的条码已经过期 | 请收银员提示用户,请用户在微信上刷新条码,然后请收银员重新扫码。 直接将错误展示给收银员 |
NOTENOUGH | 余额不足 | 支付确认失败 | 用户的零钱余额不足 | 请收银员提示用户更换当前支付的卡,然后请收银员重新扫码。建议:商户系统返回给收银台的提示为“用户余额不足.提示用户换卡支付” |
NOTSUPORTCARD | 不支持卡类型 | 支付确认失败 | 用户使用卡种不支持当前支付形式 | 请用户重新选择卡种 建议:商户系统返回给收银台的提示为“该卡不支持当前支付,提示用户换卡支付或绑新卡支付” |
ORDERCLOSED | 订单已关闭 | 支付确认失败 | 该订单已关 | 商户订单号异常,请重新下单支付 |
ORDERREVERSED | 订单已撤销 | 支付确认失败 | 当前订单已经被撤销 | 当前订单状态为“订单已撤销”,请提示用户重新支付 |
BANKERROR | 银行系统异常 | 支付结果未知 | 银行端超时 | 请立即调用被扫订单结果查询API,查询当前订单的不同状态,决定下一步的操作。 |
USERPAYING | 用户支付中,需要输入密码 | 支付结果未知 | 该笔交易因为业务规则要求,需要用户输入支付密码。 | 等待5秒,然后调用被扫订单结果查询API,查询当前订单的不同状态,决定下一步的操作。 |
AUTH_CODE_ERROR | 付款码参数错误 | 支付确认失败 | 请求参数未按指引进行填写 | 每个二维码仅限使用一次,请刷新再试 |
AUTH_CODE_INVALID | 付款码检验错误 | 支付确认失败 | 收银员扫描的不是微信支付的条码 | 请扫描微信支付被扫条码/二维码 |
XML_FORMAT_ERROR | XML格式错误 | 支付确认失败 | XML格式错误 | 请检查XML参数格式是否正确 |
REQUIRE_POST_METHOD | 请使用post方法 | 支付确认失败 | 未使用post传递参数 | 请检查请求参数是否通过post方法提交 |
SIGNERROR | 签名错误 | 支付确认失败 | 参数签名结果不正确 | 请检查签名参数和方法是否都符合签名算法要求 |
LACK_PARAMS | 缺少参数 | 支付确认失败 | 缺少必要的请求参数 | 请检查参数是否齐全 |
NOT_UTF8 | 编码格式错误 | 支付确认失败 | 未使用指定编码格式 | 请使用UTF-8编码格式 |
BUYER_MISMATCH | 支付帐号错误 | 支付确认失败 | 暂不支持同一笔订单更换支付方 | 请确认支付方是否相同 |
APPID_NOT_EXIST | APPID不存在 | 支付确认失败 | 参数中缺少APPID | 请检查APPID是否正确 |
MCHID_NOT_EXIST | MCHID不存在 | 支付确认失败 | 参数中缺少MCHID | 请检查MCHID是否正确 |
OUT_TRADE_NO_USED | 商户订单号重复 | 支付确认失败 | 同一笔交易不能多次提交 | 请核实商户订单号是否重复提交 |
APPID_MCHID_NOT_MATCH | appid和mch_id不匹配 | 支付确认失败 | appid和mch_id不匹配 | 请确认appid和mch_id是否匹配 |
INVALID_REQUEST | 无效请求 | 支付确认失败 | 商户系统异常导致,商户权限异常、重复请求支付、证书错误、频率限制等 | 请确认商户系统是否正常,是否具有相应支付权限,确认证书是否正确,控制频率 |
TRADE_ERROR | 交易错误 | 支付确认失败 | 业务错误导致交易失败、用户账号异常、风控、规则限制等 | 请确认帐号是否存在异常 |
注意:
- ◆ 这是一个后端接口,请在人脸识别成功后发起支付
- ◆ 如果当前交易返回的支付状态是明确的错误原因造成的支付失败(支付确认失败),请重新下单支付;如果当前交易返回的支付状态是不明错误(支付结果未知),请调用查询订单接口确认状态,如果长时间(建议30秒)都得不到明确状态请调用撤销订单接口。
# 8、查询订单状态
# 查询订单状态orderquery
接口作用:该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。
需要调用查询接口的情况:
- ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
- ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
- ◆ 调用付款码支付API,返回USERPAYING的状态;
- ◆ 调用关单或撤销接口API之前,需确认支付状态;
接口地址:https://api.mch.weixin.qq.com/pay/orderquery
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 说明 | 示例值 |
---|---|---|---|---|
appid | 是 | String(32) | 微信支付分配的公众账号ID(企业号corpid即为此appId) | wxd678efh567hg6787 |
mch_id | 是 | String(32) | 微信支付分配的商户号 | 1230000109 |
transaction_id | 否 | String(32) | 微信的订单号,建议优先使用 | 1009660380201506130728806387 |
out_trade_no | 否 | String(32) | 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 详见商户订单号 | 20150806125346 |
nonce_str | 是 | String(32) | 随机字符串,不长于32位。推荐随机数生成算法 | C380BEC2BFD727A4B6845133519F3AD6 |
sign | 是 | String(32) | 通过签名算法计算得出的签名值,详见签名生成算法 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS |
sign_type | 否 | String(32) | 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5 | HMAC-SHA256 |
# 返回参数
参数 | 必填 | 类型 | 说明 | 示例值 |
---|---|---|---|---|
return_code | 是 | String(16) | SUCCESS/FAIL,此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断 | SUCCESS |
return_msg | 是 | String(128) | 当return_code为FAIL时返回信息为错误原因 ,例如签名失败参、数格式校验错误 | OK |
以下字段在return_code为SUCCESS的时候有返回
参数 | 必填 | 类型 | 说明 | 示例值 |
---|---|---|---|---|
appid | 是 | String(32) | 微信分配的公众账号ID | wxd678efh567hg6787 |
mch_id | 是 | String(32) | 微信支付分配的商户号 | 1230000109 |
nonce_str | 是 | String(32) | 随机字符串,不长于32位。推荐随机数生成算法 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS |
sign | 是 | String(32) | 签名,详见签名生成算法 | C380BEC2BFD727A4B6845133519F3AD6 |
result_code | 是 | String(16) | SUCCESS/FAIL | SUCCESS |
err_code | 否 | String(32) | 当result_code为FAIL时返回错误代码,详细参见下文错误列表 | |
err_code_des | 否 | String(128) | 当result_code为FAIL时返回错误描述,详细参见下文错误列表 |
以下字段在return_code 、result_code、trade_state都为SUCCESS时有返回 ,如trade_state不为 SUCCESS,则只返回out_trade_no(必传)和attach(选传)。
参数 | 必填 | 类型 | 说明 | 示例值 |
---|---|---|---|---|
device_info | 否 | String(32) | 微信支付分配的终端设备号 | 013467007045764 |
openid | 是 | String(128) | 用户在商户appid下的唯一标识 | oUpF8uMuAJO_M2pxb1Q9zNjWeS6o |
is_subscribe | 是 | String(1) | 用户是否关注公众账号,Y-关注,N-未关注 | Y |
trade_type | 是 | String(16) | 调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,MICROPAY,详细说明见参数规定 | JSAPI |
trade_state | 是 | String(32) | SUCCESS—支付成功,REFUND—转入退款当result_code为FAIL时返回错误代码,详细参见下文错误列表,NOTPAY—未支付当result_code为FAIL时返回错误描述,详细参见下文错误列表,CLOSED—已关闭,REVOKED—已撤销(付款码支付),USERPAYING--用户支付中(付款码支付),PAYERROR--支付失败(其他原因,如银行返回失败),支付状态机请见下单API页面 | SUCCESS |
bank_type | 是 | String(16) | 银行类型,采用字符串类型的银行标识 | CMC |
total_fee | 是 | int | 订单总金额,单位为分 | 100 |
settlement_total_fee | 否 | int | 当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。 | 100 |
fee_type | 否 | String(8) | 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 | CNY |
cash_fee | 是 | int | 现金支付金额订单现金支付金额,详见支付金额 | 100 |
cash_fee_type | 否 | String(16) | 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 | CNY |
coupon_fee | 否 | int | “代金券”金额<=订单金额,订单金额-“代金券”金额=现金支付金额,详见支付金额 | CNY |
coupon_count | 否 | int | 代金券使用数量 | 1 |
coupon_type_$n | 否 | String | CASH--充值代金券,NO_CASH---非充值优惠券,开通免充值券功能,并且订单使用了优惠券后有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_$0 | CASH |
coupon_id_$n | 否 | String(20) | 代金券ID, $n为下标,从0开始编号 | 10000 |
coupon_fee_$n | 否 | int | 单个代金券支付金额, $n为下标,从0开始编号 | 100 |
transaction_id | 是 | String(32) | 微信支付订单号 | 1009660380201506130728806387 |
out_trade_no | 是 | String(32) | 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 | 20150806125346 |
attach | 否 | String(128) | 附加数据,原样返回 | 深圳分店 |
time_end | 是 | String(14) | 订单支付时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 | 20141030133525 |
trade_state_desc | 是 | String(256) | 对当前查询订单状态的描述和下一步操作的指引 | 支付失败,请重新下单支付 |
# 请求示例
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<device_info><![CDATA[1000]]></device_info>
<nonce_str><![CDATA[TN55wO9Pba5yENl8]]></nonce_str>
<sign><![CDATA[BDF0099C15FF7BC6B1585FBB110AB635]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<openid><![CDATA[oUpF8uN95-Ptaags6E_roPHg7AG0]]></openid>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<trade_type><![CDATA[MICROPAY]]></trade_type>
<bank_type><![CDATA[CCB_DEBIT]]></bank_type>
<total_fee>1</total_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<transaction_id><![CDATA[1008450740201411110005820873]]></transaction_id>
<out_trade_no><![CDATA[1415757673]]></out_trade_no>
<attach><![CDATA[订单额外描述]]></attach>
<time_end><![CDATA[20141111170043]]></time_end>
<trade_state><![CDATA[SUCCESS]]></trade_state>
</xml>
# 错误码
名称 | 描述 | 原因 | 解决方案 |
---|---|---|---|
ORDERNOTEXIST | 此交易订单号不存在 | 查询系统中不存在此交易订单号 | 该API只能查提交支付交易返回成功的订单,请商户检查需要查询的订单号是否正确 |
SYSTEMERROR | 系统错误 | 后台系统返回错误 | 系统异常,请再调用发起查询 |
注意:这是一个后端接口
# 9、撤销交易
# 撤销交易reverse
接口作用:支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户。
注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。
调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口
接口地址:https://api.mch.weixin.qq.com/secapi/pay/reverse
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
公众账号ID | appid | 是 | String(32) | wx8888888888888888 | 微信分配的公众账号ID(企业号corpid即为此appId) |
商户号 | mch_id | 是 | String(32) | 1900000109 | 微信支付分配的商户号 |
微信订单号 | transaction_id | 否 | String(32) | 1217752501201407033233368018 | 微信的订单号,优先使用 |
商户订单号 | out_trade_no | 是 | String(32) | 1217752501201407033233368018 | 商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no |
随机字符串 | nonce_str | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 随机字符串,不长于32位。推荐随机数生成算法 |
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 签名,详见签名生成算法 |
签名类型 | sign_type | 否 | String(32) | HMAC-SHA256 | 签名类型,目前支持HMAC-SHA256和MD5,默认为MD5 |
# 返回参数
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
返回状态码 | return_code | 是 | String(16) | SUCCESS | SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断 |
返回信息 | return_msg | 是 | String(128) | OK | 当return_code为FAIL时返回信息为错误原因 ,例如签名失败参数格式校验错误 |
当return_code为SUCCESS的时候,还会包括以下字段:
字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
---|---|---|---|---|---|
公众账号ID | appid | 是 | String(32) | wx8888888888888888 | 返回提交的公众账号ID |
商户号 | mch_id | 是 | String(32) | 1900000109 | 返回提交的商户号 |
随机字符串 | nonce_str | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 微信返回的随机字符串 |
签名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | 返回数据的签名,详见签名算法 |
业务结果 | result_code | 是 | String(16) | SUCCESS | SUCCESS/FAIL |
错误代码 | err_code | 否 | String(32) | SYSTEMERROR | 详细参见错误列表 |
错误描述 | err_code_des | 否 | String(128) | 系统错误 | 结果信息描述 |
是否重调 | recall | 是 | String(1) | Y | 是否需要继续调用撤销,Y-需要,N-不需要 |
# 请求示例
<xml>
<appid>wx2421b1c4370ec43b</appid>
<mch_id>10000100</mch_id>
<nonce_str>b7ffb16a7150cf08639db472c5f5bdae</nonce_str>
<out_trade_no>1415717424</out_trade_no>
<sign>9B2EA16C05A5CEF8E53B14D53932D012</sign>
</xml>
# 返回示例
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[o5bAKF3o2ypC8hwa]]></nonce_str>
<sign><![CDATA[6F5080EDDD196FFCDE53F786BBB93899]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<recall><![CDATA[N]]></recall>
</xml>
# 错误码
名称 | 描述 | 原因 | 解决方案 |
---|---|---|---|
SYSTEMERROR | 接口返回错误 | 系统超时 | 请立即调用被扫订单结果查询API,查询当前订单状态,并根据订单的状态决定下一步的操作。 |
INVALID_TRANSACTIONID | 无效transaction_id | 请求参数未按指引进行填写 | 参数错误,请重新检查 |
PARAM_ERROR | 参数错误 | 请求参数未按指引进行填写 | 请根据接口返回的详细信息检查您的程序 |
REQUIRE_POST_METHOD | 请使用post方法 | 未使用post传递参数 | 请检查请求参数是否通过post方法提交 |
SIGNERROR | 签名错误 | 参数签名结果不正确 | 请检查签名参数和方法是否都符合签名算法要求 |
REVERSE_EXPIRE | 订单无法撤销 | 订单有7天的撤销有效期,过期将不能撤销 | 请检查需要撤销的订单是否超过可撤销有效期 |
INVALID_REQUEST | 无效请求 | 商户系统异常导致 | 请检查商户权限是否异常、重复请求支付、证书错误、频率限制等 |
TRADE_ERROR | 订单错误 | 业务错误导致交易失败 | 请检查用户账号是否异常、被风控、是否符合规则限制等 |
USERPAYING | 用户支付中 | 用户正在支付中的订单不允许撤销 | 用户正在支付中的订单不允许撤销,请稍后再试 |
注意:这是一个后端接口
# 10、更新支付结果
# 更新支付结果updateWxpayfacePayResult(2.13及以上版本不需要调用该接口)
接口作用:商户侧确认支付结果后通知人脸SDK 更新支付结果,用户确认支付结果后返回wxpayfaceCallBack,刷脸支付界面关闭。
# 请求参数
除公共参数外,下方参数的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写。
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
appid | 是 | string | 商户绑定的公众号/小程序 appid |
mch_id | 是 | string | 商户号 |
store_id | 是 | string | 门店编号 |
authinfo | 是 | string | 调用凭证。获取方式参见: get_wxpayface_authinfo |
payresult | 是 | string | 支付结果。可取值:SUCCESS : 支付成功ERROR : 支付失败 |
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
# 请求示例
/**
* 更新支付结果
*
*/
HashMap payResultHash = new HashMap();
payResultHash.put("payresult", "");
....
WxPayFace.getInstance().updateWxpayfacePayResult(payResultHash, 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");
if (TextUtils.equals(returnCode, "USER_QUERY_CANCEL")) {
mResultTxt.setText("请与商户确认支付结果");
} else {
mResultTxt.setText("支付完成");
}
}
});
注意:
- ◆ 商户侧确认支付结果后通知人脸SDK 更新支付结果,用户确认支付结果后返回wxpayfaceCallBack,刷脸支付界面关闭
- ◆ 此接口已在2.13版本废弃
# 11、释放资源
# 释放资源releaseWxpayface
接口作用:释放人脸服务,断开连接。
接口使用规范:
- 聚合支付情况下:每次启动刷脸都需要initWxpayface,刷脸结束后需要调用releaseWxpayface(释放摄像头供其他刷脸支付平台调用);
- 非聚合支付情况下:首次刷脸需要initWxpayface,刷脸结束后不需要调用releaseWxpayface,否则下次刷脸需要重新initWxpayface,影响启动耗时;初始化之后第二次刷脸可以直接调用getWxpayfaceCode启动刷脸(在保证authinfo有效的情况下)。
# 请求示例
/**
*释放资源
*
*/
WxPayFace.getInstance().releaseWxpayface(context);