PayCore PayCore開發者中心

API 目錄

依金流分類查看可串接的 API。

本頁列出 PayCore 對外串接可使用的 API。每個金流可展開查看 Endpoint、可填參數、gateway_credentials、回應格式、錯誤與測試範例。

API CATALOG

PayCore 公開 API 方法目錄

本頁提供 PayCore API 串接流程、欄位說明、請求範例、回應格式與付款通知規格。

請將範例中的 API Key、訂單資料與金流憑證替換為實際資料,並避免在前端程式或公開程式碼中揭露密鑰。 最後更新:2026-08-31
公開串接文件

快速開始

先註冊會員並完成 Email 驗證,再由會員後台自行建立 PayCore API Key;註冊不會自動產生 Key。取得 Key 後,決定 Direct Gateway 或 All-in-One 收款專案,再呼叫建立付款 API。

註冊 PayCore 會員 · 登入會員後台

1. API 認證X-API-KEY
2. 選擇模式AIO 配置/Direct Gateway
3. 付款與通知payment_url · payok_url
X-API-KEY

API 認證

PayCore API 使用 X-API-KEY Header 驗證呼叫方;完整 Key 只會在會員後台建立成功時顯示一次,請保存於伺服器端。Direct Gateway 的金流憑證放在 gateway_credentials;PayCore AIO 則固定從 API Key 綁定配置的加密付款來源讀取,不接受客戶端覆蓋。

Direct / All-in-One

串接模式

Direct Gateway 適合商戶直接帶金流憑證建立付款;All-in-One 收款專案則由 PayCore 專案 API Key 統一管理付款頁與付款方式。

Webhook

付款結果通知(Webhook/PayOK)

付款通知分成兩個方向:上游金流透過各自固定的 Callback URL 通知 PayCore;PayCore 驗證並更新付款後,再依該筆產單 Request 的 payok_url 通知商戶。payok_url 是商戶逐筆自訂的 HTTPS 接收網址,不是 PayCore 固定 API。

本章是 AIO 與所有 Direct Gateway 共用的完整商戶串接規格。商戶不需要、也不應直接呼叫 Provider 專用的 /api/paycore/webhooks/{gateway};該路徑只供上游金流通知 PayCore。

1. 設定接收網址

每次建立 AIO 或 Direct Gateway 付款時,可將該筆交易的商戶 HTTPS 接收網址放入 payok_url。不同交易可指定不同網址;未提供時 PayCore 不會投遞付款結果通知。

JSON
{
  "merchant_order_no": "ORDER202608310001",
  "amount": 2250,
  "currency": "TWD",
  "item_name": "PayCore test product",
  "payok_url": "https://merchant.example.com/webhooks/paycore",
  "success_url": "https://merchant.example.com/payment/success",
  "cancel_url": "https://merchant.example.com/payment/cancel"
}
  • success_url 與 cancel_url 只是付款人瀏覽器的回站網址,不是付款成功證據。
  • 只依已驗證的 PayCore Webhook,或付款查詢 API 回傳 status=paid 後,才可入帳、出貨或開通。
  • payok_url 必須是外部可連線的 HTTPS 網域名稱;不接受 IPv4/IPv6 位址、localhost、Loopback、Private 或 Reserved IP。
2. Callback Secret 與通知 Headers

每一把 PayCore API Key 都有各自的 Callback Secret。請在會員後台的 API Key 管理頁建立並安全保存,接收端使用它驗證 PayCore 簽章。

  • Callback Secret 只保存在商戶伺服器端,不可放在 JavaScript、瀏覽器、App、公開原始碼或 Log。
  • Callback Secret 不等於 X-API-KEY,也不等於 Provider 的 gateway_credentials。
  • 輪替 Callback Secret 後,舊 Secret 立即失效,接收端必須同步更新。
HTTP
POST /webhooks/paycore HTTP/1.1
Content-Type: application/json
X-PayCore-Event-Id: evt_20260831080530ABCDEFGH
X-PayCore-Timestamp: 1788134730
X-PayCore-Signature: v1=4d7f...
  • X-PayCore-Event-Id:事件唯一識別,用於冪等處理。
  • X-PayCore-Timestamp:PayCore 產生通知時的 Unix 秒數。
  • X-PayCore-Signature:使用 Callback Secret 計算的 HMAC-SHA256 簽章。
3. payment.paid Payload

PayCore 確認付款成功後會發送 payment.paid。AIO 保留對外主單;Direct Gateway 則使用實際金流與付款方式。

PayCore AIO
JSON
{
  "event_id": "evt_20260831080530ABCDEFGH",
  "event_type": "payment.paid",
  "payment_no": "PAY20260831080000ABCDEFGH",
  "merchant_order_no": "ORDER202608310001",
  "gateway": "paycore",
  "method": "aio",
  "amount": 2250,
  "currency": "twd",
  "status": "paid",
  "paid_at": "2026-08-31T08:05:30+08:00"
}
Direct Gateway
JSON
{
  "event_id": "evt_20260831081530DIRECT01",
  "event_type": "payment.paid",
  "payment_no": "PAY20260831081000DIRECT01",
  "merchant_order_no": "ORDER202608310002",
  "gateway": "ecpay",
  "method": "credit",
  "amount": 980,
  "currency": "twd",
  "status": "paid",
  "paid_at": "2026-08-31T08:15:30+08:00"
}
  • event_id:通知事件唯一識別;重送時保持不變。
  • event_type:目前付款成功事件為 payment.paid。
  • payment_no:PayCore 對外付款編號。
  • merchant_order_no:商戶建立付款時提供的訂單編號。
  • gateway、method:AIO 為 paycore/aio;Direct 使用實際金流與付款方式。
  • amount、currency:必須與商戶原訂單再次比對。
  • status:只有 paid 才代表 PayCore 已確認付款成功。
  • paid_at:含時區的 ISO-8601 付款完成時間。
4. 簽章驗證與 Laravel 範例

簽章原文必須使用收到的原始 Request Body,不可先解析 JSON、重新排序欄位或重新編碼。正式環境建議拒絕與目前時間相差超過 5 分鐘的通知,並使用 hash_equals 做 Constant-Time Comparison。

HMAC-SHA256
signed_payload = X-PayCore-Timestamp + "." + raw_request_body
expected_signature = "v1=" + HMAC-SHA256(signed_payload, callback_secret)

先將 Callback Secret 放入商戶 Laravel 專案的環境設定,並透過 config/services.php 讀取;不可直接寫死在程式碼。

Laravel
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;

Route::post('/webhooks/paycore', function (Request $request) {
    $rawBody = $request->getContent();
    $timestamp = (string) $request->header('X-PayCore-Timestamp', '');
    $eventId = (string) $request->header('X-PayCore-Event-Id', '');
    $received = (string) $request->header('X-PayCore-Signature', '');
    $secret = (string) config('services.paycore.callback_secret');

    if (! ctype_digit($timestamp) || abs(time() - (int) $timestamp) > 300) {
        return response('Invalid timestamp', 401);
    }

    $expected = 'v1=' . hash_hmac(
        'sha256',
        $timestamp . '.' . $rawBody,
        $secret
    );

    if ($eventId === '' || ! hash_equals($expected, $received)) {
        return response('Invalid signature', 401);
    }

    $payload = json_decode($rawBody, true, 512, JSON_THROW_ON_ERROR);

    if (($payload['event_id'] ?? null) !== $eventId) {
        return response('Event ID mismatch', 422);
    }

    if (($payload['event_type'] ?? null) !== 'payment.paid'
        || ($payload['status'] ?? null) !== 'paid') {
        return response('Unsupported event', 422);
    }

    // Enforce idempotency with a UNIQUE event_id, verify the order and amount,
    // then commit the merchant transaction before returning HTTP 2xx.

    return response('OK', 200);
});
5. 回覆、自動重送與冪等

商戶完成驗章與內部交易後回傳任意 HTTP 2xx。PayCore 只以 HTTP Status 判斷投遞是否成功,Response Body 不需要固定 JSON 格式。

HTTP
HTTP/1.1 200 OK
Content-Type: text/plain

OK

若接收端回非 2xx、連線失敗或逾時,PayCore 預設最多共投遞 5 次:

  1. 付款成功後立即投遞。
  2. 第一次失敗後 1 分鐘重送。
  3. 第二次失敗後 5 分鐘重送。
  4. 第三次失敗後 15 分鐘重送。
  5. 第四次失敗後 60 分鐘進行最後一次重送。

同一次事件重送時 event_id 不變,商戶必須用 event_id 建立唯一約束或等效冪等鎖,避免重複入帳、出貨或開通。

6. 商戶端處理順序與常見錯誤
  1. 保留原始 Request Body。
  2. 驗證 Timestamp 是否在允許時差內。
  3. 使用建立該筆付款之 API Key 對應的 Callback Secret 驗證 HMAC。
  4. 比對 Header 與 Body 的 event_id,並以 event_id 做冪等。
  5. 比對 payment_no、merchant_order_no、amount、currency 與 status=paid。
  6. 必要時呼叫 GET /api/paycore/payments/{paymentNo} 再次確認狀態。
  7. 完成商戶內部交易後才回 HTTP 2xx。
常見錯誤
  • 使用解析並重新編碼後的 JSON 驗章,造成簽章不一致。
  • 把 X-API-KEY、Provider HashKey 或 gateway_credentials 當成 Callback Secret。
  • 收到 payment.paid 後沒有比對金額與商戶訂單編號。
  • 只依 success_url 回站畫面判斷付款成功。
  • 沒有用 event_id 做冪等,導致重送時重複處理。
  • 尚未完成內部交易就先回 HTTP 200,導致後續失敗不再重送。
FIELD DICTIONARY

PayCore 欄位字典與金流對照

欄位名稱以 PayCore 公開 API 的原始名稱為準。payer_ip、api_request_ip、payment_page_first_ip、provider_callback_first_ip 代表不同資料來源;付款頁 IP 會在有效付款連結第一次開啟時記錄,金流 Callback IP 則在通知通過驗證後記錄。這些 IP 只表示網路來源,不代表付款人身分已經完成驗證。沒有專用金流欄位時,資料會保留於 PayCore,或寫入該金流允許的 Remark/Metadata 欄位。

建立付款 Request

欄位 來源 型別 必填 說明 範例
merchant_order_no API body string|max:100 是 商戶訂單號;同一 API Key 下應保持唯一。 ORDER202607130001
amount API body integer|min:1 是 付款金額;實際單位與幣別限制依金流而定。 980
currency API body string|max:10 否 幣別代碼,例如 TWD、USD。 TWD
payer_account API body string|max:100 否 商戶系統內的付款人/會員識別,不是身分證號。 member-001
payer_identity_no API body string|max:80 否 付款人身分識別號;只交給有正式對應欄位的金流。 A123456789
payer_ip API body IPv4|IPv6 否 API 使用者提供的實際付款人或產單情境 IP。 203.0.113.20
success_url API body URL 否 付款成功後可導回商戶的網址。 https://merchant.example/success
return_url API body URL 否 相容用回站網址;部分金流會在未提供 success_url 時使用此欄位。 https://merchant.example/return
cancel_url API body URL 否 付款取消或未完成時導回商戶的網址。 https://merchant.example/cancel
payok_url API body HTTPS hostname URL 否 PayCore 確認付款成功後通知商戶的網址;每筆 Request 可自訂網域網址,不接受 IP 位址。 https://merchant.example/payok
locale API body string|max:20 否 付款頁偏好語系。 zh-tw
item_name API body string|max:200 否 商品名稱;依金流官方長度限制安全裁切。 測試商品
description API body string|max:200 否 交易描述;未提供商品名稱時,部分金流會將此欄位作為商品名稱使用。 訂單付款
payer_name API body string|max:100 否 付款人姓名;只有有正式對應欄位的金流才直接帶入。 王小明
payer_mobile API body string|max:30 否 付款人手機號碼。 0912345678
payer_tel API body string|max:30 否 付款人一般電話/市話。 02-12345678
payer_email API body email|max:150 否 付款人 Email。 [email protected]
merchant_custom_field_1 API body string|max:200 否 商戶自訂欄位 1;只映射到官方支援的欄位。 campaign-A
merchant_custom_field_2 API body string|max:200 否 商戶自訂欄位 2;只映射到官方支援的欄位。 note-B
credit_installment API body integer|0,3,6,12,18,24,30 否 信用卡分期期數;目前只有 GoMyPay credit 使用,0 或未填為一般交易。 0
expire_days API body integer|1..60 否 離線付款有效天數。 7
expire_minutes API body integer|60..43200 否 離線付款有效分鐘;有值時通常優先於 expire_days。 1440
cvs_type API body enum 否 超商類型;可用值依金流而定,例如 SmilePay 使用 ibon/fami,均鼎科技 GoMyPay 使用 family/ok/hilife/ibon。 ibon
bank_code API body string|max:10 否 ECPay 背景 ATM 指定銀行代碼的通用名稱。 007
atm_bank_code API body string|max:10 否 ECPay 背景 ATM 銀行代碼相容名稱。 007
ecpay_atm_bank_code API body string|max:10 否 ECPay 背景 ATM 銀行代碼專用欄位名稱。 007
cvs_code API body enum 否 ECPay 背景超商代碼通用名稱。 FAMILY
ecpay_cvs_code API body enum 否 ECPay 背景超商代碼專用欄位名稱。 FAMILY
desc_1 API body string|max:20 否 ECPay 背景付款描述欄位 1。
desc_2 API body string|max:20 否 ECPay 背景付款描述欄位 2。
desc_3 API body string|max:20 否 ECPay 背景付款描述欄位 3。
desc_4 API body string|max:20 否 ECPay 背景付款描述欄位 4。
gateway_credentials API body object 是 該金流的商店憑證;子欄位請查看各 endpoint,禁止放入備註或 Metadata。 {...}

PayCore 自動欄位

欄位 來源 型別 必填 說明 範例
api_request_ip PayCore IPv4|IPv6|null 否 PayCore 在 API 產單當下由 HTTP request 自動取得的呼叫來源 IP;API 使用者不可覆寫。 198.51.100.10
payment_page_first_ip PayCore IPv4|IPv6|null 否 持有效付款 token 第一次開啟 PayCore show/processing/result HTML 頁面時,由 PayCore 自動取得的來源 IP;不代表已驗證真人身分。 203.0.113.30
payment_page_first_seen_at PayCore datetime|null 否 payment_page_first_ip 第一次原子寫入的時間;刷新與 status 輪詢不會覆寫。 2026-07-13T10:30:00+08:00
provider_callback_first_ip PayCore IPv4|IPv6|null 否 金流商對 PayCore 的第一個已驗證 server callback 來源 IP;不包含瀏覽器 Return URL、PayOK 對外通知或無效回調。 192.0.2.40
provider_callback_first_seen_at PayCore datetime|null 否 provider_callback_first_ip 第一次原子寫入的時間;金流重試不會覆寫。 2026-07-13T10:35:00+08:00
payment_no PayCore string 是 PayCore 付款編號。 PAY202607130001ABCDEFGH
gateway URL / PayCore string 是 金流代號,例如 stripe、plus、pfun、gomypay、funpoint。 stripe
method URL / PayCore string 是 該金流下的付款方式 key。 credit
api_key_id PayCore integer 是 由 X-API-KEY 驗證後自動關聯的唯讀欄位;不接受從 API body 傳入。
preferred_locale PayCore string|null 否 由 locale 或 Accept-Language 正規化後的付款頁語系。 zh-tw

共用 Response

欄位 來源 型別 必填 說明 範例
success API response boolean 是 請求是否成功。 true
message API response string 是 人類可讀的結果訊息。 Payment created successfully
data.payment_no API response string 是 PayCore 付款編號。
data.merchant_order_no API response string 是 商戶訂單號。
data.gateway API response string 是 金流代號。
data.method API response string 是 付款方式 key。
data.amount API response integer 是 交易金額。
data.currency API response string 是 交易幣別。
data.status API response string 是 PayCore 付款狀態。 pending
data.payment_method API response string|null 否 PayCore 付款流程分類。
data.payment_url API response URL|null 否 PayCore 付款頁或金流導轉網址。
data.payment_info API response object 否 金流取號、付款頁或前端初始化所需資訊;內容依金流而異。
data.created API response boolean 否 本次是否新建交易;回傳既有有效交易時為 false。
data.paid_at API response datetime|null 否 PayCore 確認付款成功的時間。
data.created_at API response datetime|null 否 PayCore 交易建立時間。
error API response object|string|null 否 失敗時的錯誤碼、欄位錯誤或附加內容。

各金流欄位對照

「僅保存於 PayCore」表示資料會保留在 PayCore 交易紀錄中,但不會傳送至該金流。標示「備用」的欄位,只會在主要對應欄位沒有資料時使用。

PayCore fieldECPaySmilePayStripePayPalPLUSPFun均鼎科技 GoMyPayFunPoint
api_request_ip 僅保存於 PayCore Remark metadata.api_request_ip 僅保存於 PayCore 僅保存於 PayCore ClientIP 備用;有 payer_ip 時另寫 Remark Buyer_Memo 備用 Remark 備用
payer_ip 僅保存於 PayCore Remark metadata.payer_ip 僅保存於 PayCore 僅保存於 PayCore ClientIP(優先) Buyer_Memo 備用 Remark 備用
payment_page_first_ip 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore
provider_callback_first_ip 已驗證 Callback 來源 IP 已驗證 Callback 來源 IP 已驗證簽章來源 IP 已驗證 Webhook 來源 IP 已驗證 Callback 來源 IP 已通過驗證的 Callback 來源 IP 已驗證 str_check 來源 IP 已驗證 CheckMacValue 來源 IP
payer_account 僅保存於 PayCore Pur_name 備用 metadata.payer_account 僅保存於 PayCore payName 組成 僅保存於 PayCore Buyer_Memo 備用 Remark 備用
payer_name 僅保存於 PayCore Pur_name 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore ReceiverName Buyer_Name Remark 備用
payer_mobile 僅保存於 PayCore Mobile_number 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore ReceiverTel(優先) Buyer_Telm(優先) Remark 備用
payer_tel 僅保存於 PayCore Tel_number 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore ReceiverTel 備用 Buyer_Telm 備用 Remark 備用
payer_email 僅保存於 PayCore Email receipt_email 僅保存於 PayCore 僅保存於 PayCore ReceiverEmail Buyer_Mail Remark 備用
payer_identity_no 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore ReceiverID 僅保存於 PayCore 僅保存於 PayCore
item_name ItemName Od_sob PaymentIntent description 備用 商品名稱 僅保存於 PayCore TradeTitle Buyer_Memo 備用 ItemName
description TradeDesc / ItemName 備用 Od_sob 備用 PaymentIntent.description 交易描述 僅保存於 PayCore OrderInfo / TradeTitle 備用 Buyer_Memo TradeDesc / ItemName 備用
merchant_custom_field_1 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore CustomField1 Buyer_Memo 備用 CustomField1
merchant_custom_field_2 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore CustomField2 Buyer_Memo 備用 CustomField2
credit_installment 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore 僅保存於 PayCore TransMode / Installment 僅保存於 PayCore
AJAX LAZY LOAD

選擇左側 API 查看完整內容

為了避免 /developer/api 一次渲染過多表格與程式碼範例,本頁只先載入 API 目錄;點選 endpoint 後才以 AJAX 載入該 API 的完整參數表與範例。

1. 先選金流左側目錄保留所有 gateway / method
2. 再載詳情只載入目前 endpoint 的表格與範例
3. 可直接分享網址會保留目前 API 位置
已經到底囉

Pico 陪你看到這裡了。

需要重新找 API、回到目錄,或再確認串接流程嗎?可以一鍵回到上方搜尋,也可以回到 API 目錄繼續瀏覽。

PayCore 開發者中心已正式公開,文件會持續補齊 Direct Gateway API、All-in-One 收款專案、Webhook 與錯誤碼範例。