簡單介紹了微信退款的請求處理和一些注意事項php
系列一 微信App支付全解析
系列二 支付寶App支付全解析
系列三 微信公衆號支付全解析
系列四 微信掃碼支付全解析
系列五 支付寶即時到帳支付全解析
系列六 微信退款全解析
系列七 支付寶退款全解析
系列八 支付寶開放平臺支付更新升級全解析api
官方接口文檔安全
當交易發生以後一段時間內,因爲買家或者賣家的緣由須要退款時,賣家能夠經過退款接口將支付款退還給買家,微信支付將在收到退款請求而且驗證成功以後,按照退款規則將支付款按原路退到買家賬號上。微信
注意:app
須要證書驗證。證書下載:
用於退款等一些須要證書驗證的接口使用。在微信商戶平臺點擊「帳戶中心 - API 安全」,點擊「下載證書」dom
證書下載後,打開壓縮包會看到「apiclient_cert.pem」和「apiclient_key.pem」和rootca.pem證書。curl
$appid = ""; //你的appid
$mch_id = ""; //商戶id
$wx_api_key = ""; //商戶api祕鑰
$out_trade_no = ""; //待退款交易的業務交易號
$out_refund_no = ""; //業務生成的惟一退款單號
$total_fee = "1"; //待退款交易的總金額
$refund_fee = "1"; //退款金額 單位分
$REFUND_URL = "https://api.mch.weixin.qq.com/secapi/pay/refund"; //退款
$data = array();
$data['appid'] = $appid;
$data['mch_id'] =$mch_id;
$data['nonce_str'] = randomStr(20); //隨機20位字符串
$data['out_trade_no'] = $out_trade_no;
$data['out_refund_no'] = $out_refund_no;
$data['total_fee'] = $total_fee;
$data['refund_fee'] = $refund_fee;
$data['op_user_id'] = mch_id;
$data['sign'] =sign($data, $wx_api_key); //簽名
//轉爲xml格式
$xml_str = arrayToXmlStr($data);
//證書設置
$opt_arr = array(
CURLOPT_SSLCERT => "../" . $config['wx_pemcert'],
CURLOPT_SSLKEY => "../" . $config['wx_pemkey'],
CURLOPT_CAINFO => "../key/wx_rootca.pem");
//發送請求 使用封裝好的curl_post
$result = Curl::curl_post($REFUND_URL, $xml_str, $opt_arr);
//解析獲得的值
$get_data = simplexml_load_string($raw_data, 'SimpleXMLElement', LIBXML_NOCDATA);
$get_para = array();
$get_sign = "";
foreach ($get_data->children() as $child)
{
if($child->getName() == 'sign') {
$get_sign = strval($child);
} else {
$get_para[strval($child->getName())] = strval($child);
}
}
if($get_para['return_code'] !== "SUCCESS") {
//return code fail
}
//驗證簽名
if(!verifySign($get_sign, $get_para, $wx_api_key)) {
//驗證簽名非法
}
//驗證result code
if($get_para['result_code'] !== 'SUCCESS') {
//申請失敗
}
//退款申請成功
//todo複製代碼
因爲微信退款會根據支付渠道而到帳時間不一樣,全部微信自己不提供到帳回調。
退款申請成功並不能表明到帳成功,全部業務方須要定時調用查詢退款狀態。
通常零錢和銀行卡支付的20分鐘內到帳,信用卡會2-3天到帳。post
因此我設置的定時任務是分別在退款申請成功後的15s 2min 20min 1day 1day 2day 2day頻率進行退款查詢。微信支付
官方接口文檔url
$appid = ""; //你的appid
$mch_id = ""; //商戶id
$wx_api_key = ""; //商戶api祕鑰
$out_refund_no = ""; //待查詢的退款單號
$REFUND_QUERY_URL = "https://api.mch.weixin.qq.com/pay/refundquery"; //退款查詢
$data = array();
$data['appid'] = $appid;
$data['mch_id'] =$mch_id;
$data['nonce_str'] = randomStr(20); //隨機20位字符串
$data['out_refund_no'] = $out_refund_no;
$data['sign'] =sign($data, $wx_api_key); //簽名
//轉爲xml格式
$xml_str = arrayToXmlStr($data);
//發送請求 使用封裝好的curl_post
$result = Curl::curl_post($REFUND_QUERY_URL, $xml_str);
//解析獲得的值
$get_data = simplexml_load_string($raw_data, 'SimpleXMLElement', LIBXML_NOCDATA);
$get_para = array();
$get_sign = "";
foreach ($get_data->children() as $child)
{
if($child->getName() == 'sign') {
$get_sign = strval($child);
} else {
$get_para[strval($child->getName())] = strval($child);
}
}
if($get_para['return_code'] !== "SUCCESS") {
//return code fail
}
//驗證簽名
if(!verifySign($get_sign, $get_para, $wx_api_key)) {
//驗證簽名非法
}
//驗證result code
if($get_para['result_code'] !== 'SUCCESS') {
//退款失敗記錄log
//todo
}
//退款成功 修改退款狀態
//todo複製代碼
更多文章關注個人公衆號