移至主內容

Drupal Commerce 介紹與綠界 ECPay 金流串接實戰

2026/10/7 , by Wanding
分類:
企業應用
數位行銷
網站開發

Drupal Commerce 是什麼?

Drupal Commerce 是建構在 Drupal 上的開源電子商務模組,可以設計商品頁面、並提供訂單、結帳串接API實現自主的金流(不會被平台抽成),也能和原本的網站內容、會員、權限、Views 無縫結合。它由 Centarro 主導維護,目前主力版本為Commerce 3.x,支援 Drupal 10.3 以上與 Drupal 11。

它的定位並非「開箱即用的商店」,而是「可組裝的電商框架」,很適合需要客製流程、內容與商品深度整合、或與既有系統(ERP、會員系統)串接的專案。 我們把Drupal Commerce跟其他大家熟悉的平台做比較,就可以發現它除了可以用在一般電商之外,它更適合定位在B2B的商務市場。

平台類型適合情境客製彈性
Drupal Commerce開源框架(自架)內容導向電商、複雜商品/流程、B2B很高
WooCommerceWordPress 外掛(自架)中小型商店、快速上線中
ShopifySaaS標準零售、不想管主機低到中
SHOPLINE / 91APP台灣在地 SaaS在地金物流整合、行銷工具低

對已經以 Drupal 經營網站的客戶而言,Commerce 最大的價值是不需要另建一套商店系統,會員、內容與訂單都在同一個後台。

核心架構

Drupal Commerce 由幾個各司其職的子模組組成,理解它們的分工,就能看懂金流要接在哪裡。

模組負責什麼串金流時的關聯
Store(commerce_store)商店本身:幣別、稅制、地址幣別需設為 TWD
Product(commerce_product)商品與變體(Variation):SKU、價格、屬性商品名稱會帶入綠界 ItemName
Order(commerce_order)訂單、訂單項目、狀態流程(Workflow)付款成功後訂單轉為 completed
Cart(commerce_cart)購物車,實際上是 draft 狀態的訂單—
Checkout(commerce_checkout)結帳流程與各個結帳窗格(Pane)「付款」步驟會導向綠界
Payment(commerce_payment)金流閘道(Gateway)、付款紀錄、退款綠界模組就是一個 Gateway 外掛
Price / Promotion / Tax價格計算、促銷、稅金金額需為整數新台幣
Shipping(contrib)運送方式與運費超商取貨另需物流串接

Payment 模組把金流閘道分成兩類,這是串接設計的關鍵:

  • On-site(站內):信用卡資料在自己的結帳頁輸入,再透過 API 或 Token 送到金流商,例如 Stripe。網站需處理更多 PCI DSS 責任。
  • Off-site(站外導向):結帳時把消費者導到金流商的付款頁,付完再導回網站,卡號從不經過我方伺服器。綠界 全方位金流(AIO)就是這一類,在 Commerce 裡對應 OffsitePaymentGatewayBase。

Off-site 閘道有三個重要的回呼點:onReturn() 處理消費者瀏覽器導回、onCancel() 處理取消、onNotify() 處理金流商伺服器端的背景通知(Webhook)。後面的串接流程,基本上就是把綠界的規格對應到這三個方法。

為什麼要串接綠界 ECPay

在台灣第三方支付平台,有綠界科技、藍新金流..提供代收代付的服務。本文僅以綠界為例,你也可以使用藍新金流。綠界一次串接就能取得信用卡、ATM 虛擬帳號、超商代碼等在地付款方式。另外,Drupal Commerce 官方生態以國外的 Stripe、PayPal、Braintree為主,這些跨境的金流,在台灣境內的交易不能使用,必須使用政府核可的金流公司才可以交易。

綠界「全方位金流(All-In-One, AIO)」的付款方式大致如下:

付款方式ChoosePayment 值付款結果何時確定對訂單流程的影響
信用卡(含分期、定期定額)Credit當下授權即時完成,最容易處理
ATM 虛擬帳號ATM消費者日後轉帳先取號、後入帳,訂單需「待付款」狀態
超商代碼CVS消費者到超商繳費同 ATM,有繳費期限
超商條碼BARCODE消費者到超商繳費同 ATM
網路 ATMWebATM當下完成需讀卡機,使用率低
全部由消費者選ALL依所選方式最常用的設定

從架構角度看,最需要注意的是 ATM 與超商這類「非即時」付款:消費者從綠界導回網站時只拿到繳費帳號或代碼,錢還沒到。真正的入帳結果可能幾小時或幾天後才透過背景通知送達,所以訂單狀態絕不能只靠瀏覽器導回來判斷。

此外,綠界另有電子發票與物流(超商取貨)API,是和金流分開的串接。本文只處理金流。

串接前準備

1. 取得三組金鑰

綠界以 MerchantID(特店編號)、HashKey、HashIV 三個值識別商店並產生檢查碼。開發階段使用綠界開發者文件提供的公開測試帳號即可(例如常見的測試特店 3002607,實際數值請以官方最新文件為準);正式上線前需申請特店、完成審核,再到廠商後台取得正式金鑰。正式金鑰不應寫進版控,建議放在 settings.php 的 config override 或環境變數。

2. 區分兩個環境

環境付款頁網址用途
測試(test)payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5開發與驗收,不會真的扣款
正式(live)payment.ecpay.com.tw/Cashier/AioCheckOut/V5上線後使用

在 Commerce 裡,這對應到金流閘道設定中的 Mode(test / live),切換模式時金鑰也要一併更換。

3. 主機環境需求

  • 綠界得能連到你的網站:付款結果是由綠界伺服器主動 POST 到 ReturnURL,localhost 或只在內網的開發機收不到。本機開發可用 cloudflared 等通道工具,或直接在有公開網址的測試站上開發。
  • HTTPS 與標準埠號:使用有效憑證(Let's Encrypt 即可),回呼網址走 80/443。
  • 防火牆與 WAF:若前端有 FortiGate、Cloudflare 或 ModSecurity,要確認不會擋下綠界的 POST。通知被擋是「付了錢但訂單沒更新」最常見的原因。
  • 時區與時間同步:MerchantTradeDate 以台灣時間(Asia/Taipei)計算,確認 PHP 與系統時區一致、NTP 正常。
  • 程式層:Drupal 10.3+ / 11、Commerce 3.x(或 2.x)、PHP 8.1+,以 Composer 管理模組。

4. 商店基本設定

Store 幣別設為 TWD,並確認價格、運費、促銷計算後的總額為整數。綠界的 TotalAmount 只接受整數,小數點會直接導致交易失敗。

串接步驟

整個串接可以拆成七個步驟:安裝模組、建立閘道、調整結帳流程、組付款參數、計算檢查碼、處理背景通知、處理瀏覽器導回。前三步是設定,後四步是模組內部在做的事,理解它們才能在出問題時快速排錯。

綠界 AIO 付款流程圖

綠界 AIO 付款流程 · 7 個步驟

消費者的瀏覽器在 Drupal 與綠界之間來回兩趨,但訂單是否已付款,只由步驟 4 的伺服器背景通知決定。

步驟一:安裝模組

特別感謝 Jiajun Xu 為Drupal 11開發ECpay 模組

Commerce_ecpay_allinone Gitlab網址

ecpay_by_Jiajun Xu

 

由於packages.drupal.org 目前只有 1.x-dev,還沒收錄 2.0.x 分支。要讓 Composer 直接從 drupalcode 的 Git 抓取,須先編輯網站根目錄內的composer.json的repositories區塊中,把 drupalcode 的 Git 來源加在 packages.drupal.org前面,如下圖

composer_json

接著安裝commerce_ecpay_allinone

composer

然後到後台把ECpay模組安裝好。最後再清除快取

步驟二:建立金流閘道

到「Commerce → 設定 → 付款 → 金流閘道」(/admin/commerce/config/payment-gateways)新增閘道,選擇綠界外掛,填寫:

  • 模式:Test(開發階段)或 Live
  • MerchantID、HashKey、HashIV
  • 開放的付款方式(ChoosePayment)、ATM 繳費期限、超商代碼有效時間
  • 條件(Conditions):可限制只有特定商店、幣別或金額範圍才顯示綠界

步驟三:調整結帳流程

到「結帳流程」(/admin/commerce/config/checkout-flows)確認預設流程包含「付款資訊」與「付款處理」兩個窗格。「付款處理」在 Off-site 閘道會產生一個自動送出的表單,把消費者帶到綠界付款頁。另外要決定訂單在「下單但尚未付款」時的狀態,ATM、超商付款特別需要這個中間狀態。

步驟四:增加付款閘道Ecpay並設定付款參數

新增付款閘道Ecpay 新增金流閘道
設定付款閘道Ecpay 付款設定

最後測試購買流程與金流付款成功畫面如下

最後付款連結到ECpay的畫面 結帳流程設定

返回目錄

Drupal Commerce 介紹與綠界 ECPay 金流串接實戰

2026/10/7 , by Wanding
分類:
企業應用
數位行銷
網站開發

Drupal Commerce 是什麼?

Drupal Commerce 是建構在 Drupal 上的開源電子商務模組,可以設計商品頁面、並提供訂單、結帳串接API實現自主的金流(不會被平台抽成),也能和原本的網站內容、會員、權限、Views 無縫結合。它由 Centarro 主導維護,目前主力版本為Commerce 3.x,支援 Drupal 10.3 以上與 Drupal 11。

它的定位並非「開箱即用的商店」,而是「可組裝的電商框架」,很適合需要客製流程、內容與商品深度整合、或與既有系統(ERP、會員系統)串接的專案。 我們把Drupal Commerce跟其他大家熟悉的平台做比較,就可以發現它除了可以用在一般電商之外,它更適合定位在B2B的商務市場。

平台類型適合情境客製彈性
Drupal Commerce開源框架(自架)內容導向電商、複雜商品/流程、B2B很高
WooCommerceWordPress 外掛(自架)中小型商店、快速上線中
ShopifySaaS標準零售、不想管主機低到中
SHOPLINE / 91APP台灣在地 SaaS在地金物流整合、行銷工具低

對已經以 Drupal 經營網站的客戶而言,Commerce 最大的價值是不需要另建一套商店系統,會員、內容與訂單都在同一個後台。

核心架構

Drupal Commerce 由幾個各司其職的子模組組成,理解它們的分工,就能看懂金流要接在哪裡。

模組負責什麼串金流時的關聯
Store(commerce_store)商店本身:幣別、稅制、地址幣別需設為 TWD
Product(commerce_product)商品與變體(Variation):SKU、價格、屬性商品名稱會帶入綠界 ItemName
Order(commerce_order)訂單、訂單項目、狀態流程(Workflow)付款成功後訂單轉為 completed
Cart(commerce_cart)購物車,實際上是 draft 狀態的訂單—
Checkout(commerce_checkout)結帳流程與各個結帳窗格(Pane)「付款」步驟會導向綠界
Payment(commerce_payment)金流閘道(Gateway)、付款紀錄、退款綠界模組就是一個 Gateway 外掛
Price / Promotion / Tax價格計算、促銷、稅金金額需為整數新台幣
Shipping(contrib)運送方式與運費超商取貨另需物流串接

Payment 模組把金流閘道分成兩類,這是串接設計的關鍵:

  • On-site(站內):信用卡資料在自己的結帳頁輸入,再透過 API 或 Token 送到金流商,例如 Stripe。網站需處理更多 PCI DSS 責任。
  • Off-site(站外導向):結帳時把消費者導到金流商的付款頁,付完再導回網站,卡號從不經過我方伺服器。綠界 全方位金流(AIO)就是這一類,在 Commerce 裡對應 OffsitePaymentGatewayBase。

Off-site 閘道有三個重要的回呼點:onReturn() 處理消費者瀏覽器導回、onCancel() 處理取消、onNotify() 處理金流商伺服器端的背景通知(Webhook)。後面的串接流程,基本上就是把綠界的規格對應到這三個方法。

為什麼要串接綠界 ECPay

在台灣第三方支付平台,有綠界科技、藍新金流..提供代收代付的服務。本文僅以綠界為例,你也可以使用藍新金流。綠界一次串接就能取得信用卡、ATM 虛擬帳號、超商代碼等在地付款方式。另外,Drupal Commerce 官方生態以國外的 Stripe、PayPal、Braintree為主,這些跨境的金流,在台灣境內的交易不能使用,必須使用政府核可的金流公司才可以交易。

綠界「全方位金流(All-In-One, AIO)」的付款方式大致如下:

付款方式ChoosePayment 值付款結果何時確定對訂單流程的影響
信用卡(含分期、定期定額)Credit當下授權即時完成,最容易處理
ATM 虛擬帳號ATM消費者日後轉帳先取號、後入帳,訂單需「待付款」狀態
超商代碼CVS消費者到超商繳費同 ATM,有繳費期限
超商條碼BARCODE消費者到超商繳費同 ATM
網路 ATMWebATM當下完成需讀卡機,使用率低
全部由消費者選ALL依所選方式最常用的設定

從架構角度看,最需要注意的是 ATM 與超商這類「非即時」付款:消費者從綠界導回網站時只拿到繳費帳號或代碼,錢還沒到。真正的入帳結果可能幾小時或幾天後才透過背景通知送達,所以訂單狀態絕不能只靠瀏覽器導回來判斷。

此外,綠界另有電子發票與物流(超商取貨)API,是和金流分開的串接。本文只處理金流。

串接前準備

1. 取得三組金鑰

綠界以 MerchantID(特店編號)、HashKey、HashIV 三個值識別商店並產生檢查碼。開發階段使用綠界開發者文件提供的公開測試帳號即可(例如常見的測試特店 3002607,實際數值請以官方最新文件為準);正式上線前需申請特店、完成審核,再到廠商後台取得正式金鑰。正式金鑰不應寫進版控,建議放在 settings.php 的 config override 或環境變數。

2. 區分兩個環境

環境付款頁網址用途
測試(test)payment-stage.ecpay.com.tw/Cashier/AioCheckOut/V5開發與驗收,不會真的扣款
正式(live)payment.ecpay.com.tw/Cashier/AioCheckOut/V5上線後使用

在 Commerce 裡,這對應到金流閘道設定中的 Mode(test / live),切換模式時金鑰也要一併更換。

3. 主機環境需求

  • 綠界得能連到你的網站:付款結果是由綠界伺服器主動 POST 到 ReturnURL,localhost 或只在內網的開發機收不到。本機開發可用 cloudflared 等通道工具,或直接在有公開網址的測試站上開發。
  • HTTPS 與標準埠號:使用有效憑證(Let's Encrypt 即可),回呼網址走 80/443。
  • 防火牆與 WAF:若前端有 FortiGate、Cloudflare 或 ModSecurity,要確認不會擋下綠界的 POST。通知被擋是「付了錢但訂單沒更新」最常見的原因。
  • 時區與時間同步:MerchantTradeDate 以台灣時間(Asia/Taipei)計算,確認 PHP 與系統時區一致、NTP 正常。
  • 程式層:Drupal 10.3+ / 11、Commerce 3.x(或 2.x)、PHP 8.1+,以 Composer 管理模組。

4. 商店基本設定

Store 幣別設為 TWD,並確認價格、運費、促銷計算後的總額為整數。綠界的 TotalAmount 只接受整數,小數點會直接導致交易失敗。

串接步驟

整個串接可以拆成七個步驟:安裝模組、建立閘道、調整結帳流程、組付款參數、計算檢查碼、處理背景通知、處理瀏覽器導回。前三步是設定,後四步是模組內部在做的事,理解它們才能在出問題時快速排錯。

綠界 AIO 付款流程圖

綠界 AIO 付款流程 · 7 個步驟

消費者的瀏覽器在 Drupal 與綠界之間來回兩趨,但訂單是否已付款,只由步驟 4 的伺服器背景通知決定。

步驟一:安裝模組

特別感謝 Jiajun Xu 為Drupal 11開發ECpay 模組

Commerce_ecpay_allinone Gitlab網址

ecpay_by_Jiajun Xu

 

由於packages.drupal.org 目前只有 1.x-dev,還沒收錄 2.0.x 分支。要讓 Composer 直接從 drupalcode 的 Git 抓取,須先編輯網站根目錄內的composer.json的repositories區塊中,把 drupalcode 的 Git 來源加在 packages.drupal.org前面,如下圖

composer_json

接著安裝commerce_ecpay_allinone

composer

然後到後台把ECpay模組安裝好。最後再清除快取

步驟二:建立金流閘道

到「Commerce → 設定 → 付款 → 金流閘道」(/admin/commerce/config/payment-gateways)新增閘道,選擇綠界外掛,填寫:

  • 模式:Test(開發階段)或 Live
  • MerchantID、HashKey、HashIV
  • 開放的付款方式(ChoosePayment)、ATM 繳費期限、超商代碼有效時間
  • 條件(Conditions):可限制只有特定商店、幣別或金額範圍才顯示綠界

步驟三:調整結帳流程

到「結帳流程」(/admin/commerce/config/checkout-flows)確認預設流程包含「付款資訊」與「付款處理」兩個窗格。「付款處理」在 Off-site 閘道會產生一個自動送出的表單,把消費者帶到綠界付款頁。另外要決定訂單在「下單但尚未付款」時的狀態,ATM、超商付款特別需要這個中間狀態。

步驟四:增加付款閘道Ecpay並設定付款參數

新增付款閘道Ecpay 新增金流閘道
設定付款閘道Ecpay 付款設定

最後測試購買流程與金流付款成功畫面如下

最後付款連結到ECpay的畫面 結帳流程設定

返回目錄