今天准备做微信支付,准备使用 JSAPI 方法,然后就需要获取用户的 openId 。
好了,我之前写了个方法直接在当前页面监测是否存在 Oauth 跳转过来的 code ,如果不存在认定为新请求,执行 redirect ;如果存在则 server 端去获取用户状态并设置 user 变量。
问题来了,我花了半天的时间去调试总是提示我签名失败,我很认真地赶脚是自己的问题,排查了好久好久木发现问题;通过微信官方提供的 js 签名在线检查(
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign )也是正确的。然后,我记得此前这个用在 js-sdk 上是很顺利的,就把之前的 js-api-demo 再排查了下,发现木有任何问题,签名、功能啥的都是正确的。
最后,我找来找去,想起唯一不同的就是我在新页面上做了个 Oauth 跳转,好奇地看看当前页面的地址,居然是微信跳转的 oa 地址啊啊啊。所以,这是签名一直错误的根源么。。
然后,在接唯一订单的时候也是遇到签名错误,按照微信支付官方的调试工具(
https://pay.weixin.qq.com/wiki/tools/signverify/ ),依旧我输出的参数和对方输出的参数是一致的,然后可劲儿地报签名错误,经检查,白名单、授权目录、测试目录、使用的商户支付 API key 都是正确的。。。再有,微信支付那个登录控件输入的时候屏幕好一阵黑,恐怖。。
唯一订单 post 过去的 xml 大概是这样的:
<xml>
<appid><![CDATA[appId]]></appid>
<body><![CDATA[test for Chinese]]></body>
<mch_id>mchId</mch_id>
<nonce_str><![CDATA[8olxp6ytndjr1k4cfapmedkjexnyh2d5]]></nonce_str>
<notify_url><![CDATA[notifyUrl]]></notify_url>
<openid><![CDATA[openId]]></openid>
<out_trade_no>1447748715</out_trade_no>
<spbill_create_ip><![CDATA[clientIP]]></spbill_create_ip>
<total_fee>1</total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<sign><![CDATA[D28560D9B6352E0A92A948A8F1C86C37]]></sign>
</xml>