前言
之前App对接支付时没有对超时时间进行限制,导致在某些特殊情况下,我们平台的订单已经关闭了用户还可以支付成功。
支付宝
官方文档链接
https://opendocs.alipay.com/open/02e7gq?scene=20
发起支付时加上这个参数time_expire,格式为yyyy-MM-dd HH:mm:ss
image.png
上代码(具体超时时间根据自己业务而定)
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
//绝对超时时间(十分钟)
String afterMinDate = DateUtil.getAfterMinDate(10);
model.setTimeExpire(afterMinDate);
/**
* 获取几分钟后的时间
* @param min
* @return
*/
public static String getAfterMinDate(Integer min){
Date date = new Date();
Date newDate = new Date(date.getTime() + 60000*min);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formatDate = dateFormat.format(newDate);
return formatDate;
}
微信
官方文档链接
https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_2_1.shtml
发起支付时加上这个参数time_expire,格式为2018-06-08T10:34:56+08:00 此处千万别弄错
image.png
上代码(具体超时时间根据自己业务而定)
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("time_expire", DateUtil.getWxAfterMinDate(10));
/**
* 获取几分钟后的时间
* @param min
* @return
*/
public static String getWxAfterMinDate(Integer min){
//过期时间 RFC 3339格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
//支付订单过期时间
String timeExpire = sdf.format(new Date(System.currentTimeMillis() + 60000*min));
return timeExpire;
}