一、刷脸支付文档

您所在的位置:网站首页 怎么取消微信刷脸删除支付记录 一、刷脸支付文档

一、刷脸支付文档

2024-07-10 17:45| 来源: 网络整理| 查看: 265

# 一、刷脸支付文档 # 刷脸支付场景说明

该流程通过识别用户人脸、手机号,获取人脸凭证(face_code),该人脸凭证具有较高的安全等级,可用于支付。

# 接入过程 # 刷脸支付时序图 sequenceDiagram participant A as 商户APP participant B as 微信人脸sdk participant C as 商户server participant D as 微信支付后台API note over A, C: Step 1 程序启动时初始化 A ->> B: 1. 程序启动时初始化 initWxpayface B -->> A: 返回初始化结果 note over A, C: Step 2 获取数据、SDK调用凭证 A ->> B: 2. 获取数据 getWxpayfaceRawdata B -->> A: 返回rawdata A ->> C: 3.获取SDK调用凭证 C->>D: 3.get_wxpayface_authinfo(rawdata) D-->>C: 返回authinfo C -->> A: 返回authinfo note over A, C: Step 3 启动人脸识别,发起订单人脸支付 A ->> B: 4. 进行人脸识别 getWxpayfaceCode activate B B ->> B: 进行人脸识别 B ->> B: 完成人脸识别 B -->> A: 返回人脸识别结果(face_code, openid) A ->> C: 5. 发起订单人脸支付 C ->> D: 发起订单支付micropay(face_code) D -->> C: 返回支付结果 alt 支付成功/失败 C -->> A: 返回支付结果 else 支付结果未明(比如:支付中/网络超时) note over C, D: 查询支付结果 loop 直到:返回确定的订单状态/超过轮询时间 C ->> D: 6. 查询订单状态orderquery D -->> C: 返回订单状态 end C -->> A: 返回支付结果 opt 轮询结束仍然没有支付成功 note over A, D: 撤销交易,以避免用户扣款,而没有发货的情况(撤销可后台异步进行) loop 撤销交易直到成功 C ->> D: 7. 撤销交易reverse D -->> C: 返回撤销结果 end end end note over A, C: Step 4 更新支付结果,完成刷脸支付流程 A ->> B: 8. 更新支付结果updateWxpayfacePayResult(callback) B->>B:用户确认支付结果 B -->> A: 人脸应用界面关闭 deactivate B A ->> B: 9. 释放资源 releaseWxpayface A ->> A: 程序退出(...) # SDK调用 # 使用方式 SDK需要集成到商户应用,提供的SDK为C动态链接库dll,请注意采用cdecl调用约定 业务⽅C/C++技术栈可通过编译链接或者LoadLibrary的⽅式加载dll,并执行相关函数,C#等.NET平台的技术栈请参照下面C#导入DLL声明部分实现调用 运行时,需要先启动WxpayFaceService刷脸服务,然后商户应用使用SDK中的接口调起刷脸功能

注意点:

关于函数中⼊参、出参的数据格式, 均采⽤JSON字符串,编码为UTF-8。 调用wxpayCallFaceService成功后,务必调用wxpayReleaseResponse来释放响应结果 # 入口函数原型 /** * 调用人脸服务 * @param reqBuf 请求参数(JSON字符串) * @param reqSize 请求参数长度 * @param pRespBuf 用来接收响应结果(JSON字符串)的char**指针 * @param pRespSize 用来接收响应结果长度的unsigned int*指针 * @return 如果成功返回0,失败则返回非0 */ extern "C" int wxpayCallFaceService(const char *reqBuf, unsigned int reqSize, char **pRespBuf, unsigned int *pRespSize); /** * 释放人脸服务的响应字符串,调用wxpayCallFaceService成功后务必调用此函数释放内存 * @param pRespBuf 指向响应结果(JSON字符串)的指针 */ extern "C" void wxpayReleaseResponse(char **pRespBuf); # C# 导入DLL声明 // 声明 [DllImport("WxpayFaceSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] public extern static int wxpayCallFaceService(IntPtr reqBuf, UInt32 reqSize, out IntPtr pRespBuf, out UInt32 pRespSize); [DllImport("WxpayFaceSDK.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] public extern static int wxpayReleaseResponse(out IntPtr pRespBuf); // 封装 public static int CallWxpayFaceService(string req, ref string resp) { byte[] reqBuf = Encoding.UTF8.GetBytes(req); IntPtr reqPtr = Marshal.AllocHGlobal(reqBuf.Length); Marshal.Copy(reqBuf, 0, reqPtr, reqBuf.Length); IntPtr respPtr; UInt32 respSize; int ret = wxpayCallFaceService(reqPtr, (UInt32)reqBuf.Length, out respPtr, out respSize); if (ret == 0) { byte[] respBuf = new byte[respSize]; Marshal.Copy(respPtr, respBuf, 0, (int)respSize); resp = Encoding.UTF8.GetString(respBuf); wxpayReleaseResponse(out respPtr); } Marshal.FreeHGlobal(reqPtr); return ret; } # 请求参数Req和响应结果Resp构成

req和resp均为JSON结构的字符串

req包含:公共请求字段 + 命令专有请求字段

resp 包含:公共响应字段 + 命令专有响应字段

# 请求公共字段 参数 必填 类型 说明 cmd 是 string 命令字,即各接口名:initWxpayfacegetWxpayfaceRawdatagetWxpayfaceCodereleaseWxpayface version 是 string 版本号, 固定填写1 now 是 int 取当前时间的10位unix时间戮。 例如:1540901425 # 请求公共字段 参数 必填 类型 说明 return_code 是 string 错误码。公共定义见 公共错误码 return_msg 是 string(128) 对错误码的描述 # 公共错误码 参数 错误码 类型 说明 return_code SUCCESS string 接口成功 return_code ERROR string 接口失败 return_code PARAM_ERROR string 参数错误 return_code SYSTEMERROR string 接口返回错误 # 接口调用流程 # 1、程序启动时初始化 # 程序启动时初始化initWxpayface

接口作用:对人脸SDK进行初始化

支持版本: 1.12及以上

# 请求参数

除公共参数外,下方参数中的代理设置可用于配置刷脸走商户内部代理。若不需要,则不用填写代理参数。

参数 必填 类型 说明 ip 否 string HTTP代理IP port 否 string HTTP代理端口, 须为数字 user 否 string HTTP代理的用户名 passwd 否 string HTTP代理的密码 proxy_type 否 int 0:none;1:HttpTunnel;2:Socks5;3:Httpv1.18及以上支持 camera_rotation 否 int 对摄像头画面进行旋转,1为+90度,2为180度,3为-90度,如需使用该参数请联系微信支付确认设备实际效果符合规范。1.18版本以上支持 # 返回参数 参数 必填 类型 说明 return_code 是 string 错误码。公共定义见 公共错误码 return_msg 是 string(128) 对错误码的描述 # 请求示例 // initWxpayface // 初始化,默认无代理 const char* req = "{\"cmd\":\"initWxpayface\",\"version\":\"1\",\"now\":1540901425}"; // 初始化并配置代理 const char* req = "{\"cmd\":\"initWxpayface\",\"version\":\"1\",\"now\":1540901425,\"ip\":\"10.123.10.11\",\"port\":\"8356\",\"user\":\"username\",\"passwd\":\"password\"}"; char *resp; unsigned int len; int ret = wxpayCallFaceService(req, strlen(req), &resp, &len); if (ret == 0) { printf("resp: %s len: %u\n", resp, len); wxpayReleaseResponse(&resp); } /* * resp: {"return_code":"SUCCESS","return_msg":"SUCCESS"} len: 48 */ # 2、获取数据 # 获取数据getWxpayfaceRawdata

接口作用:获取rawdata数据

支持版本: 1.12及以上

# 请求参数

仅公共参数

# 返回参数 参数 必填 类型 说明 return_code 是 string 错误码。公共定义见 公共错误码 return_msg 是 string(128) 对错误码的描述 rawdata S string(2048) 初始化数据。用于接口调用获取authinfo, 参见: 3、获取调用凭证 # 调用示例 // getWxpayfaceRawdata const char* req = "{\"cmd\":\"getWxpayfaceRawdata\",\"version\":\"1\",\"now\":1540901425}"; char *resp; unsigned int len; int ret = wxpayCallFaceService(req, strlen(req), &resp, &len); if (ret == 0) { printf("resp: %s len: %u\n", resp, len); wxpayReleaseResponse(&resp); } /* * resp: {"rawdata":"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==","return_code":"SUCCESS","return_msg":"SUCCESS"} len: 885 */ # 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) 子商户号(服务商模式) # 请求示例 SUCCESS 请求成功 Tivppi4UXAbgLxk8e1Sij76YdowOFFii PL0EUID6A7ICWNKHCSMQC0UIXOYNSE5B wx31fdaErqR31 12345689 q3OPhFtQBf6KZGqmZhejKCRy5K/ch0kwS11YSsEj9XmUGqcsT2QPHt0Oa7xaCMCoSZTWMmShCo4dOiO5tU+OJEsvSxXzn5m3Nkh747tinNlbpJmVq1zOPj+FJNndkzanxoiAddO8p1EfrmUhJs/aNf0pDfrPoVfkAapK+ZY6blwyaDQ9bB7+KkZq29kObsXOZ3thg+bxP4RAqC0oxNS4JiyP0uA1Euzxtkc9lCTebloFied8stILrMehUKukeMGkZ1SzTyc8/HFHApzHahNPX6yD8ttzYnhe+IRMFJgpuTlIvEOYZUxenPXE1A5clrPvOBeJDszX/OvZl4fpYWPpXAcVQlw+gfYhblt+rT6ALMsD73w/rT4NRriQEEraC4Pfb5yua4qAqv4TVo04 7200

建议:返回的接口凭证authinfo,可以在expires_in指定的有效期内,同一台机具上重复使用

注意:这是一个后端调用接口,请在获取数据(getWxpayfaceRawdata)成功后获取调用凭证get_wxpayface_authinfo(rawdata)

# 4、进行人脸识别 # 进行人脸识别getWxpayfaceCode(获取支付凭证)

接口作用:开启人脸识别,获取支付凭证和用户信息。

支持版本: 1.12及以上

# 请求参数

除公共参数外,

参数 必填 类型 说明 appid 是 string 商户号绑定的公众号/小程序 appid mch_id 是 string 商户号 sub_appid 否 string(32) 子商户绑定的公众号/小程序 appid(可不填) sub_mch_id 否 string(32) 子商户号(非服务商模式不填) store_id 是 string 门店编号 openid 否 string 通过getWxpayfaceUserInfo获取的openid,传入后可使用快捷支付模式。1.24版本以上支持该参数 out_trade_no 否 string 商户订单号,须与调用支付接口时字段一致,该字段在在face_code_type为"1"时可不填,为"0"时必填 total_fee 否 string 订单金额(数字), 单位分,该字段在在face_code_type为"1"时可不填,为"0"时必填 face_authtype 是 string 可选值:FACEPAY: 人脸凭证(face_code),用于刷脸支付 FACE_AUTH: 实名认证(需联系微信支付开通权限) authinfo 是 string 调用凭证。获取方式参见: get_wxpayface_authinfo face_code_type 否 string 目标face_code类型,可选值:"1",刷卡付款码:18位数字,通过「付款码支付/被扫支付」接口完成支付,如果不填写则默认为"0",人脸付款码:数字字母混合,通过「刷脸支付」接口完成支付。1.16版本以上支持该参数 screen_index 否 string 指定刷脸界面显示的屏幕编号。编号1为主屏幕,其余屏幕按系统设置中的顺序从2开始编号,常用场景举例:双屏机器上传"2"即可显示在副屏上。如果不填写则默认显示在主屏幕。1.18版本以上支持该参数 disable_keyboard 否 string 设置不接受外接键盘输入,可选值:"1",禁用。1.23版本以上支持该参数 use_window_nofocus 否 string 设置刷脸窗口以无焦点方式启动,可选值:"1",无焦点启动窗口。1.26版本以上支持该参数 # 返回参数

当face_authtype为FACEPAY时, 接口返回:

参数 必填 类型 说明 return_code 是 string 错误码。公共定义见 公共错误码 return_msg 是 string(128) 对错误码的描述 face_code S string 人脸凭证, 用于刷脸支付。 openid S string openid sub_openid 否 string 子商户号下的openid(服务商模式) face_sid 否 string 用户身份信息查询凭证 # 接口错误码

错误码的公共部分, 参见公共错误码。以下为该接口独有错误码:

错误码 描述 解决方案 USER_CANCEL 用户退出了人脸识别 返回到结账流程 SCAN_PAYMENT 用户选择扫码支付 进入扫码支付流程 # 请求示例 // getWxpayfaceCode const char* req = "{\"cmd\":\"getWxpayfaceCode\",\"version\":\"1\",\"now\":1540907996,\"appid\":\"wx97debaxyzabcca2\",\"mch_id\":\"1281087510\",\"store_id\":\"IMG001\",\"face_authtype\":\"FACEPAY\",\"authinfo\":\"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==\",\"out_trade_no\":\"10302159564hzhw2\",\"total_fee\":\"100\",\"face_code_type\":\"1\"}"; char *resp; unsigned int len; int ret = wxpayCallFaceService(req, strlen(req), &resp, &len); if (ret == 0) { printf("resp: %s len: %u\n", resp, len); wxpayReleaseResponse(&resp); } /* * resp: {"face_code":"xxxxxxxxxxxxxxxxx","openid":"xxx-xxxxxxxxxxxxxxxxxxxxxxxx","return_code":"SUCCESS","return_msg":"SUCCESS"} len: 155 */

注意:** face_code需要调用后端支付接口完成支付 **,微信刷脸应用在返回face_code后,仍会处于等待UI(等待支付loading状态),商户应用获取到face_code后,需要调用后台人脸支付API发起支付,支付完成后调用updateWxpayfacePayResult将支付结果通知给刷脸应用,刷脸应用此时会关闭等待UI。

# 5、进行发起订单支付 # 进行发起订单支付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": "地址" }} ,字段详细说明请点击行前的+展开 # 请求示例 wx2421b1c4370ec43b 订单额外描述 120269300684844649 付款码支付测试 1000 10000100 8aaee146b1dee7cec9100add9b96cbe2 1415757673 14.17.22.52 1 C29DB7DB1FD4136B84AE35604756362C

注:参数值用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 “代金券”金额 1 0 # 错误码 名称 描述 支付状态 原因 解决方案 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秒)都得不到明确状态请调用撤销订单接口。 # 6、查询订单状态 # 查询订单状态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 “代金券”金额 1 # 错误码 名称 描述 原因 解决方案 ORDERNOTEXIST 此交易订单号不存在 查询系统中不存在此交易订单号 该API只能查提交支付交易返回成功的订单,请商户检查需要查询的订单号是否正确 SYSTEMERROR 系统错误 后台系统返回错误 系统异常,请再调用发起查询

注意:这是一个后端接口

# 7、撤销交易 # 撤销交易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-不需要 # 请求示例 wx2421b1c4370ec43b 10000100 b7ffb16a7150cf08639db472c5f5bdae 1415717424 9B2EA16C05A5CEF8E53B14D53932D012 # 返回示例 # 错误码 名称 描述 原因 解决方案 SYSTEMERROR 接口返回错误 系统超时 请立即调用被扫订单结果查询API,查询当前订单状态,并根据订单的状态决定下一步的操作。 INVALID_TRANSACTIONID 无效transaction_id 请求参数未按指引进行填写 参数错误,请重新检查 PARAM_ERROR 参数错误 请求参数未按指引进行填写 请根据接口返回的详细信息检查您的程序 REQUIRE_POST_METHOD 请使用post方法 未使用post传递参数 请检查请求参数是否通过post方法提交 SIGNERROR 签名错误 参数签名结果不正确 请检查签名参数和方法是否都符合签名算法要求 REVERSE_EXPIRE 订单无法撤销 订单有7天的撤销有效期,过期将不能撤销 请检查需要撤销的订单是否超过可撤销有效期 INVALID_REQUEST 无效请求 商户系统异常导致 请检查商户权限是否异常、重复请求支付、证书错误、频率限制等 TRADE_ERROR 订单错误 业务错误导致交易失败 请检查用户账号是否异常、被风控、是否符合规则限制等 USERPAYING 用户支付中 用户正在支付中的订单不允许撤销 用户正在支付中的订单不允许撤销,请稍后再试

注意:这是一个后端接口

# 8、更新支付结果 # 更新支付结果updateWxpayfacePayResult

接口作用:商户侧确认支付结果后通知人脸SDK更新支付结果,用户确认支付结果后返回,刷脸支付界面关闭

支持版本: 1.12及以上

# 请求参数

除公共参数外,

参数 必填 类型 说明 appid 是 string 公众号 mch_id 是 string 商户号 store_id 是 string 门店编号 authinfo 是 string 调用凭证。获取方式参见: get_wxpayface_authinfo payresult 是 string 支付结果。可取值:SUCCESS: 支付成功ERROR: 支付失败 # 返回参数 参数 必填 类型 说明 return_code 是 string 错误码。公共定义见 公共错误码 return_msg 是 string(128) 对错误码的描述 # 请求示例 // updateWxpayfacePayResult const char* req = "{\"cmd\":\"updateWxpayfacePayResult\",\"version\":\"1\",\"now\":1540908003,\"appid\":\"wx97debaxyzabcca2\",\"mch_id\":\"1281087510\",\"store_id\":\"IMG001\",\"payresult\":\"SUCCESS\",\"authinfo\":\"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==\"}"; char *resp; unsigned int len; int ret = wxpayCallFaceService(req, strlen(req), &resp, &len); if (ret == 0) { printf("resp: %s len: %u\n", resp, len); wxpayReleaseResponse(&resp); } /* * resp: {"return_code":"SUCCESS","return_msg":"release success"} len: 56 */

注意:

◆ 商户侧确认支付结果后通知人脸SDK 更新支付结果,用户确认支付结果后返回,刷脸支付界面关闭 # 9、停止刷脸支付 # 停止刷脸支付stopWxpayface

接口作用:商户侧发起取消刷脸支付(按需调用),刷脸支付界面会关闭,仅在人脸凭证/付款码face_code未返回前可用,face_code返回后不可停止

支持版本: 1.23及以上 注意: 需要更新 WxpayFaceSDK.dll,才能够正常调用该接口

# 请求参数

除公共参数外,

参数 必填 类型 说明 appid 是 string 公众号 mch_id 是 string 商户号 authinfo 是 string 调用凭证。获取方式参见: get_wxpayface_authinfo # 返回参数 参数 必填 类型 说明 return_code 是 string 错误码。公共定义见 公共错误码 return_msg 是 string(128) 对错误码的描述 # 请求示例 // stopWxpayface const char* req = "{\"cmd\":\"stopWxpayface\",\"version\":\"1\",\"now\":1540908003,\"appid\":\"wx97debaxyzabcca2\",\"mch_id\":\"1281087510\",\"authinfo\":\"0CSmor/Pp4vC7WE5CsJxet4Sg+D24C8eJxAMjjkBEl58hDLmofPunD+OX8v7JQyxUFmimUb9ai9cuPmGXC87MfStCOGaK/Fjb77DzF7nJgpwQhl8bdprPWKx6h04ZzPRQBlE6DAgcylr3CFSisWpMSUUmA9MtHAKD8fhzFeTEAgj0NK49DjIFZXczfZRgj8qUTRrajdJtO6gZMqlRgSwM83MP8xPG2lCO33nA5HsSMy/vh5ET5O3ubj+wpfMuD1fUj3HBy3YXxxGqFKjJV6dRwuMmAXnaTk0P0u3LSOWO7wiA6En/JgwVZvf9zkcCzq9OyJFrc+8QY6bQeuPWCe4E73n397jaD5fu8GqyokUlO/XytuYP2qcNWAol9vBpf3u2xWt/MobKjJcsDwsCxGFxtjWATRyU0fB9atI8GKGt9zxwWbMd0m6gleWWVGVOHxodNKJbWFP4rRKvPjG0nntZzX4SJ0q/7zevKzYQhU+F+q+ePvvgjKAcxnI5Jhaz/khkffQLw4YAaR7GuLZhHYeFPYEvzOXVk89+dJ/M7s1jZK4dtFa75U1Et9vn2bYtfourPpL3PA9oPPVVu2gPuq/S+WmBG6hCp0lq+/3P4png82cgLq6MNPhSwAq5YRqxlrHbfE3qk0qr/vXXSMbIOhfLWnKFdOyRv+3ohdQOC/8sdHbbSDcyQSprYZ+JREhz0W3qPKlHxlsbvSrpGNj9D4VxL4UXTnloq5KdwZoGSeBgvpNS5NPhXuU6u0cVMufUriKsxptftFu68cDzVv3hdu+1bYy/P9vffwSl01U2uJiTGErHqVMuILTNL==\"}"; char *resp; unsigned int len; int ret = wxpayCallFaceService(req, strlen(req), &resp, &len); if (ret == 0) { printf("resp: %s len: %u\n", resp, len); wxpayReleaseResponse(&resp); } /* * resp: {"return_code":"SUCCESS","return_msg":"SUCCESS"} len: 48 */ # 10、释放资源 # 释放资源releaseWxpayface

接口作用:释放人脸服务。

接口使用规范:

聚合支付情况下:每次启动刷脸都需要initWxpayface,刷脸结束后需要调用releaseWxpayface(释放摄像头供其他刷脸支付平台调用); 非聚合支付情况下:首次刷脸需要initWxpayface,刷脸结束后不需要调用releaseWxpayface,否则下次刷脸需要重新initWxpayface,影响启动耗时;初始化之后第二次刷脸可以直接调用getWxpayfaceCode启动刷脸(在保证authinfo有效的情况下)。

支持版本: 1.12及以上

# 请求参数

仅公共参数

# 返回参数 参数 必填 类型 说明 return_code 是 string 错误码。公共定义见 公共错误码 return_msg 是 string(128) 对错误码的描述 # 请求示例 // releaseWxpayface const char* req = "{\"cmd\":\"releaseWxpayface\",\"version\":\"1\",\"now\":1540901425}"; char *resp; unsigned int len; int ret = wxpayCallFaceService(req, strlen(req), &resp, &len); if (ret == 0) { printf("resp: %s len: %u\n", resp, len); wxpayReleaseResponse(&resp); } /* * resp: {"return_code":"SUCCESS","return_msg":"SUCCESS"} len: 48 */ 上次更新: 11/14/2022, 3:01:17 PM

← 八、其他接口对接 二、人脸识别文档 →



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3