微信公众号支付总结:做完了微信支付想趁着这把火没灭继续把公众号支付也做完,但是没想到中途出了呢么多意外,每次都是感觉解决了这个问题就可以支付了,但每次都是一个问题接另一个问题的出现,特此总结一下出现的问题及原因。
1.没仔细看文档(有人会一个字一个字的全看完么。。。还是只有我一目十行。。)。如果你仔细把官方文档看完,那你必定能减少至少一半的出错。
①但是我感觉有个参数说明挺坑的,就是那个openid!!!
变量名
openid
必填
否
描述
trade_type=JSAPI时(即公众号支付),此参数必传,此参数为微信用户在商户对应appid下的唯一标识。openid如何获取,可参考【获取openid】。企业号请使用【企业号OAuth2.0接口】获取企业号内成员userid,再调用【企业号userid转openid接口】进行转换
一堆参数,这个用户标志是在最后一个,看到这里的时候早就没耐心了,一开始做想只用必须参数,然后再扩展,看到是否必填的选项为 否之后,我就连看没看,在网上看 demo的时候 大家都说openid必填,我还以为官方文档又更新了,openid都省了,后来每次做好像是提示签名错误还是没有权限啥的,记不清了,我又上网查,仔细对着文档一个个的找才发现了后面这个描述:trade_type=JSAPI时(即公众号支付),此参数必传。感觉很无语,那你写个不是必传干嘛,好歹这个也是公众号支付里的页面,你能在后面加个备注就不能顺手把前面也改掉。
②其实那个trade_type我也没注意,因为刚做完APP支付,所以这个字段我就直接写上了APP,其实他也是有具体的取值的,如:JSAPI,NATIVE,APP等,说明详见参数规定。一开始值为APP时,预支付标志直接生成成功,后来我拿这个预支付标识去支付的时候 总是提示我没权限。。尴尬,希望大家不要和我这么粗心。
2.参数配置有问题
微信公众号支付需要的配置有 :
微信支付目录:app_id (和微信app支付不是一个id)
商户key(key设置路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置),加签的时候是用这个加签,不要和我似得傻乎乎的用 app_secret去加签。。为了获得这个secret还去重置了,中间又因为忘了公众号密码耽误了好久,,最后好像还没用到这个,无语问苍天。。
微信支付目录:支付授权目录
接口列表:网页授权获得用户资料,点修改,里面有域名相关的配置,我因为写乱七八糟的报错,所以把里面的一个js安全域名和回调域名都填写了,也不清楚到底起作用了没。
3.加签出错
如果提示验签失败那么别怀疑,就是你加签有问题,微信支付已经用了这么久,他的服务端代码有问题那几乎是不可能的,你愿意听我一言那么就立马进入这里:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1 用官方提供的验签工具去检查你的签名是否和他的一样,如果不一样你就一步步照着他的步骤检查,看看是加签过程出了问题还是你的XML有问题,我曾遇见的问题有:中文乱码,排序,大小写。(是不是加签上文档说明的雷全被我踩了。。)
如果你的加签结果和他的一样,那就说明是你的参数有问题了。再次确认一下配置的参数,我在网上看到一个说一直提示验签失败,然后对比的结果也没问题,最后重置了一下key就好了,我没遇到过,但是如果你真走投无路那你可以尝试一下,不尝试怎么知道 真的是不行呢哈哈哈哈。
4.支付授权目录
(这也是一个坑啊,一开始他还有个 测试授权目录的配置,然后我添加了一个公司ip的映射地址测试,结果第二天这个测试目录取消了,就是这么的快,然后我就添加不上公司ip了,我编辑正式的支付授权目录时候,我昨天添加的那个还在,我啥都没动保存的时候提示我昨天添加的呢个未认证,又让我删掉。。感觉好无语,怎么就偏偏被我碰上了,这里倒也不是说微信不好,就是吐槽下。。)
如果支付授权目录没有设置正确,在请求JSAPI时,会提示“当前页面的url未注册”的错误。具体配置的话,我总结一下就是你调起支付的那个html,jsp,php页面的上一级目录 ,例如 http://www.baidu.com/a/a.html的授权目录就是http://www.baidu.com/a/ 。
5.其他说明
注意参数大小写
注意加签时候区分大小写,看看是不是都转成小写了
如果有中文注意有没有乱码
注意时间戳长度及确认是时间戳还是日期字符串
微信验签工具:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1
微信公众号相比微信APP支付要多很多乱七八糟的东西,除了错不要慌,一步步来,乱了套就从头检查,或者先注释掉非必须的代码,就像最小装机法那样,只装电脑启动的必须硬件。
如有不当之处,还望指正。