微信支付开发问题

  • time_expire时间过短,刷卡至少1分钟,其他5分钟

今天系统原本跑的好好的,突然间客户说,微信支付不能支付了,脑袋一蒙,怎么会呢?前几天还好好的,怎么就这样了呢?

打开日志看下究竟发生了什么?找到了这段日志:

<xml>
<return_code><![CDATA[FAIL]]></return_code>
    <return_msg><![CDATA[time_expire时间过短,刷卡至少1分钟,其他5分钟]]></return_msg>
    </xml>

凡事先问下百度,嘿还真不少,但是都他妈是爬虫爬的,要么就是转载的,都说的是设置的事件过长的问题,这是由于微信的接口调整导致的,而且还是发生在2015年,但是这都2017年了,为毛以前可以现在又挂了,我陷入沉思。

但是还是给了我一定的启发,那就是,所有的一切都是和time_expire这个字段有关,这个字段是干什么呢?原来这个字段是预支付订单号的失效时间点,注意是时间点,超过这个时间点的支付都会因为预支付订单号失效而导致订单支付失败。

于是我看了一下代码,这个时间点是通过获取系统的当前时间加上一个时间段生成的,于是我想看看系统时间,Linux下使用date命令,卧槽为毛时间落后了三分钟,难怪时间失效了,向微信提交的time_expire刚提交就失效了。

但是这个问题很小概率,你提交的时间是大于实际的当前时间的,但是可能这个时间的有效期就剩下1秒钟了,但是你这个时间也是比当前时间大啊,所以微信就校验通过了,但是等你支付时,啪嗒,过了1秒,你的支付就失效了,我估计这个服务器的时间本来就可能有不准,只是原来不明显,但是随着时间的推移,这个偏差越来越大,最终导致了这个问题。

该项目的服务器是个自建的服务器。

如何让linux时间与internet时间同步(centos)

最后更新于