跳到內容

快速開始

在 ChatGPT 開啟在 Claude 開啟

這一頁帶你在測試環境走完一筆單次付款:建立結帳 → 消費者付款 → 收到付款通知 → 回查確認。

  • 網域名稱:例如應援頁是 ming.oen.tw,網域名稱就是 ming。以下範例都用 ming,請換成你的。
  • 測試環境的 token:在測試環境 CRM(https://{網域名稱}.testing.oen.tw/crm)的「總設定」→「開發者」→「應援金流設定」產生。還沒有測試環境帳號請請商家聯絡應援。詳見交給工程師串接前的準備。
  • 能接收 HTTPS 的網址:付款通知會送到這裡。本機開發可以用 tunnel 工具取得公開的 https 網址,再填到 CRM 的「交易資料回傳網址位置」。
終端機視窗
export OEN_API_TOKEN="貼上測試環境的 token"
export OEN_MERCHANT_ID="ming"

在消費者按下「付款」時,由你的伺服器呼叫 POST /checkout。三個重點:

  • productDetails 必填,各品項「數量 × 單價」的合計必須等於 amount。
  • 回應不會給結帳頁網址,要用 data.id 自己組:https://{網域名稱}.testing.oen.tw/checkout/{id}(正式環境沒有 .testing)。
  • 結帳頁從建立起 5 分鐘內有效,請建立後立刻把消費者導過去。
終端機視窗
curl -X POST "https://payment-api.testing.oen.tw/checkout" \
-H "Authorization: Bearer $OEN_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"merchantId": "ming",
"amount": 1200,
"orderId": "A20260928001",
"successUrl": "https://shop.example.com/payment/success?order=A20260928001",
"failureUrl": "https://shop.example.com/payment/failure/A20260928001",
"productDetails": [
{ "productionCode": "SKU-001", "description": "手沖咖啡豆 200g", "quantity": 2, "unit": "包", "unitPrice": 600 }
]
}'

回應:

{
"code": "S0000",
"data": { "id": "2HhndgEquCbDzC5OyVxWSGZmd2l", "transactionHid": "P20260928AB12CD34" },
"message": ""
}
  • id:組結帳頁網址,也是之後付款通知與回查用的 id。
  • transactionHid:P 開頭的交易編號,退款與 CRM 搜尋用這個。

把消費者導到 https://ming.testing.oen.tw/checkout/2HhndgEquCbDzC5OyVxWSGZmd2l。消費者付款後:

  • 成功時回到 successUrl,網址不會帶任何參數,所以範例把訂單編號放在自己的網址裡。
  • 失敗時回到 failureUrl,網址加上 payment_error,例如 ?payment_error=T0004。

付款完成後,應援會把結果 POST 到你在 CRM 設定的網址。付款通知沒有簽章,任何人都能偽造,所以收到後一定要用 id 呼叫 GET /transactions/{id} 回查,以查到的結果為準。

終端機視窗
# 用付款通知裡的 id 回查
curl "https://payment-api.testing.oen.tw/transactions/2HhndgEquCbDzC5OyVxWSGZmd2l" \
-H "Authorization: Bearer $OEN_API_TOKEN"

打開結帳頁,用測試卡付款,確認:

  • 你的伺服器收到付款通知,回查的 status 是 charged。
  • 訂單狀態有更新。
  • 在 CRM「金流管理」→「金流列表」看得到這筆交易(類型是「現金購買」)。

測試卡與測試環境的注意事項見環境與測試。