簡介
本 OpenAPI 採用 RSA2048 + SHA512withRSA 雙向簽名 進行身份認證與防篡改:請求由商戶私鑰簽名、平台用商戶公鑰驗簽;響應/通知由平台私鑰簽名、商戶用平台公鑰驗簽。傳輸保密由 HTTPS 保證,不再做 jsonData 加密、不使用 token。
金額單位一律為「元」,保留 2 位小數,使用字串傳輸(例:"100.00")。所有請求 Content-Type: application/json,UTF-8。
- OpenAPI documentation -
本 OpenAPI 採用 RSA2048 + SHA512withRSA 雙向簽名 進行身份認證與防篡改:請求由商戶私鑰簽名、平台用商戶公鑰驗簽;響應/通知由平台私鑰簽名、商戶用平台公鑰驗簽。傳輸保密由 HTTPS 保證,不再做 jsonData 加密、不使用 token。
金額單位一律為「元」,保留 2 位小數,使用字串傳輸(例:"100.00")。所有請求 Content-Type: application/json,UTF-8。
sign。jsonData 執行業務並寫審計日誌。防重放:HTTPS + 時間戳 ±5 分鐘視窗 + out_trade_no 業務冪等(重複下單/出金返回同一單,查詢只讀,無資損)。
| 項目 | 說明 |
|---|---|
| businessSubjectId | 商戶編碼,由平台分配(= 商戶後台 ID + 10000),對接時固定使用。 |
| 商戶公鑰 | 商戶自行生成 RSA 2048 金鑰對,將公鑰 PEM 提交給平台(後台「商戶編輯」錄入),私鑰自行保管。 |
| 平台公鑰 | 平台後台「OpenAPI 密鑰」頁取得平台公鑰 PEM 與指紋,用於驗證平台響應與通知。 |
| IP 白名單 | 可在後台配置允許調用的來源 IP(留空=不限制)。 |
| 欄位 | 含義 | 必填 | 說明 |
|---|---|---|---|
| businessSubjectId | 商戶編碼 | 是 | = 商戶 ID + 10000 |
| jsonData | 業務參數 | 是 | 業務 JSON 的明文字串(業務類型由 URL 決定) |
| timestamp | 毫秒時間戳 | 是 | 13 位毫秒,±5 分鐘有效 |
| sign | 簽名 | 是 | 商戶私鑰對簽名串 SHA512withRSA 後 Base64 |
{
"code": "0000",
"message": "success",
"data": {
"businessSubjectId": "10001",
"jsonData": "{...業務返回明文...}",
"timestamp": "1700000000000",
"sign": "平台私鑰簽名(Base64)"
}
}
早期失敗(未知商戶/驗簽失敗/IP 不符等)返回明文錯誤信封,data 為 null,無 sign。
演算法 SHA512withRSA(PHP: OPENSSL_ALGO_SHA512),簽名結果 Base64。
signStr = jsonData + "&" + businessSubjectId + "&" + timestamp sign = base64( RSA_SHA512_sign(signStr, 商戶私鑰) )
響應: jsonData + "&" + businessSubjectId + "&" + timestamp 通知: jsonData + "&" + businessSubjectId + "&" + timestamp + "&" + businessType
實作紅線:驗簽必須針對原始報文中的 jsonData 字串值,禁止把解析後的物件重新 json_encode 再驗——鍵序/轉義一變簽名即失效。請用原始請求體(如 php://input)取 jsonData。
驗簽通過後原樣回顯 jsonData,用於聯通與加簽自測。
| 欄位 | 含義 | 必填 | 說明 |
|---|---|---|---|
| out_trade_no | 商戶訂單號 | 是 | 商戶側唯一,冪等鍵 |
| amount | 金額 | 是 | 元,2 位小數字串 |
| productname | 商品名稱 | 否 | |
| notify_url | 異步通知地址 | 否 | 收款成功後平台回調 |
| callback_url | 頁面跳轉地址 | 否 | |
| attach | 附加資料 | 否 | 原樣回傳 |
| 欄位 | 含義 | 說明 |
|---|---|---|
| out_trade_no | 商戶訂單號 | |
| transaction_id | 平台訂單號 | |
| amount | 金額 | |
| bank_code | 收款銀行代碼 | 下游向此卡付款 |
| branch_code | 分行代碼 | |
| account_no | 收款卡號 | |
| account_name | 收款戶名 | |
| expire_at | 逾時時間 | YYYY-mm-dd HH:ii:ss |
| expire_seconds | 剩餘秒數 |
同一 out_trade_no 重複下單返回同一訂單與同一張卡(冪等,不重複鎖卡)。
收款成功時,平台以信封格式 POST 到 notify_url,businessType=COLLECT_NOTIFY(參與簽名)。商戶用平台公鑰驗簽後,回傳純文字 SUCCESS 即停止;否則平台最多重試 5 次(每整點 1 次)。
| 欄位 | 含義 |
|---|---|
| out_trade_no | 商戶訂單號 |
| transaction_id | 平台訂單號 |
| amount | 金額 |
| status | success |
| datetime | 時間 YmdHis |
| attach | 附加資料 |
| 欄位 | 含義 | 說明 |
|---|---|---|
| out_trade_no | 商戶訂單號 | |
| transaction_id | 平台訂單號 | |
| amount | 金額 | |
| trade_state | 交易狀態 | SUCCESS / NOTPAY |
| time_end | 成功時間 | 成功時返回 |
| 欄位 | 含義 | 必填 | 說明 |
|---|---|---|---|
| out_trade_no | 商戶訂單號 | 是 | 冪等鍵 |
| amount | 出金金額 | 是 | 元,2 位小數字串 |
| account_no | 客戶卡號 | 是 | |
| account_name | 客戶戶名 | 是 | |
| bank_name | 客戶銀行 | 是 | |
| branch_name | 客戶分行 | 否 | |
| province / city | 省 / 市 | 否 | |
| notify_url | 異步通知地址 | 否 | |
| attach | 附加資料 | 否 | 原樣回傳 |
| 欄位 | 含義 | 說明 |
|---|---|---|
| trade_no | 平台出金單號 | |
| out_trade_no | 商戶訂單號 | |
| amount / fee | 金額 / 手續費 | |
| status | 狀態碼 | 0 待審核 1 已放款 2 已駁回 3 放款中 |
| status_text | 狀態文字 | |
| reject_reason | 駁回原因 |
出金放款/駁回時,平台以信封格式 POST 到 notify_url,businessType=PAYOUT_NOTIFY(參與簽名)。商戶驗簽後回 SUCCESS 停止;最多 5 次、每整點重試。
| 欄位 | 含義 |
|---|---|
| out_trade_no / trade_no | 商戶單號 / 平台單號 |
| amount / fee | 金額 / 手續費 |
| status | success / fail |
| reject_reason | 駁回原因 |
| attach / datetime | 附加資料 / 時間 |
| code | 含義 |
|---|---|
| 0000 | 成功 |
| 4001 | 參數缺失/非法 |
| 4002 | 驗簽失敗 |
| 4003 | 時間戳過期 |
| 4004 | 來源 IP 不允許 |
| 4005 | 商戶不存在/未配公鑰/已停用 |
| 5000 | 業務失敗 |
| 5001 | 餘額不足 |
收款(銀行卡)渠道編碼為 999。如需指定可在下單 jsonData 傳 pay_bankcode,預設 999。
官方 PHP Demo:docs/sdk/openapi_demo.php;凍結測試向量(測試金鑰 + 已知 jsonData/timestamp → 期望 sign):docs/sdk/test_vector.json(由自檢工具 php cli.php openapiSelfTest 產生)。
POST /Openapi_Debug_ping.html
Content-Type: application/json
{
"businessSubjectId": "10001",
"jsonData": "{\"msg\":\"hello\",\"n\":1}",
"timestamp": "1700000000000",
"sign": "<商戶私鑰 SHA512withRSA 簽名(Base64)>"
}
{"msg":"hello","n":1}&10001&1700000000000
獲取最新接入能力與專屬邀請,直達您的信箱。