微信小程序支付的奇葩踩坑经历

最近在搞小程序微信支付,遇到了一次始料未及的坑,这里记录一下。

早在之前接入过微信公众号支付、app支付以及支付宝的各种支付,简单看了一下小程序的支付文档,一切了然于胸。知道微信的开发文档很烂,也是做好了心理准备,但这一次也着实让我怀疑人生了。

具体的开发流程,这里就不详细说了。主要说一下我的问题所在,本次小程序支付卡在服务端的第一步:统一下单接口签名错误。这对一个接入过N多次第三方的支付的老司机来说简直就是打脸。一点点核对代码,排除一些常见问题,用微信支付接口签名校验工具验签,设置动用的Beyond Compare工具来比对,但始终未发现代码中有任何问题。

经过N小时的怀疑人生,后来发现一个诡异的现象:支付签名在本地是正确的,丢到服务器上立马报错。后来发现,服务器中MD5加密的签名竟然和本地的不一样。同样是MD5算法,不可能在不同的操作系统中有不同结果。后来不经意间发现,终端中显示中文日志均为乱码,包括签名参数中一些说明字段也都是乱码。至此,终于定位到问题所在,服务器语言环境带来的编码问题导致签名错误。服务器是买的阿里云的ESC,系统是Ubuntu。好气!!不过这个问题之前也是闻所未闻。

解决方案

重新安装中文语言包

1
apt-get -y install language-pack-zh-hans

设置默认语言编码

1
2
3
vim /etc/default/locale
LANG="zh_CN.UTF-8"

愿世界不再有伤害 -EOF-