1、(5)用户使用微信被扫支付未超过免密限额(详见1.3节),微信直接扣款成功,否则用户端微信会弹出输入密码提示(见下中图),支付成功后用户微信侧会弹出交易结果(见下右图);- -(6)步骤4提交请求后会同步返回支付结果。如果需要密码验证,支付结果返回USERPAYING (用户支付中)的状态。当支付结果为系统错误,需要商户收银系统调用订单查询API(详见2.2节)查询支付实际交易结果;当返回USERPAYING时等待用户输入密码,系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议30秒);(4)在交易状况不明晰的情况下调用撤销接口(详见2.5节),如果交易失败则关闭订单,
2、该单不能再支付成功;如果交易成功,则将扣款退回到用户账户。当撤销无返回或错误时,请再次调用。1.2接口调用时序图微信被扫支付接口文档V2.5 41.3免密额度用户使用每单免密额度(用户不可调整); 每单小于300元的消费都免密; 每天10次免密刷卡限制; 大于300元的消费需要验证密码; 当天满10次免密,后续交易均验证密码,第二天自动恢复免密次数; 用户行为异常需要验证密码; 用户可以停用此功能;1.4接口调用方式API调用方式与说明: 采用HTTPS方式访问 提交方法为POST 提交和返回的数据格式为XML 编码为UTF-8 提交和返回数据都需要验证签名。注意:撤销和退
3、款接口需要双向证书(商户证书),支付和查询不需要。微信被扫支付接口文档V2.5 51.5签名方式Sign 签名生成方法由于数据中携带了生成订单的详细信息,因此在微信将对数据里面的内容进行鉴权,确定携带的信息是真实、有效、合理的。因此,这里将定义生成sign 字符串的方法。a.对所有传入参数按照字段名的ASCII码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2)拼接成字符串 string1,注意:值为空的参数不参与签名;b.在 string1 最后拼接上 key=paternerKey 得到 stringSignTemp 字符串,并对strin
4、gSignTemp进行md5运算,再将得到的字符串所有字符转换为大写,得到 sign值signValue。下面定义了一段生成sign 字符串的示范过程:假设以下为package 传入参数:appid=wxd930ea5d5a258f4fauth_code=123456body=testdevice_info=123mch_id=1900000109nonce_str=960f228109051b9969f76c82bde183acout_trade_no=1400755861spbill_create_ip=127.0.0.1sub_mch_id=124total_fee=1key=8934e
5、7d15453e97507ef794cf7b0519di:经过a 过程URL 键值对字典序排序后的字符串string1 为:appid=wxd930ea5d5a258f4f&auth_code=123456&body=test&device_info=123&mch_id=1900000109&nonce_str=960f228109051b9969f76c82bde183ac&out_trade_no=1400755861&spbill_create_ip=127.0.0.1&sub_mch_id=124&ii:经过b 过程后得到sign 为:sign=md5(string1&key=893
6、4e7d15453e97507ef794cf7b0519d).toUpperCase=md5(appid=wxd930ea5d5a258f4f&device_info=1微信被扫支付接口文档V2.5 623&mch_id=1900000109&out_trade_no=1400755861&total_fee=1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase()=c380bec2bfd727a4b6845133519f3ad6.toUpperCase()C380BEC2BFD727A4B6845133519F3AD62. API说明2.1提
7、交被扫支付APIURL: 具3o_徛_体的post数据格式如:appidwx2421b1c4370ec43battach!CDATAatt/attachauth_code100000000749880164bodyCDATA交易说明/bodydevice_info1000goods_tag/goods_tagmch_id10000100nonce_str58ef9df15219a07d73b176b3e664d735out_trade_no1404470527spbill_create_ip127.0.0.1time_expire/time_expiretime_start/time_star
8、ttotal_fee1signCDATAF06C8D0D931B360AB6DEFB886F8E9FC5/sign/xml提交参数说明:字段名变量名必填类型说明公众账号ID appid 是String(32) 微信分配的公众账号ID商户号mch_id 是String(32) 微信支付分配的商户号子商户号sub_mch_id 否String(32) 微信支付分配的子商户号,受理模式下必填设备号device_info 否String(32) 终端设备号(商户自定义)微信被扫支付接口文档V2.5 7随机字符串nonce_str 是String(32) 随机字符串,不长于32 位签名sign 是Str
9、ing(32) 签名,签名方式详见1.5 节商品描述body 是String(127) 商品描述附加数据attach 否String(127) 附加数据,原样返回商户订单号out_trade_no 是String(32) 商户系统内部的订单号,32 个字符内、可包含字母, 确保在商户系统唯一总金额total_fee 是Int 订单总金额,单位为分,只能整数终端IP spbill_create_ip 是String(16) 订单生成的机器IP交易起始时间time_start 否String(14) 订单生成时间, 格式为yyyyMMddHHmmss,如2009年12 月25 日9 点10 分10
10、 秒表示为20091225091010。时区为GMT+8 beijing。该时间取自商户服务器交易结束时time_expire 否String(14) 订单失效时间, 格式为年12 月27 日9 点10 分10 秒表示为20091227091010。商品标记goods_tag 否String(32) 商品标记,微信平台配置的商品标记,用于优惠券或者满减使用,使用说明详见第3 节授权码auth_code 是String(128) 扫码支付授权码,设备读取用户微信中的条码或者二维码信息备注:appid,mch_id,sub_mch_id 由微信提供,device_info 由商户分配,auth_c
11、ode为读取到用户的支付码。商户的out trade no 必须全局唯一,调试和生产环境,都需要使用唯一的订单号。当商户的同一个商户号绑定了公众号支付、被扫刷卡、APP 支付也需要加标识来区分,不能出现重复。当发起支付返回失败时,一定要用原订单的out trade no 而不能重新生成新的订单号发起支付,避免同一单重复支付。返回数据:return_codeCDATASUCCESS/return_codereturn_msgCDATAOK/return_msgCDATAwx2421b1c4370ec43bCDATA10000100微信被扫支付接口文档V2.5 8CDATA1000CDATALM1
12、Bbp0WoDV5jqpPCDATA1DE267795ECCC5BFB90DDCA91DBBF107result_code/result_codeopenidCDATAoUpF8uAPCYkD5hhiSz_M9eFoD3Cw/openidis_subscribeCDATAN/is_subscribetrade_typeCDATAMICROPAY/trade_typecoupon_fee0fee_typeCDATA1/fee_typetransaction_idCDATA1217752501201407033233368018/transaction_idCDATA1404470527time_
13、endCDATA20140703211656/time_end格式说明:字段名变量名必填类型说明返回状态码return_code 是String(16) SUCCESS/FAIL此字段是通信标识,非交易标识, 交易是否成功需要查看result_code 来判断返回信息return_msg 否String(128) 返回信息,如非空,为错误原因签名失败参数格式校验错误以下字段在return_code 为SUCCESS 的时候有返回子商户号sub_mch_id 否String(32) 微信支付分配的子商户号,受理模式下必填设备号device_info 否String(32) 微信支付分配的终端设备
14、号,签名sign 是String(32) 签名, 详细签名方法见1.5 节业务结果result_code 是String(16) SUCCESS/FAIL错误代码err_code 否String(32) 列表详见第3 节错误代码描述err_code_des 否String(128) 结果信息描述以下字段在return_code 和result_code 都为SUCCESS 的时候有返回用户标识openid 是String(128) 用户在商户appid 下的唯一标识是否关注公众is_subscribe 是String(1) 用户是否关注公众账号,Y-关微信被扫支付接口文档V2.5 9账号注,N
15、-未关注,仅在公众账号类型支付有效交易类型trade_type 是String(16) JSAPI、NATIVE、MICROPAY、APP付款银行bank_type 是String(16) 银行类型,采用字符串类型的银行标识总金额total_fee 是Int 订单总金额,单位为分企业红包金额coupon_fee 否Int 企业红包金额=订单总金额,订单总金额-企业红包金额=现金支付金额货币种类fee_type 否String(8) 货币类型,符合ISO 4217 标准的三位字母代码,默认人民币:CNY微信支付订单号transaction_id 是String(32) 微信支付订单号商户订单号o
16、ut_trade_no 是String(32) 商户系统的订单号,与请求一致。商家数据包attach 否String(128) 商家数据包,原样返回支付完成时间time_end 是String(14) 支付完成时间, 格式为yyyyMMddhhmmss,如2009 年12月27 日9 点10 分10 秒表示为20091227091010 。时区为GMT+8 beijing。该时间取自微信支付服务器2.2被扫订单查询API当调用扣款接口返回支付中或失败状态,需要调用查询接口查询订单实际支付状态。当遇到用户超过日限额需要输入密码返回“支付中”的状态,建议10 秒调一次查询,调用3 次后还未成功作支
17、付超时处理。具体的post数据格式如:6e9feef0d48ead6730ce88ecc22b34ccCDATAE7F981D8CC798F3C290757A00583607F微信被扫支付接口文档V2.5 10微信订单号transaction_id 否String(32) 微信的订单号,优先使用商户订单号out_trade_no是String(32) 商户系统内部的订单号,transaction_id 、out_trade_no 二选一,如果同时存在优先级:out_trade_no签名sign 是String(32) 签名,详细签名方法见1.5 节CDATAwxd930ea5d5a258f4f1900000109124123err_codeCDATA/err_codeerr_code_deserr_cod
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1