您的位置:

如何正确编写getbrandwcpayrequest的请求?

一、确保请求参数正确性

1、在进行getbrandwcpayrequest请求时,需要对请求参数进行正确性检查。以下是getbrandwcpayrequest请求中需要传递的参数:

appid:公众账号ID
mch_id:商户号
nonce_str:随机字符串,不长于32位
body:商品或支付单简要描述
out_trade_no:商户订单号
total_fee:总金额,单位为分
spbill_create_ip:用户端实际ip
notify_url:接收微信支付异步通知回调地址
trade_type:交易类型,取值如下:JSAPI,NATIVE,APP等
product_id:trade_type=NATIVE时,此参数必传。此参数为二维码中包含的商品ID,商户自行定义。
openid:trade_type为JSAPI时,此参数必传,用户在商户appid下的唯一标识。

2、在传递参数时,需要注意参数名一定要使用小写字母,例如appid、mch_id、nonce_str等。同时,参数值需要进行urlencode编码。

appid=wx2421b1c4370ec43b
mch_id=10000100
nonce_str=IITRi8Iabbblz1Jc
body=%E8%AE%A2%E5%8D%95%E4%B8%AD%E8%B4%AD
out_trade_no=1415659990
total_fee=1
spbill_create_ip=14.23.150.211
notify_url=http%3A%2F%2Fwxpay.wxutil.com%2Fpay.php
trade_type=JSAPI
openid=oUpF8uMuAJO_M2pxb1Q9zNjWeS6o

3、对于参数值中含有特殊字符(如#、&、+等)的情况,需要在urlencode编码前进行转义。例如,传递的商品名称中含有#字符,需要将#转义成%23,再进行urlencode编码。

二、生成签名

1、在传递请求参数正确性检查无误的情况下,需要对所有请求参数进行签名,以保证请求的安全性。签名生成算法使用的是MD5算法。以下是MD5签名生成的步骤:

2、将所有请求参数按照参数名字典序排序(ASCII码顺序)后,使用"&"符号连接起来,得到一个字符串。

3、在该字符串后面拼接上商户的API密钥,得到一个完整的字符串。

4、对该完整字符串进行MD5运算,得到签名值。

5、将签名值作为参数添加到请求参数中。

{ 
   "appid":"wx2421b1c4370ec43b",
   "attach":"支付测试",
   "body":"JSAPI支付测试",
   "mch_id":"10000100",
   "nonce_str":"1add1a30ac87aa2db72f57a2375d8fec",
   "notify_url":"http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php",
   "openid":"oUpF8uMuAJO_M2pxb1Q9zNjWeS6o",
   "out_trade_no":"1415659990",
   "spbill_create_ip":"14.23.150.211",
   "total_fee":"1",
   "trade_type":"JSAPI",
   "sign":"0CB01533B8C1EF103065174F50BCA001"
}

三、发送请求并获取结果

1、在生成签名后,将所有请求参数及其签名值作为XML格式的字符串发送给微信支付服务器。以下是getbrandwcpayrequest请求的XML示例:

  
   
   wx2421b1c4370ec43b
   
   
   支付测试
   
   JSAPI支付测试
   
   10000100
   
   
   1add1a30ac87aa2db72f57a2375d8fec
   
   
   http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php
   
   
   oUpF8uMuAJO_M2pxb1Q9zNjWeS6o
   
   
   1415659990
   
   
   14.23.150.211
   
   
   1
   
   
   JSAPI
   
   
   0CB01533B8C1EF103065174F50BCA001
   

  

2、微信支付服务器将会返回XML格式的结果给商户服务器。以下是getbrandwcpayrequest请求返回的XML示例:

  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

  

3、商户服务器需要对返回结果进行解析,并处理其中的响应参数。根据返回结果中的prepay_id,商户便可在微信支付服务器通过JSAPI发起用户支付。