payment 項目2.0版本
微信的退款操作,通過封裝與前面支付寶退款除瞭配置文件,基本一樣。
退款代碼如下:
use Payment\RefundContext; use Payment\Common\PayException; use Payment\Config; // 生成退款單號 便於測試 function createPayid() { return date('Ymdhis', time()).substr(floor(microtime()*1000),0,1).rand(0,9); } $config = [ 'app_id' => 'wxa244db59a34996fc', // 公眾賬號ID 'mch_id' => '1331302101',// 商戶id 'md5_key' => 'adslkfjiKQJLAIQLJ393201482333333',// md5 秘鑰 'notify_url' => 'https://test.helei.com/pay-notify.html', 'time_expire' => '14', // 涉及資金流動時 退款 轉款,需要提供該文件 'cert_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem', 'key_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_key.pem', ]; // 退款數據 $reundData = [ 'refund_no' => createPayid(), 'refund_data' => [ ['transaction_id' => '4007572001201607098672633287', 'amount' => '5', 'refund_fee' => '5', 'reason' => '微信測試金額退款'], ], ]; $refund = new RefundContext(); try { // 微信退款 $type = Config::WEIXIN; $refund->initRefund(Config::WEIXIN, $wxconfig); $ret = $refund->refund($reundData); } catch (PayException $e) { echo $e->errorMessage();exit; } var_dump($ret);
當前sdk支付寶可一次退款多筆數據。微信僅能每次退款1筆(如果想要實現一次退訂多筆訂單,可在客戶端通過循環來處理。)
接下來解釋下相關的配置信息
請求參數
參數 | 參數名 | 參數說明 | 是否必須 |
---|---|---|---|
transaction_id | 微信交易號 | 微信系統中的交易流水號,可用於查詢訂單狀態 | 是 |
amount | 總金額 | 微信交易對應的交易總金額 | 是 |
refund_fee | 退款金額 | 本次申請的退款金額,退款金額不能大於總金額 | 是 |
reason | 退款理由 | 退款的理由,可在用戶端查看到 | 是 |
響應數據
參數 | 參數名 | 參數說明 | 是否必須 |
---|---|---|---|
is_success | 成功標識 | 請求是否成功,T:成功,F:失敗 | 是 |
error | 錯誤提示 | 隻有is_success=F時才返回 | 否 |
response | 響應數據 | 查詢成功後返回的數據,一個數組,is_success=T時返回 | 否 |
response 數據描述
參數 | 參數名 | 參數說明 | 是否必須 |
---|---|---|---|
transaction_id | 微信訂單號 | 微信訂單號,下單成功後,微信返回 | 是 |
order_no | 商戶訂單號 | 商戶系統內部的訂單號 | 是 |
refund_no | 商戶退款單號 | 商戶退款單號 | 是 |
refund_id | 微信退款單號 | 微信退款單號 | 是 |
refund_fee | 申請退款金額 | 退款總金額,單位為元(已被我處理),可以做部分退款 | 否 |
amount | 訂單金額 | 訂單總金額,單位為元,最多兩位小數 | 否 |