10.PHP接入微信退款接口

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 訂單金額 訂單總金額,單位為元,最多兩位小數

發佈留言