大家在串接綠界金流的時候
一定會發現文件內出現了各種URL參數
有些是必填
有些是選填
到底這些URL有甚麼用呢?
這些參數主要就是用來「接收」綠界回傳的交易結果通知
你必須在這些URL內帶入你的接收API
並且必須要將這些API對外 也就是讓綠界連得上
才有辦法成功收到交易結果通知
接下來的幾天就來帶大家了解各種URL的功能吧
ReturnURL算是綠界金流裡最重要的一個了
它主要是用來「後端接收」綠界回傳交易結果通知
換句話說,當消費者完成交易後
不管是成功或失敗,綠界會以Server POST(後端)的方式,傳送交易結果至你的server
也就是當初你填的[ReturnURL]內
(若沒有完成交易,例如沒有填信用卡號直接關閉頁面,就不會回傳交易結果囉)
這樣說好了
假設,我寫了一支後端接收的程式,並用ngrok對外
https://552c-211-23-76-78.ngrok-free.app/hi/ReturnURL.php
那在呼叫「建立訂單」API時,
就要帶入
ReturnURL=>'https://552c-211-23-76-78.ngrok-free.app/hi/ReturnURL.php'
等消費者結束交易後
綠界會用Server POST的方式,將交易結果傳送至你的[ReturnURL]
至於收到交易結果後要做甚麼邏輯處理,就要寫你的[ReturnURL]裡面
舉例
我的[ReturnURL]在收到綠界回傳的payload後
想要把接收到的payload存成文字檔,那就可以這樣寫
<?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);
}
}
?>
所以當消費者完成付款,綠界呼叫我的[ReturnURL]後
就可以在我指定的位置找到綠界傳給我的payload囉!
以上的ReturnURL僅供參考
大家再依照自己的程式邏輯
看是要寫進資料庫或是進行其他操作
都可以自行修改
這裡提供幾個ReturnURL的注意事項:
如果你的ReturnURL有指定port,
例如指定3300 port
https://sample.app:3300/hi/ReturnURL.php
就會收不到綠界回傳交易結果囉
在你的ReturnURL收到綠界通知後有兩件事必須要做:
驗證綠界回傳通知內的CheckMacValue是否正確
驗證方式之前文章有提過
必須先將回傳參數中的CheckMacValue移除
將剩餘的所有參數與參數值進行驗算
得出的結果要和先前移除的[CheckMacValue]一致才可以哦
回傳1|OK
當驗算CheckMacValue無誤
確認是綠界回傳的payload後
記得要回傳1|OK給綠界
綠界會依此訊息判斷你是否有收到回傳
如果回錯格式就會觸發綠界的「重發機制」囉
至於甚麼是重發機制,以及可能造成的影響
等後面介紹到「模擬付款」的篇章再詳細介紹
以上,就是今天的「ReturnURL」介紹
有任何問題都可以底下留言
我們明天見