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