微信支付的那些坑

微信支付的那些坑 · Nov 4, 2014 clicks

做过微信公众平台开发的人似乎都一副苦大仇深的样子, 原因何在?
微信挖了太多的坑。

首先,为了图简单,我们选择js api

然后事实告诉我们, too young ,too simple。 微信可不是一般的腹黑(wu neng)。

1. 微信官方的js demo根本就跑不通。 官方文档和给的php sdk里的签名方法都是MD5,但是 js demo里时SHA1, 即使改成MD5也一样跑不通,更要么的是没法调试。

2. 开发调试时, 首先要在开发者中心修改OAuth2.0网页授权的配置,否则总是redirect_uri参数错误, 修改js api配置的时候经常发生修改没有生效的问题。

3. 很奇葩的一点是, 测试的网址必须要用公众号发给测试用户, 自己扫二维码打开页面会返回ACCESS _DENY。

4.  JS_API_CALL_URL大巨坑, 把自己网站的订单以参数形式放到url后面会出各种莫名其妙的问题,通常会丢失, 而且还不能把整个url 做个URLENCOE,只好用session保存第一次传进来的商品数据。

5. 价格是以分为单位的, 如果没注意到这点会折腾很久,因为微信不会告诉你哪里错了。 最好在获取prepay_id的适合保存日志。

6. NOTIFY_URL同样不能带参数, 所以支付成功的适合你不知道到底哪个订单支付成功了, 解决的方法时自己保存out_trade_no于订单id的对应关系。

7. 官方PHP sdk的代码有数个低级错误,几个地方都把CURLOPT写错了,少了个T, 还有个地方curl_close重复了。

最终把官方给的那个js_api_call.php拿来改改用上了。