iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0
自我挑戰組

串接綠界服務的疑難雜症詳解系列 第 15

【綠界金流】URL百科 - PaymentInfoURL 與 ClientRedirectURL

  • 分享至 

  • xImage
  •  

前兩天說明了ReturnURL、OrderResultURL
這兩種是屬於「交易完成」後回傳

今天來說說PaymentInfoURL與ClientRedirectURL
這兩種是專屬於「非即時付款」方式回傳的URL

非即時付款有哪些?
ATM、CVS(超商代碼)、BARCODE(超商條碼)、無卡分期這四種
非即時付款方式,會讓消費者先進行取號

例如
選擇ATM付款後,綠界會回傳一組虛擬帳號
並傳送至你的PaymentInfoURL與ClientRedirectURL
PaymentInfoURL與ClientRedirectURL收到綠界回傳的帳號後
再自行於網站前端畫面顯示ATM帳號

消費者取得ATM繳款帳號後,至ATM櫃員機進行繳費
等銀行確認付款完成,綠界會再回傳付款結果通知至ReturnURL、OrderResultURL

這樣有清楚[ReturnURL、OrderResultURL]和[PaymentInfoURL、ClientRedirectURL]的差別了嗎

還沒付款,只是先取得付款帳號會回傳到[PaymentInfoURL、ClientRedirectURL]
交易完成,不管成功或失敗,就會回傳到[ReturnURL、OrderResultURL]

小提醒,非即時付款的交易結果通知不支援OrderResultURL

弄清楚這兩大類的差異後

今天我們來細說PaymentInfoURL、ClientRedirectURL吧

PaymentInfoURL、ClientRedirectURL這兩者的關係和ReturnURL、OrderResultURL有點像
一個是後端接收(Server): PaymentInfoURL
一個是前端接收(Client): ClientRedirectURL

為了方便說明,下面會主要以消費者「選擇ATM付款方式」進行解釋
那我們開始吧!


PaymentInfoURL

當消費者選擇ATM付款,綠界會以後端回傳方式
回傳一組ATM虛擬帳號至[PaymentInfoURL]

實際操作一次
先寫一個接收回傳的程式

<?php
    // 接收回傳
    try {
		date_default_timezone_set('Asia/Taipei');
            // 參數寫入檔案
            if(true)
            {
                $sLog_Path  = __DIR__.'/PaymentInfoURL'. date('Ymd') .'.log' ; // LOG路徑
                $sLog = '+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 ' . date('Y-m-d H:i:s') . ' ++++++++++++++++++++++++++++++++++++++++++++' . "\n";
                $fp=fopen($sLog_Path, "a+");
                fputs($fp, $sLog);
                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);
        }
	  }
 ?>

用ngrok對外

https://1acd-211-23-76-78.ngrok-free.app/hi/PaymentInfoURL.php

完成取號
https://ithelp.ithome.com.tw/upload/images/20240910/20168877yshRHkHH5z.png

綠界就會回傳ATM繳費帳號到你的[PaymentInfoURL]

+++++++++++++++++++++++++++++++++++++++ 接收回傳參數 2024-09-09 10:12:16 ++++++++++++++++++++++++++++++++++++++++++++
BankCode=007&ExpireDate=2024/09/12&MerchantID=3002607&MerchantTradeNo=ECPaytest1725847915&PaymentType=ATM_FIRST&RtnCode=2&RtnMsg=Get VirtualAccount Succeeded&TradeAmt=100&TradeDate=2024/09/09 10:12:15&TradeNo=2409091011583905&vAccount=1057642568427609&StoreID=&CustomField1=&CustomField2=&CustomField3=&CustomField4=&CheckMacValue=605027D9FABB1F6ABE67A79D0F5C77490B0B4ED591DEF942E5455FD75280D423

收到之後記得驗算[CheckMacValue]是否相符(站內付2.0不用)
確認無誤後還要記得回傳1|OK
不然一樣會觸發綠界的重發機制


ClientRedirectURL

當消費者選擇ATM付款,綠界會以前端回傳方式
回傳一組ATM虛擬帳號,並同時「自動」轉跳至[ClientRedirectURL]

實際操作一次

先寫一個接收回傳的前端程式
也就是你希望消費者返回你網站時想要看到的頁面
並處理接收到的payload
可以這樣寫:

<!DOCTYPE html>
<html lang="zh-TW">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>訂單確認</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f4f4f4;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
    }
    .container {
      background-color: #fff;
      padding: 20px;
      border-radius: 10px;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
      text-align: center;
    }
    h1 {
      color: #4CAF50;
    }
  </style>
</head>
<body>
  <div class="container">
    <h1>我們已經收到你的訂單</h1>
    <?php
    // 接收來自 POST 請求的資料
    $bankCode = isset($_POST['BankCode']) ? htmlspecialchars($_POST['BankCode']) : '無資料';
    $vAccount = isset($_POST['vAccount']) ? htmlspecialchars($_POST['vAccount']) : '無資料';
    
    // 顯示接收到的資料
    echo "<p>銀行代碼: $bankCode</p>";
    echo "<p>銀行帳號: $vAccount</p>";
    ?>
  </div>
</body>
</html>

之後用ngrok對外

https://1acd-211-23-76-78.ngrok-free.app/hi/ClientRedirectURL.php

完成取號後,綠界就會協助轉跳至你的[ClientRedirectURL]並回傳取號結果囉
https://ithelp.ithome.com.tw/upload/images/20240910/201688772dz1L3330B.png

是不是很簡單呢


以上就是今天介紹的PaymentInfoURL與ClientRedirectURL
有任何問題都可以下面留言分享唷

我們明天見


上一篇
【綠界金流】URL百科 - OrderResultURL
下一篇
【綠界金流】URL百科 - ClientBackURL
系列文
串接綠界服務的疑難雜症詳解30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言