记一次踩微信支付的坑

事情是这样:

前几天接一单子,给客户接入微信支付。

一切开发、测试就绪之后交付客户上线到生产环境。一切配置就绪之后发现微信支付结果死活不回调,回调地址根本收不到任何通知。

当时我是萌币的。

之后各种排查,发现是CDN的问题。因为客户使用的百度云加速,并且开启了 HTTPS 。而百度云加速并不支持自定义证书,造成证书与域名不匹配。从而导致了微信服务器在回调的时候验证证书通不过,然后就不回调了。(PS:同样的环境下,支付宝的异步通知却能成功...)

知道了原因之后就开始着手解决问题了。百度云加速给出的方案是取消 HTTPS。然而,这视乎不太可能。

然后想了一个折中的办法:让微信支付通过 HTTP 来回调。

实现的办法是,在 Nginx 内开启 HSTS 。在 location ~ [^/]\.php(/|$)段加入以下代码

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

然后,微信支付就可以正常回调啦!

最后我想说:阿里云、腾讯云的 CDN 都是支持自定义 SSL 证书的!!!!!

分享