今天來說明綠界的「模擬付款」功能
在開發階段,選擇使用「ATM、CVS、BARCODE」等非即時付款方式時
只有等付款成功
[ReturnURL]才會收到綠界回傳交易結果通知
但測試環境的綠界畫面又寫「測試環境請勿實際繳費」
既然不能實際付款
那該怎麼確認我的[ReturnURL]可以收到交易回傳結果?
這時,就可以使用「模擬付款」功能
來確認我的[ReturnURL]可以收到交易回傳結果
接下來就一步步帶大家操作「模擬付款」功能
先寫一個接收程式,並指定接收到綠界回傳後另存為文件
<?php
// 取得 IP 地址
function getClientIP() {
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
// 付款結果通知
try {
date_default_timezone_set('Asia/Taipei');
// 寫入檔案
if (true) {
$sLog_Path = __DIR__ . '/sample_payment_returnURL' . date('Ymd') . '.log'; // LOG路徑
$sLog = '+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 ' . date('Y-m-d H:i:s') . ' ++++++++++++++++++++++++++++++++++++++++++++' . "\n";
$fp = fopen($sLog_Path, "a+");
fputs($fp, $sLog);
fclose($fp);
// 紀錄來源IP
$clientIP = getClientIP();
$sLog_IP = '來源IP: ' . $clientIP . "\n";
$fp = fopen($sLog_Path, "a+");
fputs($fp, $sLog_IP);
fclose($fp);
// 紀錄請求方法
$requestMethod = $_SERVER['REQUEST_METHOD'];
$sLog_Method = '請求方法: ' . $requestMethod . "\n";
$fp = fopen($sLog_Path, "a+");
fputs($fp, $sLog_Method);
fclose($fp);
// 紀錄回傳的參數
$sLog_File = file_get_contents("php://input") . "\n";
$fp = fopen($sLog_Path, "a+");
fputs($fp, $sLog_File);
fclose($fp);
}
echo '1|OK';
} catch (Exception $e) {
if (true) {
$sLog_Path = __DIR__ . '/sample_payment_return' . date('Ymd') . '.log'; // LOG路徑
$sLog = '+++++++++++++++++++++++++++++++++++++++ 接收回傳參數(ERROR) ' . date('Y-m-d H:i:s') . ' ++++++++++++++++++++++++++++++++++++++++++++' . "\n";
$fp = fopen($sLog_Path, "a+");
fputs($fp, $sLog);
fclose($fp);
$sLog_File = '0|' . $e->getMessage() . "\n";
$fp = fopen($sLog_Path, "a+");
fputs($fp, $sLog_File);
fclose($fp);
}
}
?>
這點非常重要
如果你的接收程式沒有對外,使用的是localhost,綠界會連不上哦
這裡使用ngrok將接收程式對外
https://74d9-211-23-76-78.ngrok-free.app/hi/ReturnURL.php
這裡用「全方位金流」規格示範(站內付2.0操作流程相同)
建立一張付款方式使用ATM的訂單
同時設定ReturnURL
"MerchantID" => "3002607",
"ReturnURL" => "https://74d9-211-23-76-78.ngrok-free.app/hi/ReturnURL.php",
"ChoosePayment" => "ATM",
成功取號後
記下「訂單編號= ECPaytest1725937423」
登入綠界測試廠商管理後台如下位置:
按下「模擬付款」按鈕後
會跳出提醒:
再次按下確定後
若綠界有收到[ReturnURL]正確回覆1|OK
就會顯示模擬付款成功:
這時,在到我指定的檔案儲存位置查看
就可以找到綠界回傳的模擬付款payload:
PaymentType=ATM_CHINATRUST&RtnMsg=付款成功&SimulatePaid=1&CustomField2=&PaymentDate=2024/09/10 11:09:09&TradeNo=2409101103447469&TradeAmt=100&MerchantID=3002607&StoreID=&CustomField3=&MerchantTradeNo=ECPaytest1725937423&CustomField4=&CheckMacValue=08B378E1D90CADE7244FC1FE77A32D11D6513D0E3B2BD84F24A9509829A3977E&TradeDate=2024/09/10 11:03:44&CustomField1=&RtnCode=1&PaymentTypeChargeFee=0
這樣就算完成整個模擬付款流程囉
接下來說明幾個模擬付款的注意事項:
使用模擬付款時,綠界回傳的payload會有一個SimulatePaid=1
代表此為模擬付款的交易
如果你收到的payload含有[SimulatePaid=1]
切記不要進行出貨!
在進行模擬付款時,綠界Alert也有說明哦
延續第一點的注意事項
模擬付款成功後並不會變更原訂單的「付款狀態」
可以看到
這張完成模擬付款的訂單
「付款狀態」仍是未付款
所以真的不要不要不要出貨
這裡也再提醒一次
「模擬付款」功能
是拿來測試自己的ReturnURL能不能收到綠界的交易結果通知
以及自己的ReturnURL有沒有正確回傳1|OK
不是拿來改變訂單「付款狀態」的哦
以下有幾個可能會收到如下的訊息:
例如我上面的ReturnURL,正確的回傳方式是
echo '1|OK';
如果改為:
echo 'OK';
就會收到綠界提醒囉
以上,就是綠界完整的「模擬付款」流程
各位再自己玩玩看吧
我們明天見