微信支付开发中遇到的两个神坑
微信支付本身是提供了三大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……
网页授权域名只能填一个,也是坑。
这也太坑爹了