Hoyo 教你串金流 – 綠界

Hoyo 提供原廠都沒有的測試工具

下載綠界串接文件

需要下載 「全方位金流 API 技術文件」以及「PHP SDK」

撰寫文件時為 2018-6-29 , API 文件版本 5.1.17

流程

雖然金流 API 文件第 2 章有交易流程說明,可是第一次使用看懂的機率是極低的,所以 Hoyo 另外整理為

  1. 送出一個訂單表單送到「介接路徑」
  2. 準備接收綠界付款結果的資訊

訂單表單

網頁表單 – f.html

  • MerchantTradeNo : 訂單編號,一個編號只能用一次,所以針對實際情況不能直接將網站的訂單編號送出,必須使用一個對應的變動編號,這個問題後面再討論
  • ReturnURL : 必須要可以對外訪問的網址,所以沒有自己的網站是不能接線上支付 (沒有意義)
  • MerchantID : 測試的商家 value 都要根據 API 文件設定
  • HashKey 同上
  • HashIV 同上

送給 PHP 計算 CheckMacValue – Ecpay.php

  • PHP 的作用只有計算 CheckMacValue 這個值之後附加到表單再送到綠界
  • 送出之後的所有錯誤綠界都會清楚的回應

接收付款結果資訊

payEcpay.php

  • 根據回傳格式說明,至少要成功支付以及驗證碼正確才進行後續處理,否則可能是造假回傳資訊

模擬綠界回傳表單

可以自己設計表單模擬綠界回傳送出資訊,方便接收除錯

綠界回傳資訊

使用 print_r($_POST); 把回傳資訊展開大概就是長這樣

6 thoughts on “Hoyo 教你串金流 – 綠界

  1. 您好,真的謝謝您的分享!!!
    因為自學的初學者,有一些觀念還不是很清楚。能否想請教一下~
    在接收付款資訊的payEcpay.php頁面。
    其他的像TradeNo,StoreExpireDate等等,是不是都可以透過以下的方式抓取:
    $TradeNo=$_POST[TradeNo’]; //綠界的交易編號
    $StoreExpireDate=$_POST[‘StoreExpireDate’]; //超商繳費截止時間
    $vAccount=$_POST[‘vAccount’]; //ATM繳費虛擬帳號

    $TradeNo、$TradeAmt等變數,目的用來做資料庫的記錄及儲存….。

  2. 可以,其實綠界就是根據我們設定的回傳網址送回「一個表單」給我們,是 POST 過來的

    我在更新一個回傳「長的樣子」,這樣就可以知道會回傳哪些資訊

  3. 版主您好,謝謝您的回覆!!!
    透由您的分享教學,很開心OrderResultURL、ClientRedirectURL客戶端畫面都正常顯示出訂單資訊。

    另外,想再請教您一下,自己在ReturnURL遇到的bug。

    您提供的範例ReturnURL,我有修改測試一下:
    —————————————————————————————————————
    …前面都一樣,省略沒有貼出來。

    // 計算出 CheckMacValue
    $CheckMacValue = ECPay_CheckMacValue::generate( $arParameters, ECPay_HashKey, ECPay_HashIV );

    //★★★★★★回傳資訊列表★★★★★★我自己加的…..

    $MerchantID = $_POST[‘MerchantID’]; //特店編號
    $MerchantTradeNo = $_POST[‘MerchantTradeNo’]; //特店交易編號 我方自己產生的訂單編號
    $RtnCode = $_POST[‘RtnCode’]; //付款狀態 成功是1
    $RtnMsg = $_POST[‘RtnMsg’]; //付款狀態描述
    $TradeNo = $_POST[‘TradeNo’]; //綠界的交易編號
    $TradeAmt = $_POST[‘TradeAmt’]; //交易金額
    $PaymentDate = $_POST[‘PaymentDate’]; //付款成功時間
    $PaymentType = $_POST[‘PaymentType’]; //付款方式
    $PaymentTypeChargeFee = $_POST[‘PaymentTypeChargeFee’]; //通路費(綠界收取)
    $TradeDate = $_POST[‘TradeDate’]; //交易時間 訂單成立時間

    // 必須要支付成功並且驗證碼正確
    if ( $_POST[‘RtnCode’] ==’1′ && $CheckMacValue == $_POST[‘CheckMacValue’] ){

    //★★★★★★更新資料庫★★★★★★
    $sql_query = “UPDATE notifytest SET “;
    $sql_query .= “notify02=’付款成功’ “;
    $sql_query .= “WHERE MerchantTradeNo=”.$MerchantTradeNo; //訂單編號
    mysql_query($sql_query);

    }

    // 接收到資訊回應綠界
    echo ‘1|OK’;
    —————————————————————————————————————–
    ★★問題:
    就是在『付款成功/或失敗』後更新資料庫的部分。
    請問一下,我這樣子做法有錯誤嗎?
    因為有實際測式一筆信用卡刷卡(有付款成功),但是資料表無法成功更新欄位值。
    想詢問請教一下,是不是有可能漏掉什麼重點了??

    ★★備註:
    但如果我把訂單編號改成不是變數,是直接一個字串,就可以成功對應、更新資料庫。

    $sql_query = “UPDATE notifytest SET “;
    $sql_query .= “notify02=’付款成功’ “;
    $sql_query .= “WHERE MerchantTradeNo=.’Test387451254′ “; //訂單編號
    mysql_query($sql_query);

    不好意思,如果是我自己php不熟的問題,我再研究一下。

    如果說有串接上的重點沒抓到,還煩請版主能指點一下了!!!!!! 萬分感謝!!!!!!!!

  4. 版主,謝謝您~我有重新改寫一下更新的程式碼後就沒有問題了。

  5. 版主您好:
    我目前遇到的問題是,OrderResultURL、ClientRedirectURL都沒有作用
    甚至連ClientBackURL也無效

    另外,能否就payECpay.php的部分詢問您,
    我應該要如何才能夠抓得到值呢

  6. 你應該是在 php 裡忘了類似以下這樣的程式了
    $obj->Send[‘ClientRedirectURL’] = $_POST[‘ClientRedirectURL’];

    至於綠界回傳 ReturnURL 設定的網址該如何方便的知道回傳值,可以在回傳接收程式的最上面加上以下程式,將 $_POST 儲存成檔案,方便觀察
    file_put_contents( ‘/tmp/ECPay_’.uniqid(”, true) .’.txt’, print_r( $_POST, true ) );

    先提供一個測試工具,你可以先用用看
    https://hoyo.idv.tw/?a=Tools/EcPay

發表迴響

你的電子郵件位址並不會被公開。