微信支付API文档V256文档格式.docx
《微信支付API文档V256文档格式.docx》由会员分享,可在线阅读,更多相关《微信支付API文档V256文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
(5)用户使用微信被扫支付未超过免密限额(详见1.3节),微信直接扣款成功,否则用户
端微信会弹出输入密码提示(见下中图),支付成功后用户微信侧会弹出交易结果(见下右
图);
->
->
(6)步骤4提交请求后会同步返回支付结果。
如果需要密码验证,支付结果返回
USERPAYING(用户支付中)的状态。
当支付结果为系统错误,需要商户收银系统调用
订单查询API(详见2.2节)查询支付实际交易结果;
当返回USERPAYING时等待用户输入
密码,系统可设置间隔时间(建议10秒)重新查询支付结果,直到支付成功或超时(建议
30秒);
(4)在交易状况不明晰的情况下调用撤销接口(详见2.5节),如果交易失败则关闭订单,
该单不能再支付成功;
如果交易成功,则将扣款退回到用户账户。
当撤销无返回或错误
时,请再次调用。
1.2接口调用时序图
微信被扫支付接口文档V2.54
1.3免密额度
用户使用每单免密额度(用户不可调整);
每单小于300元的消费都免密;
每天10次免密刷卡限制;
大于300元的消费需要验证密码;
当天满10次免密,后续交易均验证密码,第二天自动恢复免密次数;
用户行为异常需要验证密码;
用户可以停用此功能;
1.4接口调用方式
API调用方式与说明:
采用HTTPS方式访问
提交方法为POST
提交和返回的数据格式为XML
编码为UTF-8
提交和返回数据都需要验证签名。
注意:
撤销和退款接口需要双向证书(商户证书),支付和查询不需要。
微信被扫支付接口文档V2.55
1.5签名方式
Sign签名生成方法
由于数据中携带了生成订单的详细信息,因此在微信将对数据里面的内容进行鉴权,
确定携带的信息是真实、有效、合理的。
因此,这里将定义生成sign字符串的方法。
a.对所有传入参数按照字段名的ASCII码从小到大排序(字典序)后,使用URL键
值对的格式(即key1=value1&
key2=value2…)拼接成字符串string1,注意:
值为空的
参数不参与签名;
b.在string1最后拼接上key=paternerKey得到stringSignTemp字符串,并对
stringSignTemp进行md5运算,再将得到的字符串所有字符转换为大写,得到sign值
signValue。
下面定义了一段生成sign字符串的示范过程:
假设以下为package传入参数:
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
total_fee=1
key=8934e7d15453e97507ef794cf7b0519d
i:
经过a过程URL键值对字典序排序后的字符串string1为:
appid=wxd930ea5d5a258f4f&
auth_code=123456&
body=test&
device_info=123&
m
ch_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=8934e7d15453e97507ef794cf7b0519d).toUpperCase
=md5(appid=wxd930ea5d5a258f4f&
device_info=1
微信被扫支付接口文档V2.56
23&
mch_id=1900000109&
out_trad
e_no=1400755861&
total_fee=1&
key=893
4e7d15453e97507ef794cf7b0519d).toUpperCase()
="
c380bec2bfd727a4b6845133519f3ad6"
.toUpperCase()
C380BEC2BFD727A4B6845133519F3AD6"
2.API说明
2.1提交被扫支付API
URL:
具"
3o_徛_体的post数据格式如:
<
xml>
appid>
wx2421b1c4370ec43b<
/appid>
attach>
!
[CDATA[att]]>
/attach>
auth_code>
100000000749880164<
/auth_code>
body>
[CDATA[交易说明]]>
/body>
device_info>
1000<
/device_info>
goods_tag>
/goods_tag>
mch_id>
10000100<
/mch_id>
nonce_str>
58ef9df15219a07d73b176b3e664d735<
/nonce_str>
out_trade_no>
1404470527<
/out_trade_no>
spbill_create_ip>
127.0.0.1<
/spbill_create_ip>
time_expire>
/time_expire>
time_start>
/time_start>
total_fee>
1<
/total_fee>
sign>
[CDATA[F06C8D0D931B360AB6DEFB886F8E9FC5]]>
/sign>
/xml>
提交参数说明:
字段名变量名必
填
类型说明
公众账号IDappid是String(32)微信分配的公众账号ID
商户号mch_id是String(32)微信支付分配的商户号
子商户号sub_mch_id否String(32)微信支付分配的子商户号,受
理模式下必填
设备号device_info否String(32)终端设备号(商户自定义)
微信被扫支付接口文档V2.57
随机字符串nonce_str是String(32)随机字符串,不长于32位
签名sign是String(32)签名,签名方式详见1.5节
商品描述body是String(127)商品描述
附加数据attach否String(127)附加数据,原样返回
商户订单号out_trade_no是String(32)商户系统内部的订单号,32个
字符内、可包含字母,确保在商
户系统唯一
总金额total_fee是Int订单总金额,单位为分,只能
整数
终端IPspbill_create_ip是String(16)订单生成的机器IP
交易起始时
间
time_start否String(14)订单生成时间,格式为
yyyyMMddHHmmss,如2009
年12月25日9点10分10秒
表示为20091225091010。
时
区为GMT+8beijing。
该时间取
自商户服务器
交易结束时
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_code
为读取到用户的支付码。
商户的outtradeno必须全局唯一,调试和生产环境,都需要使用唯一的订单号。
当商户的同一个商户号绑定了公众号支付、被扫刷卡、APP支付也需要加标识来
区分,不能出现重复。
当发起支付返回失败时,一定要用原订单的outtradeno而不能
重新生成新的订单号发起支付,避免同一单重复支付。
返回数据:
return_code>
[CDATA[SUCCESS]]>
/return_code>
return_msg>
[CDATA[OK]]>
/return_msg>
[CDATA[wx2421b1c4370ec43b]]>
[CDATA[10000100]]>
微信被扫支付接口文档V2.58
[CDATA[1000]]>
[CDATA[LM1Bbp0WoDV5jqpP]]>
[CDATA[1DE267795ECCC5BFB90DDCA91DBBF107]]>
result_code>
/result_code>
openid>
[CDATA[oUpF8uAPCYkD5hhiSz_M9eFoD3Cw]]>
/openid>
is_subscribe>
[CDATA[N]]>
/is_subscribe>
trade_type>
[CDATA[MICROPAY]]>
/trade_type>
coupon_fee>
0<
/coupon_fee>
fee_type>
[CDATA[1]]>
/fee_type>
transaction_id>
[CDATA[1217752501201407033233368018]]>
/transaction
_id>
[CDATA[1404470527]]>
time_end>
[CDATA[20140703211656]]>
/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)微信支付分配的终端设备号,
签名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.59
账号注,N-未关注,仅在公众账号类
型支付有效
交易类型trade_type是String(16)JSAPI、NATIVE、MICROPAY、APP
付款银行bank_type是String(16)银行类型,采用字符串类型的银
行标识
总金额total_fee是Int订单总金额,单位为分
企业红包金额coupon_fee否Int企业红包金额<
=订单总金额,订
单总金额-企业红包金额=现金
支付金额
货币种类fee_type否String(8)货币类型,符合ISO4217标准
的三位字母代码,默认人民币:
CNY
微信支付订单
号
transaction_id是String(32)微信支付订单号
商户订单号out_trade_no是String(32)商户系统的订单号,与请求一
致。
商家数据包attach否String(128)商家数据包,原样返回
支付完成时间time_end是String(14)支付完成时间,格式为
yyyyMMddhhmmss,如2009年12
月27日9点10分10秒表示为
20091227091010。
时区为
GMT+8beijing。
该时间取自微信
支付服务器
2.2被扫订单查询API
当调用扣款接口返回支付中或失败状态,需要调用查询接口查询订单实际支付状态。
当
遇到用户超过日限额需要输入密码返回“支付中”的状态,建议10秒调一次查询,调
用3次后还未成功作支付超时处理。
具体的post数据格式如:
6e9feef0d48ead6730ce88ecc22b34cc<
/transaction_id>
[CDATA[E7F981D8CC798F3C290757A00583607F]]>
微信被扫支付接口文档V2.510
微信订单号transaction_id否String(32)微信的订单号,优先使用
商户订单号out_trade_no
是String(32)商户系统内部的订单号,
transaction_id、
out_trade_no二选一,如果
同时存在优先级:
out_trade_no
签名sign是String(32)签名,详细签名方法见1.5节
[CDATA[wxd930ea5d5a258f4f]]>
1900000109<
sub_mch_id>
124<
/sub_mch_id>
123<
[CDATA[960f228109051b9969f76c82bde183ac]]>
err_code>
[CDATA[]]>
/err_code>
err_code_des>
err_cod