綠界金流串接教學 Java 怎麼做?API 流程測試一次看

Java 串接綠界金流的核心流程

要完成「綠界金流串接教學 Java」,重點不是只把付款頁面導過去,而是要正確完成訂單建立、參數組裝、CheckMacValue 檢查、付款結果通知接收、交易狀態更新與測試環境驗證。綠界提供的綠界全方位金流支援信用卡、ATM、CVS、BARCODE、WEBATM、TWQR 等付款方式,開發者可透過金流串接 API 或官方 SDK 建立訂單,將使用者導向綠界付款頁,再由綠界以 Server POST 通知商店系統付款結果。

在 Java 專案中,最常見的做法是使用官方 Java SDK,也就是開發者常搜尋的綠界 Java SDK、綠界金流 Java。SDK 可協助產生訂單參數、送出付款表單、處理 CheckMacValue,降低自行實作雜湊驗證時發生錯誤的機率。不過即使使用 SDK,仍必須理解綠界 API 的資料流,否則在 ReturnURL、ClientBackURL、MerchantTradeNo、HashKey、HashIV、測試特店代號等欄位上,很容易發生測試通過但正式環境失敗的問題。

串接前必備資料與官方文件

需要準備的綠界資料

進行綠界 API 測試 前,建議先準備下列資訊:

項目 用途 注意事項
MerchantID 特店編號 測試環境與正式環境不同
HashKey 產生 CheckMacValue 不可外洩或放在前端
HashIV 產生 CheckMacValue 必須與環境對應
ReturnURL 綠界後端通知付款結果 必須是可公開連線的 HTTPS 或可被綠界呼叫的網址
ClientBackURL 使用者付款後返回商店頁 不可用來判斷付款成功
OrderResultURL 信用卡付款結果頁 依付款情境設定
MerchantTradeNo 商店訂單編號 不可重複,長度與格式需符合文件
TotalAmount 訂單金額 測試與正式都要送整數金額
TradeDesc / ItemName 交易描述與商品名稱 特殊字元需留意編碼

綠界官方已將全方位金流 API 技術文件改為線上文件,開發者可至綠界開發者專區查閱最新規格。由於 API 規格、測試參數與付款方式可能調整,實作前不應只依賴舊文章或範例碼,應以官方文件為準。

綠界測試帳號與測試後台

綠界測試帳號 可用於測試特店後台登入、查詢訂單、模擬付款,以及確認商店系統是否能收到綠界後端發送的付款結果通知。測試環境常用於下列工作:

  1. 建立測試訂單。
  2. 導向綠界測試付款頁。
  3. 在測試後台查詢交易。
  4. 模擬 ATM、CVS、信用卡等付款結果。
  5. 檢查商店 ReturnURL 是否有收到 form_data 格式資料。
  6. 驗證 CheckMacValue 是否正確。
  7. 確認訂單狀態是否正確更新。

測試後台與正式後台資料不互通,測試 MerchantID、HashKey、HashIV 也不可直接套用到正式環境。

綠界全方位金流串接架構

付款流程說明

綠界全方位金流 的標準交易流程通常如下:

  1. 使用者在網站建立訂單。
  2. 商店後端產生 MerchantTradeNo。
  3. Java 後端組裝綠界付款參數。
  4. SDK 或程式產生 CheckMacValue。
  5. 後端回傳自動送出的 HTML form,或由伺服器導向綠界付款頁。
  6. 使用者在綠界頁面完成付款或取得繳費代碼。
  7. 綠界以 POST 將付款結果送至 ReturnURL。
  8. 商店驗證 CheckMacValue。
  9. 商店更新訂單狀態。
  10. 商店回應綠界指定格式,表示已接收通知。

其中最重要的是第 7 到第 9 步。很多初次串接者會誤以為使用者看到付款完成頁就代表訂單成功,但實務上必須以綠界後端通知或查詢 API 回傳結果作為訂單狀態依據。

form_data 轉換與後端接收

綠界回傳資料通常是 application/x-www-form-urlencoded 的 form_data 格式,不是 JSON。因此 Java 後端不可直接用 JSON body 解析,應使用表單參數接收,例如 Spring Boot 可透過 @RequestParam Map<String, String> 接收。

Java

@PostMapping(“/ecpay/return”)

public String ecpayReturn(@RequestParam Map<String, String> params) {

// 1. 取出綠界回傳參數

// 2. 驗證 CheckMacValue

// 3. 根據 RtnCode、MerchantTradeNo 更新訂單

// 4. 回覆綠界接收成功

return “1|OK”;

}

如果接收端錯用 @RequestBody 解析 JSON,常會發生收不到參數、CheckMacValue 驗證失敗,或付款成功但訂單沒有更新的問題。

Java 專案安裝與設定綠界 SDK

下載與導入 SDK

若使用 Java 串接,建議從綠界官方提供的 SDK 或 GitHub 來源取得範例。使用者提供的參考資料中提到 ECPayAIONode.js,也就是 Node.js 版本 SDK,做法是下載程式碼後把 ECPAYPaymentnodejs 內容作為模組匯入並命名為 ECPAY,用來建立 CVS、查詢付款狀態等。這個概念可對應到 Java:將綠界 Java SDK 加入專案,並以後端服務封裝付款建立、回傳驗證與查詢交易。

Java 專案常見導入方式包括:

  1. 將官方 Java SDK 放入專案。
  2. 確認 SDK 內的設定檔位置。
  3. 設定測試環境 MerchantID、HashKey、HashIV。
  4. 建立付款服務類別。
  5. 將建立訂單邏輯與付款導向邏輯分離。
  6. 將付款通知處理獨立成 ReturnURL Controller。

部分 Java SDK 版本會使用設定檔,例如 EcpayPayment.xml。若遇到 fileURL is null,通常表示 SDK 找不到設定檔,常見原因包含設定檔未放在 classpath、部署後路徑改變、IDE 執行與打包執行的資源路徑不同,或檔名大小寫不一致。

fileURL is null 常見排查

若卡在 fileURL is null,可依序檢查:

  1. EcpayPayment.xml 是否存在於 src/main/resources
  2. 打包後 JAR/WAR 內是否真的包含該檔案。
  3. SDK 讀取設定檔的路徑是否與專案結構一致。
  4. 檔名大小寫是否正確。
  5. 使用 Maven 或 Gradle 時,resources 是否被正確打包。
  6. 若部署於 Tomcat、OSGi bundle 或容器環境,是否有 classloader 差異。
  7. 不要把設定檔剪下後放到無法被 classpath 讀取的位置。

OSGi bundle 方式串接時,初始化資源與 classloader 管理更容易出錯,建議先用最小化 Java 專案完成付款建立與通知接收,再導入正式架構。

建立付款訂單的 Java 實作重點

付款參數設計

綠界金流 Java 實作中,建立訂單時應至少處理下列欄位:

參數 說明 實作建議
MerchantTradeNo 商店訂單編號 使用系統訂單號加時間或流水號,避免重複
MerchantTradeDate 交易時間 格式需符合綠界文件
TotalAmount 金額 後端重新計算,不可完全信任前端
TradeDesc 交易描述 避免特殊符號造成編碼問題
ItemName 商品名稱 多商品依文件格式串接
ReturnURL 付款結果通知 用於後端更新訂單
ChoosePayment 付款方式 ALL、Credit、ATM、CVS 等
EncryptType 加密類型 依官方文件建議設定
CheckMacValue 檢查碼 建議交由 SDK 或嚴格依文件產生

付款建立應由後端完成,避免前端傳入金額後直接送綠界。正確做法是前端只送出購物車或訂單 ID,後端查詢資料庫重新計算金額,再組裝金流參數。

Spring Boot 範例結構

以下是概念型結構,實際類別與方法名稱需依使用的綠界 Java SDK 版本調整:

Java

@Service

public class EcpayPaymentService {

public String createPaymentForm(Order order) {

// 1. 從資料庫取得訂單

// 2. 驗證訂單狀態是否可付款

// 3. 組裝綠界付款參數

// 4. 透過 SDK 產生自動提交表單

// 5. 回傳 HTML form 給前端或瀏覽器

return ”

“;

}

}

Java

@Controller

public class EcpayController {

@PostMapping(“/pay/ecpay”)

@ResponseBody

public String pay(@RequestParam String orderNo) {

// 呼叫 EcpayPaymentService 建立付款表單

return “”;

}

@PostMapping(“/pay/ecpay/return”)

@ResponseBody

public String paymentReturn(@RequestParam Map<String, String> params) {

// 驗證 CheckMacValue 並更新訂單

return “1|OK”;

}

}

這裡的重點不是複製範例碼,而是確保付款建立與付款通知都有獨立邏輯,並且資料庫訂單狀態更新具備冪等性。因為綠界可能重送通知,系統需避免重複出貨或重複加值。

CheckMacValue 驗證與交易安全

為什麼 CheckMacValue 很重要

CheckMacValue 是綠界金流串接中最重要的驗證機制之一,用於確認資料是否由合法來源產生,以及傳輸過程中是否被竄改。無論是送出付款請求或接收付款結果,都應依綠界官方規格產生或驗證 CheckMacValue。

常見錯誤包括:

  1. HashKey、HashIV 使用錯誤環境。
  2. 參數排序不符合規格。
  3. URL Encode 規則與官方文件不一致。
  4. 大小寫轉換錯誤。
  5. 未排除 CheckMacValue 本身再進行驗證。
  6. 使用前端資料直接更新訂單。
  7. 忽略回傳 RtnCode 與交易狀態。

若使用 SDK,仍建議閱讀官方 CheckMacValue 規則,因為在除錯時可以更快判斷是參數問題、編碼問題還是環境設定問題。

ReturnURL 不等於使用者回到頁面

ReturnURL 是綠界伺服器通知商店後端的網址,通常用來更新訂單狀態。ClientBackURL 則是付款完成後使用者點擊返回商店的網址,不能作為付款成功依據。原因是使用者可能關閉視窗、網路中斷,或付款方式屬於待繳費型態,例如 ATM、CVS,當下並不代表已完成付款。

正確判斷付款成功應依照:

  1. ReturnURL 收到綠界通知。
  2. CheckMacValue 驗證通過。
  3. RtnCode 或相關交易狀態符合成功條件。
  4. MerchantTradeNo 能對應到商店訂單。
  5. 金額與訂單金額一致。
  6. 訂單尚未被處理完成。

綠界 API、SDK 與不同技術情境比較

串接方式比較表

串接情境 適用對象 優點 注意事項
綠界 Java SDK Spring Boot、Servlet、Java Web 系統 減少 CheckMacValue 與表單產生錯誤 需確認 SDK 版本與設定檔位置
直接串金流串接 API 有完整後端能力的團隊 彈性最高,可完全控制流程 必須自行處理參數、編碼、驗證
Node.js SDK Node.js / Express 專案 可用 ECPayAIO_Node.js 快速建立付款 不適用純 Java 專案,但概念可參考
PHP SDK WordPress、Laravel、傳統 PHP 站台 官方範例多、上手快 架構需避免商業邏輯散落
C# API 串接 ASP.NET、.NET Core 適合 Windows/.NET 生態 可參考綠界 API 教學 C#,但規格仍以官方文件為準
Wix 串接 使用 Wix 架站者 可搭配外部後端或收款連結 Wix 綠界金流串接教學 需注意 Wix 平台限制與後端能力
定期定額 API 訂閱制、會員制 可自動週期扣款 綠界定期定額 API 需處理授權、週期、失敗扣款與取消機制

若是企業正式上線,建議優先選擇後端可控的串接方式,例如 Java SDK 或直接 API。若是 Wix 類型網站,因平台後端控制能力不同,常見做法是使用外部後端服務處理綠界付款流程,或使用綠界後台建立收款連結;若商品多、金額動態變化大,仍建議建立 API 串接架構。

常見付款方式與 API 功能

WEBATM、TWQR、CVS 與信用卡

綠界全方位金流支援多種付款方式,常見包含:

  1. 信用卡付款。
  2. ATM 虛擬帳號。
  3. WEBATM 網路轉帳。
  4. CVS 超商代碼。
  5. BARCODE 超商條碼。
  6. TWQR 行動支付。
  7. 定期定額信用卡扣款。

不同付款方式的交易狀態不同。信用卡通常可立即得到授權結果;ATM、CVS、BARCODE 則可能先產生繳費代碼,等消費者完成付款後才會收到付款成功通知。因此訂單狀態建議區分為「待付款」、「付款成功」、「付款失敗」、「已取消」、「逾期未付款」等,而不是只有成功與失敗。

綠界定期定額 API 注意事項

綠界定期定額 API 適合訂閱制、會員月費、定期服務費等場景。實作時除了建立第一筆授權或定期扣款設定,也要處理:

  1. 扣款週期。
  2. 扣款金額。
  3. 扣款失敗通知。
  4. 信用卡到期或授權失敗。
  5. 使用者取消訂閱。
  6. 後台對帳。
  7. 發票或收據流程。
  8. 個資與付款資料保護。

定期定額不應只當成一般單筆付款處理,因為它牽涉長期授權、會員權益與服務終止規則,正式上線前應完整測試不同扣款狀態。

綠界 API 測試與上線檢查

綠界 API 測試 清單

正式上線前,建議完成以下測試:

測試項目 檢查重點
建立訂單 MerchantTradeNo 不重複,金額正確
導向付款頁 表單可正常送出,付款方式正確
信用卡付款 成功、失敗、取消付款都能處理
ATM/CVS 產生繳費資訊後狀態為待付款
ReturnURL 能收到綠界 POST 通知
CheckMacValue 回傳驗證必須通過
訂單更新 不可重複出貨或重複加值
查詢訂單 後台與商店資料一致
錯誤處理 API 異常時有紀錄與告警
正式切換 MerchantID、HashKey、HashIV、API URL 全部切換

測試環境成功不代表正式環境一定成功,因為正式環境的網域、SSL、伺服器防火牆、API 網址、商店審核狀態都可能不同。

測試通知接收的實務建議

ReturnURL 必須能被綠界伺服器呼叫,因此本機 localhost 無法直接作為測試通知網址。若在開發階段需要測試,可使用測試伺服器、內網穿透工具或部署到臨時 HTTPS 環境。測試時應完整記錄綠界回傳參數,但避免將 HashKey、HashIV、信用卡敏感資訊寫入公開 log。

此外,綠界回傳後商店應回應官方指定格式,例如常見的 1|OK。若沒有正確回應,綠界可能判定商店未成功接收通知,進而重送通知。

金流串接費用與營運成本

金流串接費用 不只看交易手續費

金流串接費用 通常包含幾個層面:金流服務商收取的交易手續費、特定付款方式費用、退款或撥款相關費用、開發人力成本、維護成本,以及日後對帳與客服成本。實際費率與條件會依綠界公告、商店類型、交易量、付款方式與合約而有所不同,正式導入前應查閱綠界官方費率頁或與綠界確認。

技術面也會影響成本。若網站只賣少量固定商品,使用綠界後台建立收款連結可能最快;若商品數量多、價格動態變化、需要會員訂單紀錄、庫存扣減、自動開立發票,則串接 SDK 或 API 會更符合長期維運需求。

Wix、C# 與跨平台串接補充

Wix 綠界金流串接教學 的限制

搜尋 Wix 綠界金流串接教學 的使用者,多半希望在 Wix 網站直接接綠界。需要注意的是,Wix 的付款整合能力會受到平台支援項目、所在地、商務方案與 Velo 後端能力限制。若無法直接安裝綠界付款模組,可考慮:

  1. 使用綠界後台建立收款連結。
  2. 透過外部 Java、Node.js 或 PHP 後端建立付款訂單。
  3. Wix 前端導向外部付款流程。
  4. 付款完成後由外部後端接收 ReturnURL。
  5. 再將訂單狀態同步回 Wix 或自有系統。

這種方式的關鍵是:金流邏輯仍應放在後端,不應把 HashKey、HashIV 放在 Wix 前端頁面。

綠界 API 教學 C# 與 Java 的差異

綠界 API 教學 C# 和 Java 串接本質相同,都是依官方 API 規格組參數、產生 CheckMacValue、接收 ReturnURL 並更新訂單。差異主要在 SDK 語法、框架接收表單資料的方式,以及部署環境。C# 常見於 ASP.NET Core,Java 常見於 Spring Boot、Servlet、Tomcat 或企業內部系統。無論使用哪種語言,安全原則與交易流程一致。

結論

綠界金流串接教學 Java 的成功關鍵,在於使用綠界 Java SDK 或金流串接 API 時,仍要理解完整交易流程:後端建立訂單、導向綠界付款、接收 form_data 通知、驗證 CheckMacValue、更新資料庫訂單狀態,並透過綠界測試帳號 完成各付款方式測試。若遇到 fileURL is null,應優先檢查 EcpayPayment.xml 是否正確放在 classpath 與打包資源中。

對正式上線而言,不能只確認付款頁能打開,也要測試 ReturnURL、重複通知、付款失敗、ATM/CVS 待付款、定期定額、退款與對帳流程。若是 Wix、C#、Node.js 或其他平台,串接語言不同,但核心規格相同;最終仍應以綠界官方文件、測試後台與正式環境驗證結果為準。

常見問題

1. Java 串接綠界金流一定要用 SDK 嗎?

不一定。可以直接串接金流串接 API,但使用綠界 Java SDK 可降低參數組裝與 CheckMacValue 錯誤風險。若團隊熟悉 API 規格,也可自行實作。

2. 綠界測試帳號可以直接用在正式環境嗎?

不可以。測試環境與正式環境的 MerchantID、HashKey、HashIV、API URL 不同,上線時必須全部切換成正式資料。

3. ReturnURL 和 ClientBackURL 有什麼不同?

ReturnURL 是綠界後端通知商店付款結果的網址,應用於更新訂單狀態。ClientBackURL 是使用者返回商店頁面的網址,不能作為付款成功依據。

4. 為什麼綠界回傳資料不是 JSON?

綠界付款結果通知常以 form_data 格式 POST,因此 Java 後端應使用表單參數接收,例如 Spring Boot 的 @RequestParam Map<String, String>

5. CheckMacValue 驗證失敗怎麼辦?

先確認 HashKey、HashIV、API 環境、參數排序、URL Encode 規則、大小寫轉換,以及是否排除 CheckMacValue 本身再驗證。

6. fileURL is null 通常是什麼原因?

多半是 SDK 找不到設定檔,例如 EcpayPayment.xml 未放在 classpath、沒有被打包進 JAR/WAR、檔名錯誤或部署環境 classloader 差異。

7. ATM 或 CVS 產生代碼後算付款成功嗎?

不算。產生繳費代碼通常只代表待付款,需等消費者實際繳費後,綠界再通知商店付款成功。

8. Wix 可以串接綠界金流嗎?

可行方式取決於 Wix 平台能力。常見做法是透過外部後端處理綠界 API,Wix 前端只負責導向付款,不應在前端保存 HashKey、HashIV。

9. 綠界定期定額 API 適合哪些情境?

適合訂閱制、會員月費、定期服務費等情境。實作時需處理週期扣款、失敗通知、取消訂閱與會員權益。

10. 金流串接費用怎麼估算?

應同時評估交易手續費、付款方式費用、退款或撥款成本、開發人力、維護、對帳與客服成本。實際費率應以綠界官方公告或合約為準。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料