微信支付接口调用之二维码失效时间的设置

今天解决了测试提交上来的一个bug,说是公司网站调用的二维码接口没有做超时失效处理,这种情况容易导致用户账号登出后,该二维码还是有效的,当用户扫描支付时还是能够支付成功,但是微信支付成功后调用我们配置好的回调接口时却会因为被拦截而无法执行正常的回调操作,一些重要的资金流水和自己网站独有的资金账户的信息都将无法保存,造成的影响是非常严重的。不多说,开始切入正题。 --------------------- 作者:今儿ge休息 来源:CSDN 原文:https://blog.csdn.net/weixin_42023666/article/details/81129191?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

 

在微信官方给出的微信支付开发文档,统一下单接口中有一个参数  time_expire  是用来设置二维码的超时时间的,截图如下:

周杰伦

更多参数详情请访问: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1 查看。

 

于是我在自己的代码中加入了 “time_expire ”这个参数,如下图红框部分:

 

时间的生成方法是自己写的,很简单,附上代码如下:

    /**
     * 设置微信二维码失效时间,并返回具体失效的时间点
     * @param expire 二维码的有效时间,单位是毫秒
     * @return
     */
    public static String getOrderExpireTime(Long expire){
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
		  Date now = new Date();
		  Date afterDate = new Date(now .getTime() + expire);
		  return sdf.format(afterDate );
    }

 

因为没有全面通读过微信支付开发文档,这套接口也是前面的老员工接入的,我算是半道子出门,所以以为这样就可以设置成功了,结果一试,发现二维码都无法显示了:

查看后台打印的日志,发现是签名错误:

直接去百度,结果发现网上没有解决的方案,正确的说,那些大神都不会犯这种小儿科的错误(汗颜),无奈我只能去读源码,结果让我发现,之前放入map中的参数所有参数,最后都要封装在<xml>中,于是我加上了:

再次测试,发现此时二维码能正常显示了,如下图:

我设置的超时失效时间是两分钟,两分钟过后,我再扫这个二维码时,发现二维码已经失效了:

至此,问题算解决了。事实上,更完美的解决方案是,前端也要控制二维码的显示时间。

本来这个问题很简单,如果是接触过微信支付开发的人,应该能够很快实现这个需求,但是作为一个刚接触的人来说,确实是有些困难的,本着一查就有的原则,写下这篇博客,给以后和我一样苦逼的程序小白一点小小帮助吧。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值