微信退款處理
阿新 • • 發佈:2019-01-29
http://blog.csdn.net/ty_hf/article/details/52565321
<?php /* 請確保您的libcurl版本是否支援雙向認證,版本高於7.20.1 */ function Home_index(){ $ref= strtoupper(md5("appid=your_appid&mch_id=your_mch_id&nonce_str=123456&op_user_id=646131" . "&out_refund_no=201608142308&out_trade_no=860524080535541654&refund_fee=3&total_fee=3" . "&key=suiji123"));//sign加密MD5 $refund=array( 'appid'=>'your_appid',//應用ID,固定 'mch_id'=>'your_mch_id',//商戶號,固定 'nonce_str'=>'123456',//隨機字串 'op_user_id'=>'646131',//操作員 'out_refund_no'=>'201608142308',//商戶內部唯一退款單號 'out_trade_no'=>'860524080535541654',//商戶訂單號,pay_sn碼 1.1二選一,微信生成的訂單號,在支付通知中有返回 // 'transaction_id'=>'1',//微信訂單號 1.2二選一,商戶側傳給微信的訂單號 'refund_fee'=>'3',//退款金額 'total_fee'=>'3',//總金額 'sign'=>$ref//簽名 ); $url="https://api.mch.weixin.qq.com/secapi/pay/refund";;//微信退款地址,post請求 $xml=arrayToXml($refund); $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER,1); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,1);//證書檢查 curl_setopt($ch,CURLOPT_SSLCERTTYPE,'pem'); curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/cert/apiclient_cert.pem'); curl_setopt($ch,CURLOPT_SSLCERTTYPE,'pem'); curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/cert/apiclient_key.pem'); curl_setopt($ch,CURLOPT_SSLCERTTYPE,'pem'); curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cert/rootca.pem'); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); $data=curl_exec($ch); if($data){ //返回來的是xml格式需要轉換成陣列再提取值,用來做更新 curl_close($ch); var_dump($data); }else{ $error=curl_errno($ch); echo "curl出錯,錯誤程式碼:$error"."<br/>"; echo "<a href='http://curl.haxx.se/libcurl/c/libcurs.html'>;錯誤原因查詢</a><br/>"; curl_close($ch); echo false; } } function arrayToXml($arr){ $xml = "<root>"; foreach ($arr as $key=>$val){ if(is_array($val)){ $xml.="<".$key.">".arrayToXml($val)."</".$key.">"; }else{ $xml.="<".$key.">".$val."</".$key.">"; } } $xml.="</root>"; return $xml ; } Home_index();
四.退款查詢介面
如果上述退款調通了的話,那這個介面更簡單了,只要把上述demo的引數換成退款查詢的引數即可,這裡就不贅述了
官方文件地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_5
[php]view plaincopyprint?- $url = https://api.mch.weixin.qq.com/pay/refundquery
請求引數
欄位名 | 變數名 | 必填 | 型別 | 示例值 | 描述 |
---|---|---|---|---|---|
公眾賬號ID | appid | 是 | String(32) | wx8888888888888888 | 微信分配的公眾賬號ID(企業號corpid即為此appId) |
商戶號 | mch_id | 是 | String(32) | 1900000109 | 微信支付分配的商戶號 |
裝置號 | device_info | 否 | String(32) | 013467007045764 | 商戶自定義的終端裝置號,如門店編號、裝置的ID等 |
隨機字串 | nonce_str | 是 | String(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | 隨機字串,不長於32位。推薦隨機數生成演算法 |
簽名 | sign | 是 | String(32) | C380BEC2BFD727A4B6845133519F3AD6 | |
微信訂單號 | transaction_id | 四選一 | String(32) | 1217752501201407033233368018 | 微信訂單號 |
商戶訂單號 | out_trade_no | String(32) | 1217752501201407033233368018 | 商戶系統內部的訂單號 | |
商戶退款單號 | out_refund_no | String(32) | 1217752501201407033233368018 | 商戶側傳給微信的退款單號 | |
微信退款單號 | refund_id | String(28) | 1217752501201407033233368018 |
微信生成的退款單號,在申請退款介面有返回 |
舉例如下:
<xml>
<appid>wx2421b1c4370ec43b</appid>
<mch_id>10000100</mch_id>
<nonce_str>0b9f35f484df17a732e537c37708d1d0</nonce_str>
<out_refund_no></out_refund_no>
<out_trade_no>1415757673</out_trade_no>
<refund_id></refund_id>
<transaction_id></transaction_id>
<sign>66FFB727015F450D167EF38CCC549521</sign>
</xml>