微信支付开发中遇到的两个神坑

微信支付本身是提供了三大Web开发语言的SDK下载的,按理说应该很Easy怎么会有坑呢?
其实坑大多出在文档上,文档不完善,很多东西都得你去摔一跤才明白,事先绝不告诉你,整个微信的文档都跟屎一样
其次是参数命名,一会儿要用timeStamp一会儿却又要用timestamp的,命名混乱就算了还非得区分大小写,百度一下就知道坑过多少人了

这些都忍了,跌跌撞撞也就过来了。但最近做支付又遇到两个大坑。经过数小时终于解决,来介绍下经验

JSAPI报签名错误

项目其中一个需求是在网页点击按钮调起支付,这就得用到微信的JSAPI

下载PHP的SDK,直接部署并测试SDK自带的例程,一切正常
把配置项和支付证书替换成自己公众号的之后,再测试,报签名错误

然后我到微信支付接口签名校验工具,各种测试;到线上各种输日志还是没有发现问题。然后重新检查配置、证书,再bing、google都找不到问题所在。不知不觉就耗去了几个小时

最后在Google出来的某看起来很丑的论坛里一篇帖子提到一个解决方案——重置支付密钥

是的就是那个支付时需要用到的KEY,不是AppID也不是AppSecret
我不抱希望地重置了一下换了个密钥,等待十分钟后,就没报签名错误了

JSAPI调用getBrandWCPayRequest总是报fail

然而微信不会让一切那么顺利的,当我使用getBrandWCPayRequest要调起支付时,报fail错误

这里要先说到微信的支付授权目录,关于这玩意儿,微信官方给出的描述是:

1、所有使用公众号支付方式发起支付请求的链接地址,都必须在支付授权目录之下;
2、最多设置3个支付授权目录,且域名必须通过ICP备案;
3、头部要包含http或https,须细化到二级或三级目录,以左斜杠“/”结尾。

当时的url大概是
http://www.abc.com/wxpay/index.php/wecaht/pay/123

这样的,于是我根据第3条描述,将支付授权目录设定为
http://www.abc.com/wxpay/

好啦这就是二级目录啦!等待10分钟后测试,依然fail

后来改为http://www.abc.com/wxpay/index.php/,三级目录啦。还是fail

经过无数google无果后,破罐子破摔填了个倒数第二级目录
http://www.abc.com/wxpay/index.php/wecaht/pay/

嗯是的,就跟你猜到的一样,成功了……

当时我看着手机里调起的支付密码输入框,满脑子只有WTF……

2 条评论

点击这里取消回复。

昵称
  1. Neo

    网页授权域名只能填一个,也是坑。

  2. 李伟

    这也太坑爹了