上一篇博文已经获取到了prepay_id-下一步可以传递给客户端调用微信的js发起支付界面进行支付了。看似很简单,也遇到不少问题。这里记录下来-
统一下单请求成功后返回的XML格式参数如下
<xml>
<return_code>
<![CDATA[SUCCESS]]>
</return_code>
<return_msg>
<![CDATA[OK]]>
</return_msg>
<appid>
<![CDATA[wx465d987ac2000000]]>
</appid>
<mch_id>
<![CDATA[1263500000]]>
</mch_id>
<device_info>
<![CDATA[WEB]]>
</device_info>
<nonce_str>
<![CDATA[SOdpVyp0ze3PJUfj]]>
</nonce_str>
<sign>
<![CDATA[CDD5B2E19FF5979374FF678D09D7C7A1]]>
</sign>
<result_code>
<![CDATA[SUCCESS]]>
</result_code>
<prepay_id>
<![CDATA[wx2016050912001362f6e315510009178410]]>
</prepay_id>
<trade_type>
<![CDATA[JSAPI]]>
</trade_type>
</xml>
其中最重要的就是prepay_id了-我们可以在后台JAVA取出此id返回给前台,但是前台调起支付界面还需要其他的参数,如下:也就是在后台一要获取prepay_id,二要取得当前十位数字的时间戳,三要将下面的五个参数进行签名
"appId" : '${success.appId}', //公众号名称,由商户传入
"timeStamp":'${success.timeStamp}', //时间戳,自1970年以来的秒数【注意是秒数10位的】
"nonceStr":'${success.nonceStr}', //随机串,同上篇博文的随机算法
"package":'${package1}',
"signType":"MD5", //微信签名方式:MD5
"paySign":'${success.paySign}' //微信签名,在后台将上面五个参数进行签名,签名算法同上一篇博文
遇到的错误:
1.暂时不支持此sdk模拟
因为我用的微信的开发工具测试的所以有这个提示,微信支付不能使用这个进行测试,直接用真实的微信在手机上测试
2.授权目录一定要写对:当前页面的url未注册。将要支付的微信加入测试白名单,测试授权目录填写正确【付款页面必须在此页面下,支付地址也要在此文件夹下,注意我使用的SpringMVC,即使发送的请求是locahost:/pay.do--也要改为localhost/pages/pay.do】
3.JS回调域名要在测试域名下,还是建议我写的微信测试本地化环境搭建那样,用ngrok搭建本地环境