手机扫脸支付怎么设置,如何取消微信刷脸功能

首页 > 经验 > 作者:YD1662023-10-29 22:43:41

刷脸支付场景说明

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

手机扫脸支付怎么设置,如何取消微信刷脸功能(1)

接口调用注意事项:
在刷脸支付流程中,Step1之前不进行过多的主线程耗时操作,避免耗时累计导致启动刷脸慢影响用户体验。

商户APP微信人脸sdk商户server微信支付后台APIStep 1 程序启动时初始化1. 程序启动时初始化 initWxpayfacedoInitWxpayface(返回初始化结果)Step 2 获取数据、SDK调用凭证2. 获取数据 getWxpayfaceRawdatadoGetWxpayfaceRawdata(返回rawdata)3.获取SDK调用凭证3.get_wxpayface_authinfo(rawdata)返回authinfo返回authinfoStep 3 启动人脸识别,发起订单人脸支付4. 进行人脸识别 getWxpayfaceCode启动人脸识别activity进行人脸识别完成人脸识别回调返回人脸识别结果(face_code, openid)doWxPayfaceCodecallback(返回人脸识别结果)5. 发起订单人脸支付发起订单支付micropay(face_code)返回支付结果返回支付结果查询支付结果6. 查询订单状态orderquery返回订单状态loop[ 直到:返回确定的订单状态/超过轮询时间 ]返回支付结果撤销交易,以避免用户扣款,而没有发货的情况(撤销可后台异步进行)7. 撤销交易reverse返回撤销结果loop[ 撤销交易直到成功 ]opt[ 轮询结束仍然没有支付成功 ]alt[ 支付成功/失败 ][ 支付结果未明(比如:支付中/网络超时) ]Step 4 更新支付结果(2.13及以上版本不支持该接口),完成支付8. 更新支付结果updateWxpayfacePayResult(callback)用户确认支付结果关闭人脸应用界面doUpdatePayResultCallBack(界面关闭,触发回调)程序退出(...)opt[ 2.13及以后版本的废弃该接口,不需要调用 ]9. 释放资源 releaseWxpayface商户APP微信人脸sdk商户server微信支付后台API。

参数必填类型说明return_code是string错误码。公共定义见公共错误码return_msg是string(128)对错误码的描述err_code否Integer可为空,二级错误码,公共定义见 二级错误码。

参数错误码类型说明return_codeSUCCESSstring接口成功return_codeERRORstring接口失败return_codePARAM_ERRORstring参数错误return_codeSYSTEMERRORstring接口返回错误。

参数错误码类型说明err_code271378620Interger刷脸服务未初始化,请调用初始化err_code271378621Interger刷脸服务初始化中,等待500ms左右重新调用init。

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

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

参数必填类型说明ip否stringHTTP代理IP或域名port否stringHTTP代理端口, 须为数字user否stringHTTP代理的用户名passwd否stringHTTP代理的密码proxy_type否int0:none;
1:HttpTunnel;
2:Socks5;
3:Http
v2.12及以上tcp_port否stringTCP的代理端口,如果TCP代理与IP代理同一端口,则无需设置v2.12及以上perform_mode否stringNORMAL_PRFORM : 正常性能表现;
LOW_PERFORM : 低性能表现
默认为正常性能表现 v2.13及以上

参数必填类型说明return_code是string错误码。公共定义见 公共错误码return_msg是string(128)对错误码的描述。

/** * 初始化 * */ Map<String,String>m1=newHashMap<>();//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,newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); showToast("初始化完成"); } });

建议:1、您可以自定义一个Application,然后在自定义Application的onCreate()中调用initPayFace()完成人脸识别模块的初始化 2、您可以只在被调用人脸识别模块的activity的onCreate()中完成initPayFace()的调用

注意:目前我们没有在initPayFace()中做app保活的自启措施,所以当您的应用在启动过程中遇到重启/更新的问题,您必须重新调用initPayFace(),相信我们会在下一个最新的版本中对initPayFace()做进一步的完善。

接口作用:获取rawdata数据

参数必填类型说明return_code是string错误码。公共定义见 公共错误码err_code否Integer可为空,二级错误码,公共定义见 二级错误码return_msg是string(128)对错误码的描述rawdata是string(2048)初始化数据。用于接口调用, 参见: get_wxpayface_authinfo: rawdata。

/** * 获取rawdata * */ WxPayFace.getInstance().getWxpayfaceRawdata(newIWxPayfaceCallback(){ @Override publicvoidresponse(finalMapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); Stringrawdata=info.get("rawdata"); } });

注意:请在初始化(initWxpayface)成功后获取数据(getWxpayfaceRawdata)

接口作用:获取调用凭证

接口地址:https://payapp.weixin.qq.com/face/get_wxpayface_authinfo

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

参数必填类型说明store_id是string(32)门店编号, 由商户定义, 各门店唯一。store_name是string(128)门店名称,由商户定义。(可用于展示)device_id是string(32)终端设备编号,由商户定义。attach否string附加字段。字段格式使用Jsonrawdata是string(2048)初始化数据。由微信人脸SDK的接口返回。
获取方式参见:
[获取数据 getWxpayfaceRawdata](#获取数据 getWxpayfaceRawdata)
[获取数据 getWxpayfaceRawdata](#获取数据 getWxpayfaceRawdata)appid是string(32)商户号绑定的公众号/小程序 appidmch_id是string(32)商户号sub_appid否string(32)子商户绑定的公众号/小程序 appid(服务商模式)sub_mch_id否string(32)子商户号(服务商模式)now是int取当前时间,10位unix时间戳。 例如:1239878956version是string版本号。固定为1sign_type是string签名类型,目前支持HMAC-SHA256和MD5,默认为MD5nonce_str是string(32)随机字符串,不长于32位sign是string参数签名。详见微信支付签名算法。

参数必填类型说明return_code是string(16)错误码。公共定义见 公共错误码return_msg是string(128)对错误码的描述authinfo是string(4096)SDK调用凭证。用于调用SDK的人脸识别接口。
参见[人脸识别 getWxpayfaceCode](#人脸识别 getWxpayfaceCode)expires_in否intauthinfo的有效时间, 单位秒。 例如: 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,即将过期再进行调用续期即可。

注意:这一步不是必须的,且只支持v2.21版本以上; 仅适用配置了固定IP访问微信刷脸的商户使用

接口作用:如果您网络有防火墙,并且在后台配置了域名和IP关系,则可以调用这个方法,调用成功之后,微信支付SDK进行网络访问时,如果遇到配置的域名,则只会访问这个域名配置的对应IP列表中的IP。这样您的防火墙配置白名单IP时只需配置这些IP。该方法重启后还会生效,除非调用disableFirewall。

参数必填类型说明mchId是string商户IdsubMchId是string子商户IdwxpayfaceCallBack是IWxPayFaceCallbackAIDL回调。

参数必填类型说明return_code是string错误码。公共定义见 公共错误码err_code否Integer可为空,二级错误码,公共定义见 二级错误码return_msg是string(128)对错误码的描述。

/** *启动防火墙配置 *@parammchId商户Id *@paramsubMchId子商户Id *@paramwxpayfaceCallBack回调 */WxPayFace.getInstance().enableFirewall("商户ID","子商户ID",newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ if(!isSuccessInfo(info)){ return; } showToast("初始化防火墙完成"); } });

注意:请在初始化(initWxpayface)成功后再调用

接口作用:启动人脸APP主界面入口,开启人脸识别,获取支付凭证或用户信息。第一个callback参数wxpayfaceCallBack负责获取付款码,第二个callback参数updateResultWxpayfaceCallBack负责监听SDK查单退出。

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

参数必填类型说明appid是string商户号绑定的公众号/小程序 appidmch_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_authinfoask_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"强制在其他应用上层显示;

参数必填类型说明return_code是string错误码。公共定义见 公共错误码err_code否Integer可为空,二级错误码,公共定义见 二级错误码return_msg是string(128)对错误码的描述face_code是string人脸凭证, 用于刷脸支付。openid是stringopenid(相当于用户身份)sub_openid否string子商户号下的openid(服务商模式)underage_state否int用户年龄信息,使用需要联系微信支付开通权限
可取值:
0:状态不明确,或权限未开通;
1: 成年年人;
2: 未成年人

参数必填类型说明return_code是string错误码(USER_QUERY_CANCEL和SUCCESS)。公共定义见 公共错误码return_msg是string(128)对错误码的描述。

HashMapparams=newHashMap<>();//params.put("appid","");//params.put("mch_id","");//params.put("authinfo",""); ... WxPayFace.getInstance().getWxpayfaceCode(params,newIWxPayfaceCallback(){ @Override publicvoidresponse(finalMapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); Stringfacecode=(String)info.get("face_code"); Stringopenid=(String)info.get("openid"); StringsubOpenid=(String)info.get("sub_openid"); .... } });

建议:请在获取调用凭证get_wxpayface_authinfo(rawdata)成功后进行人脸识别(getWxpayfaceCode)。

HashMapparams=newHashMap<>();//params.put("appid","");//params.put("mch_id","");//params.put("authinfo",""); ... WxPayFace.getInstance().getWxpayfaceCode(params,newIWxPayfaceCallback(){ @Override publicvoidresponse(finalMapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); Stringfacecode=(String)info.get("face_code"); Stringopenid=(String)info.get("openid"); StringsubOpenid=(String)info.get("sub_openid"); .... } },newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ if(info==null){ newRuntimeException("调用返回为空").printStackTrace(); return; } Stringcode=(String)info.get("return_code");//错误码 Stringmsg=(String)info.get("return_msg");//错误码描述 if(code==null||!code.equals("SUCCESS")){ newRuntimeException("调用返回非成功信息,return_msg:" msg "").printStackTrace(); return; } /* 在这里处理您自己的业务逻辑: 执行到这里说明用户已经确认支付结果且成功了,此时刷脸支付界面关闭,您可以在这里选择跳转到其它界面 */ } });

建议:请在获取调用凭证get_wxpayface_authinfo(rawdata)成功后进行人脸识别(getWxpayfaceCode) ; 请不要直接在副屏presentation里调用。

接口作用:在刷脸过程中,只要付款码还没有返回,都可以调用该接口退出刷脸,通常用于用户不想刷脸的时候调用该接口退出刷脸。

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

参数必填类型说明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)对错误码的描述。

/** *退出刷脸 * */ Mapmap=newHashMap(); map.put("toast_text","商家已停止刷脸"); WxPayFace.getInstance().quitWxpayface(map,newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ //通常不用,可以打印出来方便问题分析跟进 StringreturnCode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); }});

接口作用:发起订单支付

接口地址: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,默认为MD5body是String(128)image形象店-深圳腾大- QQ公仔商品简单描述,该字段须严格按照规范传递,具体请见参数规定detail否String(6000)单品优惠功能字段,需要接入详见单品优惠详细说明attach否String(127)说明附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据out_trade_no是String(32)1217752501201407033233368018商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号total_fee是Int888订单总金额,单位为分,只能为整数,详见支付金额fee_type否String(16)CNY符合ISO4217标准的三位字母代码,默认人民币:CNY,详见货币类型spbill_create_ip是String(64)8.8.8.8支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IPgoods_tag否String(32)1234订单优惠标记,代金券或立减优惠功能的参数,详见代金券或立减优惠limit_pay否String(32)no_creditno_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)YY,传入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)SUCCESSSUCCESS/FAIL此字段是接口通信情况标识,非交易成功与否的标识return_msg是String(128)OK当return_code为FAIL时返回信息为错误原因 ,例如签名失败参数格式校验错误

当return_code为SUCCESS的时候,还会包括以下字段:

参数必填类型示例值说明appid是String(32)wx8888888888888888调用接口提交的公众账号IDmch_id是String(32)1900000109调用接口提交的商户号device_info否String(32)013467007045764调用接口提交的终端设备号,nonce_str是String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS微信返回的随机字符串sign是String(32)C380BEC2BFD727A4B6845133519F3AD6微信返回的签名,详见签名生成算法result_code是String(16)SUCCESSSUCCESS/FAILerr_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)MICROPAYMICROPAY 付款码支付bank_type是String(32)CMC银行类型,采用字符串类型的银行标识,详见银行类型fee_type否String(16)CNY符合ISO 4217标准的三位字母代码,默认人民币:CNY,详见货币类型total_fee是Int888订单总金额,单位为分,只能为整数,详见支付金额settlement_total_fee否Int100当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。coupon_fee否Int100“代金券”金额<=订单金额,订单金额-“代金券”金额=现金支付金额,详见支付金额cash_fee_type否String(16)CNY符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型cash_fee是Int100订单现金支付金额,详见支付金额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_ERRORXML格式错误支付确认失败XML格式错误请检查XML参数格式是否正确REQUIRE_POST_METHOD请使用post方法支付确认失败未使用post传递参数请检查请求参数是否通过post方法提交SIGNERROR签名错误支付确认失败参数签名结果不正确请检查签名参数和方法是否都符合签名算法要求LACK_PARAMS缺少参数支付确认失败缺少必要的请求参数请检查参数是否齐全NOT_UTF8编码格式错误支付确认失败未使用指定编码格式请使用UTF-8编码格式BUYER_MISMATCH支付帐号错误支付确认失败暂不支持同一笔订单更换支付方请确认支付方是否相同APPID_NOT_EXISTAPPID不存在支付确认失败参数中缺少APPID请检查APPID是否正确MCHID_NOT_EXISTMCHID不存在支付确认失败参数中缺少MCHID请检查MCHID是否正确OUT_TRADE_NO_USED商户订单号重复支付确认失败同一笔交易不能多次提交请核实商户订单号是否重复提交APPID_MCHID_NOT_MATCHappid和mch_id不匹配支付确认失败appid和mch_id不匹配请确认appid和mch_id是否匹配INVALID_REQUEST无效请求支付确认失败商户系统异常导致,商户权限异常、重复请求支付、证书错误、频率限制等请确认商户系统是否正常,是否具有相应支付权限,确认证书是否正确,控制频率TRADE_ERROR交易错误支付确认失败业务错误导致交易失败、用户账号异常、风控、规则限制等请确认帐号是否存在异常

注意:

  1. ◆ 这是一个后端接口,请在人脸识别成功后发起支付
  2. ◆ 如果当前交易返回的支付状态是明确的错误原因造成的支付失败(支付确认失败),请重新下单支付;如果当前交易返回的支付状态是不明错误(支付结果未知),请调用查询订单接口确认状态,如果长时间(建议30秒)都得不到明确状态请调用撤销订单接口。

接口作用:该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。

需要调用查询接口的情况:

  1. ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
  2. ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
  3. ◆ 调用付款码支付API,返回USERPAYING的状态;
  4. ◆ 调用关单或撤销接口API之前,需确认支付状态;

接口地址:https://api.mch.weixin.qq.com/pay/orderquery

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

参数必填类型说明示例值appid是String(32)微信支付分配的公众账号ID(企业号corpid即为此appId)wxd678efh567hg6787mch_id是String(32)微信支付分配的商户号1230000109transaction_id否String(32)微信的订单号,建议优先使用1009660380201506130728806387out_trade_no否String(32)商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 详见商户订单号20150806125346nonce_str是String(32)随机字符串,不长于32位。推荐随机数生成算法C380BEC2BFD727A4B6845133519F3AD6sign是String(32)通过签名算法计算得出的签名值,详见签名生成算法5K8264ILTKCH16CQ2502SI8ZNMTM67VSsign_type否String(32)签名类型,目前支持HMAC-SHA256和MD5,默认为MD5HMAC-SHA256。

参数必填类型说明示例值return_code是String(16)SUCCESS/FAIL,此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断SUCCESSreturn_msg是String(128)当return_code为FAIL时返回信息为错误原因 ,例如签名失败参、数格式校验错误OK。

以下字段在return_code为SUCCESS的时候有返回。

参数必填类型说明示例值appid是String(32)微信分配的公众账号IDwxd678efh567hg6787mch_id是String(32)微信支付分配的商户号1230000109nonce_str是String(32)随机字符串,不长于32位。推荐随机数生成算法5K8264ILTKCH16CQ2502SI8ZNMTM67VSsign是String(32)签名,详见签名生成算法C380BEC2BFD727A4B6845133519F3AD6result_code是String(16)SUCCESS/FAILSUCCESSerr_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)微信支付分配的终端设备号013467007045764openid是String(128)用户在商户appid下的唯一标识oUpF8uMuAJO_M2pxb1Q9zNjWeS6ois_subscribe是String(1)用户是否关注公众账号,Y-关注,N-未关注Ytrade_type是String(16)调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,MICROPAY,详细说明见参数规定JSAPItrade_state是String(32)SUCCESS—支付成功,REFUND—转入退款当result_code为FAIL时返回错误代码,详细参见下文错误列表,NOTPAY—未支付当result_code为FAIL时返回错误描述,详细参见下文错误列表,CLOSED—已关闭,REVOKED—已撤销(付款码支付),USERPAYING--用户支付中(付款码支付),PAYERROR--支付失败(其他原因,如银行返回失败),支付状态机请见下单API页面SUCCESSbank_type是String(16)银行类型,采用字符串类型的银行标识CMCtotal_fee是int订单总金额,单位为分100settlement_total_fee否int当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。100fee_type否String(8)货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型CNYcash_fee是int现金支付金额订单现金支付金额,详见支付金额100cash_fee_type否String(16)货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型CNYcoupon_fee否int“代金券”金额<=订单金额,订单金额-“代金券”金额=现金支付金额,详见支付金额CNYcoupon_count否int代金券使用数量1coupon_type_$n否StringCASH--充值代金券,NO_CASH---非充值优惠券,开通免充值券功能,并且订单使用了优惠券后有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_$0CASHcoupon_id_$n否String(20)代金券ID, $n为下标,从0开始编号10000coupon_fee_$n否int单个代金券支付金额, $n为下标,从0开始编号100transaction_id是String(32)微信支付订单号1009660380201506130728806387out_trade_no是String(32)商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。20150806125346attach否String(128)附加数据,原样返回深圳分店time_end是String(14)订单支付时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则20141030133525trade_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系统错误后台系统返回错误系统异常,请再调用发起查询

注意:这是一个后端接口

接口作用:支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户。

注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。

调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口

接口地址:https://api.mch.weixin.qq.com/secapi/pay/reverse

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

字段名变量名必填类型示例值描述公众账号IDappid是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)SUCCESSSUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断返回信息return_msg是String(128)OK当return_code为FAIL时返回信息为错误原因 ,例如签名失败参数格式校验错误

当return_code为SUCCESS的时候,还会包括以下字段:

字段名变量名必填类型示例值描述公众账号IDappid是String(32)wx8888888888888888返回提交的公众账号ID商户号mch_id是String(32)1900000109返回提交的商户号随机字符串nonce_str是String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS微信返回的随机字符串签名sign是String(32)C380BEC2BFD727A4B6845133519F3AD6返回数据的签名,详见签名算法业务结果result_code是String(16)SUCCESSSUCCESS/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用户支付中用户正在支付中的订单不允许撤销用户正在支付中的订单不允许撤销,请稍后再试

注意:这是一个后端接口

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

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

参数必填类型说明appid是string商户绑定的公众号/小程序 appidmch_id是string商户号store_id是string门店编号authinfo是string调用凭证。获取方式参见: get_wxpayface_authinfopayresult是string支付结果。可取值:
SUCCESS: 支付成功
ERROR: 支付失败

参数必填类型说明return_code是string错误码。公共定义见 公共错误码err_code否Integer可为空,二级错误码,公共定义见 二级错误码return_msg是string(128)对错误码的描述。

/** * 更新支付结果 * */ HashMappayResultHash=newHashMap(); payResultHash.put("payresult",""); .... WxPayFace.getInstance().updateWxpayfacePayResult(payResultHash,newIWxPayfaceCallback(){ @Override publicvoidresponse(finalMapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); if(TextUtils.equals(returnCode,"USER_QUERY_CANCEL")){ mResultTxt.setText("请与商户确认支付结果"); }else{ mResultTxt.setText("支付完成"); } } });

注意:

  1. ◆ 商户侧确认支付结果后通知人脸SDK 更新支付结果,用户确认支付结果后返回wxpayfaceCallBack,刷脸支付界面关闭
  2. ◆ 此接口已在2.13版本废弃

接口作用:释放人脸服务,断开连接。

接口使用规范:

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

/** *释放资源 * */ WxPayFace.getInstance().releaseWxpayface(context);

以上内容是

刷脸支付场景说明

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

手机扫脸支付怎么设置,如何取消微信刷脸功能(2)

接口调用注意事项:
在刷脸支付流程中,Step1之前不进行过多的主线程耗时操作,避免耗时累计导致启动刷脸慢影响用户体验。

商户APP微信人脸sdk商户server微信支付后台APIStep 1 程序启动时初始化1. 程序启动时初始化 initWxpayfacedoInitWxpayface(返回初始化结果)Step 2 获取数据、SDK调用凭证2. 获取数据 getWxpayfaceRawdatadoGetWxpayfaceRawdata(返回rawdata)3.获取SDK调用凭证3.get_wxpayface_authinfo(rawdata)返回authinfo返回authinfoStep 3 启动人脸识别,发起订单人脸支付4. 进行人脸识别 getWxpayfaceCode启动人脸识别activity进行人脸识别完成人脸识别回调返回人脸识别结果(face_code, openid)doWxPayfaceCodeCallback(返回人脸识别结果)5. 发起订单人脸支付发起订单支付micropay(face_code)返回支付结果返回支付结果查询支付结果6. 查询订单状态orderquery返回订单状态loop[ 直到:返回确定的订单状态/超过轮询时间 ]返回支付结果撤销交易,以避免用户扣款,而没有发货的情况(撤销可后台异步进行)7. 撤销交易reverse返回撤销结果loop[ 撤销交易直到成功 ]opt[ 轮询结束仍然没有支付成功 ]alt[ 支付成功/失败 ][ 支付结果未明(比如:支付中/网络超时) ]Step 4 更新支付结果(2.13及以上版本不支持该接口),完成支付8. 更新支付结果updateWxpayfacePayResult(callback)用户确认支付结果关闭人脸应用界面doUpdatePayResultCallBack(界面关闭,触发回调)程序退出(...)opt[ 2.13及以后版本的废弃该接口,不需要调用 ]9. 释放资源 releaseWxpayface商户APP微信人脸sdk商户server微信支付后台API。

参数必填类型说明return_code是string错误码。公共定义见公共错误码return_msg是string(128)对错误码的描述err_code否Integer可为空,二级错误码,公共定义见 二级错误码。

参数错误码类型说明return_codeSUCCESSstring接口成功return_codeERRORstring接口失败return_codePARAM_ERRORstring参数错误return_codeSYSTEMERRORstring接口返回错误。

参数错误码类型说明err_code271378620Interger刷脸服务未初始化,请调用初始化err_code271378621Interger刷脸服务初始化中,等待500ms左右重新调用init

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

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

参数必填类型说明ip否stringHTTP代理IP或域名port否stringHTTP代理端口, 须为数字user否stringHTTP代理的用户名passwd否stringHTTP代理的密码proxy_type否int0:none;
1:HttpTunnel;
2:Socks5;
3:Http
v2.12及以上tcp_port否stringTCP的代理端口,如果TCP代理与IP代理同一端口,则无需设置v2.12及以上perform_mode否stringNORMAL_PRFORM : 正常性能表现;
LOW_PERFORM : 低性能表现
默认为正常性能表现 v2.13及以上

参数必填类型说明return_code是string错误码。公共定义见 公共错误码return_msg是string(128)对错误码的描述

/** * 初始化 * */ Map<String,String>m1=newHashMap<>();//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,newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); showToast("初始化完成"); } });

建议:1、您可以自定义一个Application,然后在自定义Application的onCreate()中调用initPayFace()完成人脸识别模块的初始化 2、您可以只在被调用人脸识别模块的activity的onCreate()中完成initPayFace()的调用

注意:目前我们没有在initPayFace()中做app保活的自启措施,所以当您的应用在启动过程中遇到重启/更新的问题,您必须重新调用initPayFace(),相信我们会在下一个最新的版本中对initPayFace()做进一步的完善。

接口作用:获取rawdata数据

参数必填类型说明return_code是string错误码。公共定义见 公共错误码err_code否Integer可为空,二级错误码,公共定义见 二级错误码return_msg是string(128)对错误码的描述rawdata是string(2048)初始化数据。用于接口调用, 参见: get_wxpayface_authinfo: rawdata。

/** * 获取rawdata * */ WxPayFace.getInstance().getWxpayfaceRawdata(newIWxPayfaceCallback(){ @Override publicvoidresponse(finalMapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); Stringrawdata=info.get("rawdata"); } });

注意:请在初始化(initWxpayface)成功后获取数据(getWxpayfaceRawdata)

接口作用:获取调用凭证

接口地址:https://payapp.weixin.qq.com/face/get_wxpayface_authinfo

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

参数必填类型说明store_id是string(32)门店编号, 由商户定义, 各门店唯一。store_name是string(128)门店名称,由商户定义。(可用于展示)device_id是string(32)终端设备编号,由商户定义。attach否string附加字段。字段格式使用Jsonrawdata是string(2048)初始化数据。由微信人脸SDK的接口返回。
获取方式参见:
[获取数据 getWxpayfaceRawdata](#获取数据 getWxpayfaceRawdata)
[获取数据 getWxpayfaceRawdata](#获取数据 getWxpayfaceRawdata)appid是string(32)商户号绑定的公众号/小程序 appidmch_id是string(32)商户号sub_appid否string(32)子商户绑定的公众号/小程序 appid(服务商模式)sub_mch_id否string(32)子商户号(服务商模式)now是int取当前时间,10位unix时间戳。 例如:1239878956version是string版本号。固定为1sign_type是string签名类型,目前支持HMAC-SHA256和MD5,默认为MD5nonce_str是string(32)随机字符串,不长于32位sign是string参数签名。详见微信支付签名算法。

参数必填类型说明return_code是string(16)错误码。公共定义见 公共错误码return_msg是string(128)对错误码的描述authinfo是string(4096)SDK调用凭证。用于调用SDK的人脸识别接口。
参见[人脸识别 getWxpayfaceCode](#人脸识别 getWxpayfaceCode)expires_in否intauthinfo的有效时间, 单位秒。 例如: 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,即将过期再进行调用续期即可。

注意:这一步不是必须的,且只支持v2.21版本以上; 仅适用配置了固定IP访问微信刷脸的商户使用

接口作用:如果您网络有防火墙,并且在后台配置了域名和IP关系,则可以调用这个方法,调用成功之后,微信支付SDK进行网络访问时,如果遇到配置的域名,则只会访问这个域名配置的对应IP列表中的IP。这样您的防火墙配置白名单IP时只需配置这些IP。该方法重启后还会生效,除非调用disableFirewall。

参数必填类型说明mchId是string商户IdsubMchId是string子商户IdwxpayfaceCallBack是IWxPayFaceCallbackAIDL回调

参数必填类型说明return_code是string错误码。公共定义见 公共错误码err_code否Integer可为空,二级错误码,公共定义见 二级错误码return_msg是string(128)对错误码的描述

/** *启动防火墙配置 *@parammchId商户Id *@paramsubMchId子商户Id *@paramwxpayfaceCallBack回调 */WxPayFace.getInstance().enableFirewall("商户ID","子商户ID",newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ if(!isSuccessInfo(info)){ return; } showToast("初始化防火墙完成"); } });

注意:请在初始化(initWxpayface)成功后再调用

接口作用:启动人脸APP主界面入口,开启人脸识别,获取支付凭证或用户信息。第一个callback参数wxpayfaceCallBack负责获取付款码,第二个callback参数updateResultWxpayfaceCallBack负责监听SDK查单退出。

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

参数必填类型说明appid是string商户号绑定的公众号/小程序 appidmch_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_authinfoask_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"强制在其他应用上层显示;

参数必填类型说明return_code是string错误码。公共定义见 公共错误码err_code否Integer可为空,二级错误码,公共定义见 二级错误码return_msg是string(128)对错误码的描述face_code是string人脸凭证, 用于刷脸支付。openid是stringopenid(相当于用户身份)sub_openid否string子商户号下的openid(服务商模式)underage_state否int用户年龄信息,使用需要联系微信支付开通权限
可取值:
0:状态不明确,或权限未开通;
1: 成年年人;
2: 未成年人

参数必填类型说明return_code是string错误码(USER_QUERY_CANCEL和SUCCESS)。公共定义见 公共错误码return_msg是string(128)对错误码的描述

HashMapparams=newHashMap<>();//params.put("appid","");//params.put("mch_id","");//params.put("authinfo",""); ... WxPayFace.getInstance().getWxpayfaceCode(params,newIWxPayfaceCallback(){ @Override publicvoidresponse(finalMapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); Stringfacecode=(String)info.get("face_code"); Stringopenid=(String)info.get("openid"); StringsubOpenid=(String)info.get("sub_openid"); .... } });

建议:请在获取调用凭证get_wxpayface_authinfo(rawdata)成功后进行人脸识别(getWxpayfaceCode)

HashMapparams=newHashMap<>();//params.put("appid","");//params.put("mch_id","");//params.put("authinfo",""); ... WxPayFace.getInstance().getWxpayfaceCode(params,newIWxPayfaceCallback(){ @Override publicvoidresponse(finalMapinfo)throwsRemoteException{ if(info==null){ showToast("调用返回为空,请查看日志"); newRuntimeException("调用返回为空").printStackTrace(); returnfalse; } Stringcode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); Stringfacecode=(String)info.get("face_code"); Stringopenid=(String)info.get("openid"); StringsubOpenid=(String)info.get("sub_openid"); .... } },newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ if(info==null){ newRuntimeException("调用返回为空").printStackTrace(); return; } Stringcode=(String)info.get("return_code");//错误码 Stringmsg=(String)info.get("return_msg");//错误码描述 if(code==null||!code.equals("SUCCESS")){ newRuntimeException("调用返回非成功信息,return_msg:" msg "").printStackTrace(); return; } /* 在这里处理您自己的业务逻辑: 执行到这里说明用户已经确认支付结果且成功了,此时刷脸支付界面关闭,您可以在这里选择跳转到其它界面 */ } });

建议:请在获取调用凭证get_wxpayface_authinfo(rawdata)成功后进行人脸识别(getWxpayfaceCode) ; 请不要直接在副屏presentation里调用。

接口作用:在刷脸过程中,只要付款码还没有返回,都可以调用该接口退出刷脸,通常用于用户不想刷脸的时候调用该接口退出刷脸

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

参数必填类型说明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)对错误码的描述

/** *退出刷脸 * */ Mapmap=newHashMap(); map.put("toast_text","商家已停止刷脸"); WxPayFace.getInstance().quitWxpayface(map,newIWxPayfaceCallback(){ @Override publicvoidresponse(Mapinfo)throwsRemoteException{ //通常不用,可以打印出来方便问题分析跟进 StringreturnCode=(String)info.get("return_code"); Stringmsg=(String)info.get("return_msg"); }});

接口作用:发起订单支付

接口地址: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,默认为MD5body是String(128)image形象店-深圳腾大- QQ公仔商品简单描述,该字段须严格按照规范传递,具体请见参数规定detail否String(6000)单品优惠功能字段,需要接入详见单品优惠详细说明attach否String(127)说明附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据out_trade_no是String(32)1217752501201407033233368018商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一。详见商户订单号total_fee是Int888订单总金额,单位为分,只能为整数,详见支付金额fee_type否String(16)CNY符合ISO4217标准的三位字母代码,默认人民币:CNY,详见货币类型spbill_create_ip是String(64)8.8.8.8支持IPV4和IPV6两种格式的IP地址。调用微信支付API的机器IPgoods_tag否String(32)1234订单优惠标记,代金券或立减优惠功能的参数,详见代金券或立减优惠limit_pay否String(32)no_creditno_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)YY,传入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)SUCCESSSUCCESS/FAIL此字段是接口通信情况标识,非交易成功与否的标识return_msg是String(128)OK当return_code为FAIL时返回信息为错误原因 ,例如签名失败参数格式校验错误

当return_code为SUCCESS的时候,还会包括以下字段:

参数必填类型示例值说明appid是String(32)wx8888888888888888调用接口提交的公众账号IDmch_id是String(32)1900000109调用接口提交的商户号device_info否String(32)013467007045764调用接口提交的终端设备号,nonce_str是String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS微信返回的随机字符串sign是String(32)C380BEC2BFD727A4B6845133519F3AD6微信返回的签名,详见签名生成算法result_code是String(16)SUCCESSSUCCESS/FAILerr_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)MICROPAYMICROPAY 付款码支付bank_type是String(32)CMC银行类型,采用字符串类型的银行标识,详见银行类型fee_type否String(16)CNY符合ISO 4217标准的三位字母代码,默认人民币:CNY,详见货币类型total_fee是Int888订单总金额,单位为分,只能为整数,详见支付金额settlement_total_fee否Int100当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。coupon_fee否Int100“代金券”金额<=订单金额,订单金额-“代金券”金额=现金支付金额,详见支付金额cash_fee_type否String(16)CNY符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型cash_fee是Int100订单现金支付金额,详见支付金额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_ERRORXML格式错误支付确认失败XML格式错误请检查XML参数格式是否正确REQUIRE_POST_METHOD请使用post方法支付确认失败未使用post传递参数请检查请求参数是否通过post方法提交SIGNERROR签名错误支付确认失败参数签名结果不正确请检查签名参数和方法是否都符合签名算法要求LACK_PARAMS缺少参数支付确认失败缺少必要的请求参数请检查参数是否齐全NOT_UTF8编码格式错误支付确认失败未使用指定编码格式请使用UTF-8编码格式BUYER_MISMATCH支付帐号错误支付确认失败暂不支持同一笔订单更换支付方请确认支付方是否相同APPID_NOT_EXISTAPPID不存在支付确认失败参数中缺少APPID请检查APPID是否正确MCHID_NOT_EXISTMCHID不存在支付确认失败参数中缺少MCHID请检查MCHID是否正确OUT_TRADE_NO_USED商户订单号重复支付确认失败同一笔交易不能多次提交请核实商户订单号是否重复提交APPID_MCHID_NOT_MATCHappid和mch_id不匹配支付确认失败appid和mch_id不匹配请确认appid和mch_id是否匹配INVALID_REQUEST无效请求支付确认失败商户系统异常导致,商户权限异常、重复请求支付、证书错误、频率限制等请确认商户系统是否正常,是否具有相应支付权限,确认证书是否正确,控制频率TRADE_ERROR交易错误支付确认失败业务错误导致交易失败、用户账号异常、风控、规则限制等请确认帐号是否存在异常。

注意:

  1. ◆ 这是一个后端接口,请在人脸识别成功后发起支付
  2. ◆ 如果当前交易返回的支付状态是明确的错误原因造成的支付失败(支付确认失败),请重新下单支付;如果当前交易返回的支付状态是不明错误(支付结果未知),请调用查询订单接口确认状态,如果长时间(建议30秒)都得不到明确状态请调用撤销订单接口。

接口作用:该接口提供所有微信支付订单的查询,商户可以通过查询订单接口主动查询订单状态,完成下一步的业务逻辑。

需要调用查询接口的情况:

  1. ◆ 当商户后台、网络、服务器等出现异常,商户系统最终未接收到支付通知;
  2. ◆ 调用支付接口后,返回系统错误或未知交易状态情况;
  3. ◆ 调用付款码支付API,返回USERPAYING的状态;
  4. ◆ 调用关单或撤销接口API之前,需确认支付状态;

接口地址:https://api.mch.weixin.qq.com/pay/orderquery

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

参数必填类型说明示例值appid是String(32)微信支付分配的公众账号ID(企业号corpid即为此appId)wxd678efh567hg6787mch_id是String(32)微信支付分配的商户号1230000109transaction_id否String(32)微信的订单号,建议优先使用1009660380201506130728806387out_trade_no否String(32)商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。 详见商户订单号20150806125346nonce_str是String(32)随机字符串,不长于32位。推荐随机数生成算法C380BEC2BFD727A4B6845133519F3AD6sign是String(32)通过签名算法计算得出的签名值,详见签名生成算法5K8264ILTKCH16CQ2502SI8ZNMTM67VSsign_type否String(32)签名类型,目前支持HMAC-SHA256和MD5,默认为MD5HMAC-SHA256

参数必填类型说明示例值return_code是String(16)SUCCESS/FAIL,此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断SUCCESSreturn_msg是String(128)当return_code为FAIL时返回信息为错误原因 ,例如签名失败参、数格式校验错误OK

以下字段在return_code为SUCCESS的时候有返回

参数必填类型说明示例值appid是String(32)微信分配的公众账号IDwxd678efh567hg6787mch_id是String(32)微信支付分配的商户号1230000109nonce_str是String(32)随机字符串,不长于32位。推荐随机数生成算法5K8264ILTKCH16CQ2502SI8ZNMTM67VSsign是String(32)签名,详见签名生成算法C380BEC2BFD727A4B6845133519F3AD6result_code是String(16)SUCCESS/FAILSUCCESSerr_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)微信支付分配的终端设备号013467007045764openid是String(128)用户在商户appid下的唯一标识oUpF8uMuAJO_M2pxb1Q9zNjWeS6ois_subscribe是String(1)用户是否关注公众账号,Y-关注,N-未关注Ytrade_type是String(16)调用接口提交的交易类型,取值如下:JSAPI,NATIVE,APP,MICROPAY,详细说明见参数规定JSAPItrade_state是String(32)SUCCESS—支付成功,REFUND—转入退款当result_code为FAIL时返回错误代码,详细参见下文错误列表,NOTPAY—未支付当result_code为FAIL时返回错误描述,详细参见下文错误列表,CLOSED—已关闭,REVOKED—已撤销(付款码支付),USERPAYING--用户支付中(付款码支付),PAYERROR--支付失败(其他原因,如银行返回失败),支付状态机请见下单API页面SUCCESSbank_type是String(16)银行类型,采用字符串类型的银行标识CMCtotal_fee是int订单总金额,单位为分100settlement_total_fee否int当订单使用了免充值型优惠券后返回该参数,应结订单金额=订单金额-免充值优惠券金额。100fee_type否String(8)货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型CNYcash_fee是int现金支付金额订单现金支付金额,详见支付金额100cash_fee_type否String(16)货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型CNYcoupon_fee否int“代金券”金额<=订单金额,订单金额-“代金券”金额=现金支付金额,详见支付金额CNYcoupon_count否int代金券使用数量1coupon_type_$n否StringCASH--充值代金券,NO_CASH---非充值优惠券,开通免充值券功能,并且订单使用了优惠券后有返回(取值:CASH、NO_CASH)。$n为下标,从0开始编号,举例:coupon_type_$0CASHcoupon_id_$n否String(20)代金券ID, $n为下标,从0开始编号10000coupon_fee_$n否int单个代金券支付金额, $n为下标,从0开始编号100transaction_id是String(32)微信支付订单号1009660380201506130728806387out_trade_no是String(32)商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-|*@ ,且在同一个商户号下唯一。20150806125346attach否String(128)附加数据,原样返回深圳分店time_end是String(14)订单支付时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则20141030133525trade_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系统错误后台系统返回错误系统异常,请再调用发起查询

注意:这是一个后端接口

接口作用:支付交易返回失败或支付系统超时,调用该接口撤销交易。如果此订单用户支付失败,微信支付系统会将此订单关闭;如果用户支付成功,微信支付系统会将此订单资金退还给用户。

注意:7天以内的交易单可调用撤销,其他正常支付的单如需实现相同功能请调用申请退款API。提交支付交易后调用【查询订单API】,没有明确的支付结果再调用【撤销订单API】。

调用支付接口后请勿立即调用撤销订单API,建议支付后至少15s后再调用撤销订单接口

接口地址:https://api.mch.weixin.qq.com/secapi/pay/reverse

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

字段名变量名必填类型示例值描述公众账号IDappid是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)SUCCESSSUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断返回信息return_msg是String(128)OK当return_code为FAIL时返回信息为错误原因 ,例如签名失败参数格式校验错误

当return_code为SUCCESS的时候,还会包括以下字段:

字段名变量名必填类型示例值描述公众账号IDappid是String(32)wx8888888888888888返回提交的公众账号ID商户号mch_id是String(32)1900000109返回提交的商户号随机字符串nonce_str是String(32)5K8264ILTKCH16CQ2502SI8ZNMTM67VS微信返回的随机字符串签名sign是String(32)C380BEC2BFD727A4B6845133519F3AD6返回数据的签名,详见签名算法业务结果result_code是String(16)SUCCESSSUCCESS/FAIL错误代码err_code否String(32)SYSTEMERROR详细参见错误列表错误描述err_code_des否String(128)系统错误结果信息描述是否重调recall是String(1)Y是否需要继续调用撤销,Y-需要,N-不需要。

以上内容是刷脸支付简介和使用操作流程,如有不明白之处可以咨询与我们。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.