按照常理說(shuō),在微信支付商戶平臺(tái)中,是無(wú)法查詢到退款的信息的,但是想要實(shí)現(xiàn)的話又不是不可能哦,那么微信支付商戶平臺(tái)查詢退款怎么實(shí)現(xiàn)?大家跟著小編來(lái)看看實(shí)現(xiàn)的方法和一些代碼吧。
微信支付商戶平臺(tái)查詢退款怎么實(shí)現(xiàn)?
一.證書的配置與下載
路徑下載:微信商戶平臺(tái)(pay.weixin.qq.com)-->賬戶設(shè)置-->API安全-->證書下載 。證書文件有四個(gè),全部下載即可。
二.配置參數(shù)
[php] view plain copyarray(
'appid'=>'your_appid',//應(yīng)用ID,固定
'mch_id'=>'your_mch_id',//商戶號(hào),固定
'nonce_str'=>'123456',//隨機(jī)字符串
'op_user_id'=>'646131',//操作員
'out_refund_no'=>'201608142308',//商戶內(nèi)部唯一退款單號(hào)
'out_trade_no'=>'860524080535541654',//商戶訂單號(hào),pay_sn碼 1.1二選一,微信生成的訂單號(hào),在支付通知中有返回
// 'transaction_id'=>'1',//微信訂單號(hào) 1.2二選一,商戶側(cè)傳給微信的訂單號(hào)
'refund_fee'=>'3',//退款金額
'total_fee'=>'3',//總金額
'sign'=>$ref//簽名
);
三.注意事項(xiàng)
常見問(wèn)題:
1. 本接口是需要證書的,下載放上見上邊
2. 微信的接口里,所有對(duì)金額的描述,都是以分為單位的
3.交易時(shí)間超過(guò)一年的訂單無(wú)法提交退款;
4.微信支付退款支持單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號(hào)和設(shè)置不同的退款單號(hào)。一筆退款失敗后重新提交,要采用原來(lái)的退款單號(hào)??偼丝罱痤~不能超過(guò)用戶實(shí)際支付金額。
5.在用下邊demo做測(cè)試的時(shí)候,請(qǐng)先真實(shí)支付一次,獲取相應(yīng)的ID與參數(shù),然后直接運(yùn)行調(diào)試即可,僅供參考
6.注意下簽名規(guī)則
7.CURL 返回值為58
答:證書路徑問(wèn)題,證書路徑應(yīng)該為物理全路徑,getcwd().'/apiclient_cert.pem'這種寫法 或者自己函數(shù)獲取
8.CURL 返回值為77
答:證書問(wèn)題,重新下載證書,按照配置對(duì)應(yīng)放在生產(chǎn)路徑,同上一條,用全的物理路徑。
原因:out_trade_no錯(cuò)誤【out_trade_no為自己系統(tǒng)生產(chǎn)的支付碼】
原因:out_trade_no不存在,也是就說(shuō)沒有這筆支付號(hào)
demo源碼
/*
請(qǐng)確保您的libcurl版本是否支持雙向微信認(rèn)證,版本高于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',//應(yīng)用ID,固定
'mch_id'=>'your_mch_id',//商戶號(hào),固定
'nonce_str'=>'123456',//隨機(jī)字符串
'op_user_id'=>'646131',//操作員
'out_refund_no'=>'201608142308',//商戶內(nèi)部唯一退款單號(hào)
'out_trade_no'=>'860524080535541654',//商戶訂單號(hào),pay_sn碼 1.1二選一,微信生成的訂單號(hào),在支付通知中有返回
// 'transaction_id'=>'1',//微信訂單號(hào) 1.2二選一,商戶側(cè)傳給微信的訂單號(hào)
'refund_fee'=>'3',//退款金額
'total_fee'=>'3',//總金額
'sign'=>$ref//簽名
);
$url="https://api.mch.weixin.qq.com/secapi/pay/refund";;//微信退款地址,post請(qǐng)求
$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){ //返回來(lái)的是xml格式需要轉(zhuǎn)換成數(shù)組再提取值,用來(lái)做更新
curl_close($ch);
var_dump($data);
}else{
$error=curl_errno($ch);
echo "curl出錯(cuò),錯(cuò)誤代碼:$error"."
";
echo ";錯(cuò)誤原因查詢
";
curl_close($ch);
echo false;
}
}
function arrayToXml($arr){
$xml = "";
foreach ($arr as $key=>$val){
if(is_array($val)){
$xml.="<".$key.">".arrayToXml($val)."";
}else{
$xml.="<".$key.">".$val."";
}
}
$xml.="";
return $xml ;
}
Home_index();
以上是微信支付商戶平臺(tái)查詢退款實(shí)現(xiàn)的方法了,需要開發(fā)出來(lái)哦,如果你只是一個(gè)普通的微信商戶,那么可能就不會(huì)操作了,這需要專業(yè)的人士去進(jìn)行開發(fā)哦。十分歡迎你來(lái)開淘網(wǎng)了解相關(guān)內(nèi)容。
推薦閱讀:
微信支付商戶平臺(tái)登錄超時(shí)是什么原因?如何解決?
查看更多相似文章