首先我們需要申請到商戶的key密鑰 這個是在
https://pay.weixin.qq.com/index.php/apply/applyment_home/guide_normal#none 微信官方鏈接
詳情請看 https://www.cnblogs.com/wzsoul/p/15538319.html
賬號關聯(AppID綁定)
https://pay.weixin.qq.com/static/pay_setting/appid_protocol.shtml
應用場景 當交易發生之后一段時間內,由於買家或者賣家的原因需要退款時,賣家可以通過退款接口將支付款退還給買家,微信支付將在收到退款請求並且驗證成功之后,按照退款規則將支付款按原路退到買家賬號上。 注意: 1、交易時間超過一年的訂單無法提交退款 2、微信支付退款支持單筆交易分多次退款,多次退款需要提交原支付訂單的商戶訂單號和設置不同的退款單號。申請退款總金額不能超過訂單金額。 一筆退款失敗后重新提交,請不要更換退款單號,請使用原商戶退款單號 3、請求頻率限制:150qps,即每秒鍾正常的申請退款請求次數不超過150次 4、每個支付訂單的部分退款次數不能超過50次 5、如果同一個用戶有多筆退款,建議分不同批次進行退款,避免並發退款導致退款失敗 6、申請退款接口的返回僅代表業務的受理情況,具體退款是否成功,需要通過退款查詢接口獲取結果。 7、一個月之前的訂單申請退款頻率限制為:5000/min
接口地址
接口鏈接:https://api.mch.weixin.qq.com/secapi/pay/refund
我們退款的時候需要注意要准備證書使用,在支付的時候不是必要條件
需要證書
點擊申請證書,跳出生成API證書界面。點擊“允許訪問”,同意網頁訪問剪切板;
三、下載證書工具,在證書工具中點擊“申請證書”按鈕;
四、按照要求填寫商戶信息,點擊下一步;
五、復制請求串到剪切板,在之前的生成API證書界面粘貼,輸入“短信驗證碼”和“登錄密碼”;點擊下一步,進入復制證書串界面。
六、復制證書串到剪切板,在證書工具的粘貼證書串界面,點擊粘貼按鈕。然后進入下一步,生成證書。
七、生成證書之后,找到下載到電腦的證書文件,改個好認的名字發給技術人員,記得保留一個備份。
技術人員獲得證書之后將證書部署到服務器上。也就完成了微信支付與微信公眾號等平台的對接了。
下面是請求時需要的參
由於跟支付的時候調用的一樣 我們這里只寫核心的轉換代碼 詳情請看博客的支付流程
微信需要的是xml格式的數據所以我們必須轉換為對應的格式
$post_data = "<xml> <appid>".$appid."</appid> <body>".$body."</body> <mch_id>".$mch_id."</mch_id> <nonce_str>".$nonce_str."</nonce_str> <notify_url>".$notify_url."</notify_url> <out_trade_no>".$out_trade_no."</out_trade_no> <spbill_create_ip>".$spbill_create_ip."</spbill_create_ip> <total_fee>".$total_fee."</total_fee> <trade_type>".$trade_type."</trade_type> <sign>".$sign."</sign> </xml>";//拼接成XML 格式 // <scene_info>$scene_info</scene_info> // 微信地址 $url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'; $dataxml=$this->posturl($url,$post_data); $reruxml = (array)simplexml_load_string($dataxml, 'SimpleXMLElement', LIBXML_NOCDATA);
//請求接收回來的數據轉換為數組的格式
XML 轉數組
//回調信息 public function wxhd(){ //允許從外部加載XML實體(防止XML注入攻擊) libxml_disable_entity_loader(true); // 用於接收所有的數據 $data=file_get_contents("php://input"); $postObj = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA); //此處 用於變更訂單的支付狀態 或者其他操作 // 下面更新成功的變量(更新數據表) 最后一個 更新字段后 //此處用於返回給微信支付通知,我們也做出相應的修改 if(){ echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>'; } }
function posturl($data, $url){ $ch = curl_init(); //指定URL curl_setopt($ch, CURLOPT_URL, $url); //設定請求后返回結果 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //聲明使用POST方式來進行發送 curl_setopt($ch, CURLOPT_POST, 1); //發送什么數據呢 curl_setopt($ch, CURLOPT_POSTFIELDS, $data); //忽略證書 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //if($is_pem == 1){ curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); //sslCertType curl_setopt($ch,CURLOPT_SSLCERT,'../key/wxpay/apiclient_cert.pem');//證書路徑 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); //sslKeyType curl_setopt($ch,CURLOPT_SSLKEY,'../key/wxpay/apiclient_key.pem');//證書路徑 // } //忽略header頭信息 curl_setopt($ch, CURLOPT_HEADER, 0); //設置超時時間 curl_setopt($ch, CURLOPT_TIMEOUT, 10); //發送請求 $output = curl_exec($ch); //關閉curl curl_close($ch); //返回數據 return $output; }
上面If里面可以填寫 證書路徑地址 附帶的文件 可以以不用IF 直接