重要:本文最后更新于2019-06-01 08:22:14,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗。
前面我们已经完成了微信支付的正常下单,并且能够正常收款。如果用户在支付过程中放弃了购买行为,那么为了保证订单正确,微信官方要求我们关闭订单,据我测试关不关都没多大影响,可能运气好,哈哈。在开发中切记不能抱有侥幸心理,特别是涉及到钱的事儿,一定要谨慎,严格按照官方要求去做。下面来学习下如果关闭微信支付订单吧,本文接前面教程,不清楚的地方自己去看。
商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
注意:订单生成后不能马上调用关单接口,最短调用时间间隔为5分钟。
微信支付-关闭订单
接口地址:https://api.mch.weixin.qq.com/pay/closeorder
是否需要证书:否
文档地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_3
请求参数:
字段名
变量名
必填
类型
公众账号ID
appid
是
String(32)
商户号
mch_id
是
String(32)
商户订单号
out_trade_no
是
String(32)
随机字符串
nonce_str
是
String(32)
签名
sign
是
String(32)
签名类型
sign_type
否
String(32)
返回结果
字段名
变量名
必填
类型
返回状态码
return_code
是
String(16)
返回信息
return_msg
是
String(128)
更多返回信息自己看文档,以后就不多介绍了。
PHP关闭微信订单源码
//关闭订单
public function closeorder($order){
$apiparams=[
'appid'=>self::appid,
'mch_id'=>self::mch_id,
'out_trade_no'=>$order,
'nonce_str'=>Util::getNonceStr(),
];
$apiparams['sign']=$this->GetSign($apiparams);
$xml=Util::ArrToXml($apiparams);
$result=Util::postXmlCurl($xml,'https://api.mch.weixin.qq.com/pay/closeorder');
$arr=Util::XmlToArr($result);
if($arr['return_code']=='SUCCESS'){
file_put_contents('./log.txt',$result);
return 'success';
}else{
file_put_contents('./error.txt',$result);
return false;
}
}
这段源码是接前面写的支付类的,把这个关闭订单方法放进支付类中进行调用即可。该方法执行结果将会在当前文件夹中生成一个log.txt文件,里面记录了本次请求的结果。如果发生错误,可以通过阅读该文件中的记录内容进行排查!