前面我们已经完成了微信支付的正常下单,并且能够正常收款。如果用户在支付过程中放弃了购买行为,那么为了保证订单正确,微信官方要求我们关闭订单,据我测试关不关都没多大影响,可能运气好,哈哈。在开发中切记不能抱有侥幸心理,特别是涉及到钱的事儿,一定要谨慎,严格按照官方要求去做。下面来学习下如果关闭微信支付订单吧,本文接前面教程,不清楚的地方自己去看。
商户订单支付失败需要生成新单号重新发起支付,要对原订单号调用关单,避免重复支付;系统下单后,用户支付超时,系统退出不再受理,避免用户继续,请调用关单接口。
注意:订单生成后不能马上调用关单接口,最短调用时间间隔为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文件,里面记录了本次请求的结果。如果发生错误,可以通过阅读该文件中的记录内容进行排查!






评论 (3)