Server APIs
Overview
我們的後台使用的是 REST 架構,所以每個請求皆是使用 HTTP POST 來進行傳輸
Pay by Prime API
非3D交易流程
3D驗證交易流程
當您要進行3D驗證交易,請在Request欄位中的three_domain_secure帶入true,且在result_url的frontend_redirect_url與backend_notify_url分別帶入對應的值。
建議您在收到frontend redirect 後,於前端顯示交易結果頁面給消費者前,打 Record API(以 rec_trade_id 作為搜尋條件)進行反查確認交易狀態,以避免您因意外狀況未收到 Backend Notify 而發生交易狀態不一致問題。
- 利用前端所取得的 prime 字串進行交易
- 每個 prime 字串只可使用一次,因此每次呼叫此 API 前都必須重新取得一個 prime 字串
- 若將 remember 設為 true 記憶卡號,則會獲得 card_key 和 card_token,以後即可省去 createToken 這個步驟並改為呼叫 Pay by Card Token 來進行交易。亦可使用 card_key 和 card_token 來進行定期定額扣款,存下此兩個參數後,即可定期呼叫 Pay by Card Token 進行定期定額扣款,且呼叫的週期與金額可自行決定。Apple Pay、Google Pay、Samsung Pay、JKOPAY、悠遊付、Atome、Pi 錢包、全盈支付 不支援此功能
- 由於尖峰時段銀行方面可能會花較久時間處理,因此請將 timeout 時間設定為 30 秒以避免交易資訊不同步
名稱(* = 必填) | 類別(長度) | 內容 | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
prime* | String(71) | 用卡號所換得的字串,由 getPrime 成功時回傳 prime 的時效為 90秒 若您有開啟 Apple Pay 延後授權,請自行保管 Prime(預設 Prime 有效期限為 30 天) 呼叫 Pay By Prime ,您可以在 sandbox 環境中使用此測試用prime
|
||||||||||||||||||||||||||||||||||||
partner_key* | String(64) | 綁定 Portal 帳戶的驗證金鑰 | ||||||||||||||||||||||||||||||||||||
merchant_id* | String(50) | 於 Portal 登錄商家時所產生的識別碼 | ||||||||||||||||||||||||||||||||||||
merchant_group_id | String(50) | 於 Portal 設置的商家管理設置,交易時會依據 portal 的支付配置進行交易 不可與 merchant_id 同時使用 |
||||||||||||||||||||||||||||||||||||
amount* | int | 交易金額。目前支援台幣、港幣、馬幣、美金,台幣以外金額需乘以 100後帶入,各幣別交易金額上限,請參考 reference | ||||||||||||||||||||||||||||||||||||
merchandise_details | JSONObject | 交易商品明細 目前只支援 JKOPAY 悠遊付 全盈支付
|
||||||||||||||||||||||||||||||||||||
currency | String(3) | 貨幣種類,銀行支援幣別請參考 reference,預設為 TWD | ||||||||||||||||||||||||||||||||||||
order_number | String(50) | 您自定義的訂單編號,用於 TapPay 做訂單識別,可重複帶入 格式請參考 reference。若有帶入此欄位,則不能為空 |
||||||||||||||||||||||||||||||||||||
bank_transaction_id | String(40) | 銀行端的訂單編號 強烈建議商戶可在此自訂,但不能與之前的重複;若您沒有自訂則會自動幫您產生一組。 但若您沒自訂,當發生421 Gateway 操作逾時(發生機率低),則無法反查該筆交易 (格式規格請參考備註 reference) |
||||||||||||||||||||||||||||||||||||
details* | String(100) | 交易品項內容,為符合 PCI 要求至少必須要有品項名稱 我們的詐欺檢測器將會以此作為詐欺判定的基準,所以建議您填寫的資訊能越詳細越好 銀行儲存格式規格請參考 reference 若您啟用TSP服務,且收單銀行為台新銀行,請務必填入交易品項內容; 若沒帶入,TapPay將預設該值為交易序號以避免交易失敗 若您的收單銀行為藍新金流或支付方式為LINE Pay, Atome,此欄位須填入值,否則會導致交易失敗 |
||||||||||||||||||||||||||||||||||||
cardholder* | JSONObject | 持卡人或購買人資訊,裡面應包含以下值。 以下資料將為「詐欺檢測器」,資料越詳細,可獲得越完整的保護 若此筆交易需身份驗證,請詳讀備註中各銀行需驗證的必填欄位,並在對應的參數欄位中帶入正確的值 若無此資料,則該對應的 Key 值,可以帶空字串,(如:zip_code: “”)
|
||||||||||||||||||||||||||||||||||||
cardholder_verify | JSONObject | 身份驗證欄位,請注意:若此筆交易需身份驗證,請詳讀備註中各銀行需驗證的必填欄位,若該欄位為 “true” ,則會將 cardholder 欄位對應之資訊送至收單機構進行身份驗證。 若要進行兩段式身份驗證,務必於 kyc_verification_merchant_id 填入您於Portal的商家管理 > KYC 驗證商家設置的merchant ID 如使用 AE 卡進行驗證,將會扣除 1 元,並於兩週內會退還。 您可以在 sandbox 環境中使用備註中的測試用身分證字號及電話號碼 支援: Direct Pay 有以下兩種使用情境
驗證欄位
|
||||||||||||||||||||||||||||||||||||
kyc_verification_merchant_id | String | 此欄位請填入僅供身份驗證,無授權功能的merchant ID。 支援產業:電支產業/ 產壽險業 |
||||||||||||||||||||||||||||||||||||
instalment | int(2) | 分期付款期數,預設為 0 目前支援: 台新銀行, 財團法人聯合信用卡處理中心, 藍新金流, 國泰世華銀行, 玉山銀行, 中國信託銀行, 環匯亞太, 聯邦銀行 不支援: Apple Pay, Google Pay, Samsung Pay, LINE Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 由於 Atome 不可選擇分期期數,結帳時 Atome 即自動分成三期,故此欄位不支援 Atome |
||||||||||||||||||||||||||||||||||||
delay_capture_in_days | int | 定義交易授權後銀行要過多久才會請款,單位為天 此參數非必要,預設值為0(當天請款) 若您想要自行手動請款,可帶入 -1 表示暫時不請款 * 收單銀行皆設有請款期限,請向您的收單銀行確認。若您採取手動請款模式,請留意如果該筆交易的請款日超過銀行請款期限,可能會導致請款失敗。 |
||||||||||||||||||||||||||||||||||||
three_domain_secure | Boolean | 是否開啟 3D 驗證,預設為 false 目前支援: 台新銀行、中國信託銀行、財團法人聯合信用卡處理中心、玉山銀行、永豐(New)、藍新金流、富邦、RAZER PAY、彰化銀行、國泰世華銀行、聯邦銀行 3DS2.0 驗證目前只支援AE 卡交易且收單行為財團法人聯合信用卡處理中心 不支援: Apple Pay, Google Pay, Samsung Pay, LINE Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 |
||||||||||||||||||||||||||||||||||||
result_url | JSONObject | 使用 LINE Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 或 three_domain_secure 為 true 時必填
|
||||||||||||||||||||||||||||||||||||
remember | boolean | 是否記憶卡號 不支援: Apple Pay, Google Pay, Samsung Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 LINE Pay 交易 remember: true 時,只支援使用 POINT 與信用卡 |
||||||||||||||||||||||||||||||||||||
redeem | boolean | 是否為紅利折抵。 目前支援: 財團法人聯合信用卡處理中心 不支援: Apple Pay, Google Pay, Samsung Pay, LINE Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 |
||||||||||||||||||||||||||||||||||||
additional_data | JSONString(3000) | 資料會加密保存,並在其他客製化需求時才解密做使用 | ||||||||||||||||||||||||||||||||||||
event_code | String(50) | 與銀行或錢包合作之活動中,雙方協議的指定活動代碼。支援 : 悠遊付 | ||||||||||||||||||||||||||||||||||||
product_image_url | String(500) | 交易付款頁面上所顯示的商品或商家圖片。此欄位等同於line_pay_product_image_url, 若您於呼叫時同時帶入 product_image_url 與line_pay_product_image_url,TapPay 將以product_image_url 欄位的內容為主。格式規格請參考備註 reference | ||||||||||||||||||||||||||||||||||||
jko_pay_insurance_policy | StringArray | 街口支付產壽險交易,保單明細 支援: JKOPAY 當使用 JKOPAY 進行產壽險交易時,以下欄位皆為必填
|
||||||||||||||||||||||||||||||||||||
extra_info | JSONObject | 額外資訊 支援: Atome
|
// *** 格式 ***
// 測試環境 URL: https://sandbox.tappaysdk.com/tpc/payment/pay-by-prime
// 正式環境 URL: https://prod.tappaysdk.com/tpc/payment/pay-by-prime
// Header:
// Content-Type: application/json
// x-api-key: YourPartnerKey
{
"prime": String,
"partner_key": String,
"merchant_id": "merchantA",
"details":"TapPay Test",
"amount": 100,
"cardholder": {
"phone_number": "+886923456789",
"name": "王小明",
"email": "LittleMing@Wang.com",
"zip_code": "100",
"address": "台北市天龍區芝麻街1號1樓",
"national_id": "A123456789"
},
"remember": true
}
Response
名稱 | 類別(長度) | 內容 | ||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
status | int | 交易代碼,成功的話為0 | ||||||||||||||||||||||||||||||||||||
msg | String | 錯誤訊息 | ||||||||||||||||||||||||||||||||||||
rec_trade_id | String(20) | 由 TapPay 伺服器產生的交易字串 將於退款時用到,請妥善保管 |
||||||||||||||||||||||||||||||||||||
bank_transaction_id | String(40) | 銀行端的訂單編號 強烈建議商戶可在此自訂,但不能與之前的重複;若您沒有自訂則會自動幫您產生一組。 但若您沒自訂,當發生421 Gateway 操作逾時(發生機率低),則無法反查該筆交易 格式規格請參考 reference |
||||||||||||||||||||||||||||||||||||
bank_order_number | String | 銀行或錢包端於授權時回傳的訂單編號 支援:悠遊付, Pi錢包 各支援銀行或錢包回傳長度限制,請參考 Reference |
||||||||||||||||||||||||||||||||||||
auth_code | String(6) | 銀行授權碼,不支援:LINE Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 | ||||||||||||||||||||||||||||||||||||
card_secret | JSONObject | 卡片保管資訊。不支援:Apple Pay, Google Pay, Samsung Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 如果呼叫時 remember = false 則不會回傳此物件 透過 LINE Pay 獲得的 card key 與 card token,若在 180 天內無成功交易,將會過期導致交易失敗 裡面包含以下值:
|
||||||||||||||||||||||||||||||||||||
amount | int | 交易金額,台幣以外金額需乘以 100,如港幣(HKD) 1元代表 100 | ||||||||||||||||||||||||||||||||||||
currency | String(3) | 貨幣種類,銀行支援幣別請參考reference 不支援:LINE Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付 |
||||||||||||||||||||||||||||||||||||
card_info | JSONObject | 卡片資訊。不支援: LINE Pay, JKOPAY, 悠遊付, Atome, Pi錢包, 全盈支付
|
||||||||||||||||||||||||||||||||||||
order_number | String(50) | 您自定義的訂單編號,用於 TapPay 做訂單識別,可重複帶入 格式請參考 reference |
||||||||||||||||||||||||||||||||||||
acquirer | String | 收單銀行 / 金流處理器 | ||||||||||||||||||||||||||||||||||||
transaction_time_millis | long | 交易時間 | ||||||||||||||||||||||||||||||||||||
bank_transaction_time | JSONObject | 銀行處理時間 | ||||||||||||||||||||||||||||||||||||
bank_result_code | String(40) | 銀行回傳的交易結果代碼 | ||||||||||||||||||||||||||||||||||||
bank_result_msg | String(300) | 銀行回傳的交易結果訊息 | ||||||||||||||||||||||||||||||||||||
payment_url | String | 付款頁面網址,將此網址回傳至前端跳轉 不支援:Apple Pay, Google Pay, Samsung Pay |
||||||||||||||||||||||||||||||||||||
instalment_info | JSONObject | 非 3D 驗證交易,且使用分期付款時回傳 不支援:Apple Pay, Google Pay, Samsung Pay, LINE Pay, JKOPAY, 悠遊付, Atome, Pi 錢包, 全盈支付
|
||||||||||||||||||||||||||||||||||||
redeem_info | JSONObject | 非 3D 驗證交易,且使用紅利折抵時回傳 不支援:Apple Pay, Google Pay, Samsung Pay, LINE Pay, JKOPAY, 悠遊付, Atome, Pi 錢包, 全盈支付
|
||||||||||||||||||||||||||||||||||||
card_identifier | String | 不支援:Apple Pay, Google Pay, Samsung Pay, LINE Pay, JKOPAY, 悠遊付, Atome, Pi 錢包, 全盈支付 信用卡識別碼。每張信用卡只會對到一組識別碼。 |
||||||||||||||||||||||||||||||||||||
merchant_reference_info | JSON | 商戶參考資訊
|
||||||||||||||||||||||||||||||||||||
event_code | String(50) | 與銀行或錢包合作之活動中,雙方協議的指定活動代碼。支援 : 悠遊付 | ||||||||||||||||||||||||||||||||||||
is_rba_verified | Boolean | 該交易有無取得 RBA 評估的風險分數RBA 可以為每筆交易評估風險,以辨認和防止偽冒交易發生。該產品即將上線,您可以參考 TapPay 官網更了解 RBA 這項服務。 | ||||||||||||||||||||||||||||||||||||
transaction_method_details | JSONObject | 交易方式細節 RBA 可以為每筆交易評估風險,以辨認和防止偽冒交易發生。該產品即將上線,您可以參考 TapPay 官網更了解 RBA 這項服務。
|
Refund API
- 此 API 能讓您用後台直接進行退款,會同時做取消授權及取消請款的動作
若您有部分退款的需求,則必須呼叫此 API
- 由於尖峰時段銀行方面可能會花較久時間處理,因此請將 timeout 時間設定為 30 秒以避免交
易資訊不同步
- 當您呼叫此 API 時,TapPay 將於當日向銀行進行退款,不代表當日退款已成功。
實際退款是否成功,請於退款隔天利用 TapPay 後台或 Record API 查詢交易狀態進行確認。 - 為確保交易狀態一致,當銀行/錢包在請款中不支援取消授權,需等TapPay收到銀行回覆(時間請參考Each bank capture time),確認該筆交易狀態後才能進行後續動作
名稱(* = 必填) | 類別(長度) | 內容 | ||||||
---|---|---|---|---|---|---|---|---|
partner_key* | String(64) | 綁定 Portal 帳戶的驗證金鑰 | ||||||
rec_trade_id* | String(20) | 欲退款的交易字串,任何一筆交易成功時皆會回傳 | ||||||
bank_refund_id | String(20) | 商戶定義的退款紀錄識別碼(需為半形的英數字),不可重複。 支援:玉山銀行, Atome |
||||||
amount | int | 退款金額,全額退款可不用填此參數 外幣金額需包含兩位小數,如 100 代表 1.00 部分退款才需要填寫 |
||||||
additional_data | JSONString(3000) | 資料會加密保存,並在其他客製化需求時才解密做使用。 | ||||||
merchandise_details | JSONObject | 交易商品明細,目前只支援悠遊付
|
// *** 格式 ***
// 測試環境URL: https://sandbox.tappaysdk.com/tpc/transaction/refund
// 正式環境URL: https://prod.tappaysdk.com/tpc/transaction/refund
// Header:
// Content-Type: application/json
// x-api-key: YourPartnerKey
{
"partner_key": String,
"rec_trade_id": String,
"amount": int // 非必填
}
Response
名稱 | 類別 | 內容 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
status | int | 交易代碼,成功的話為0 | |||||||||
msg | String | 錯誤訊息 | |||||||||
refund_id | String | 退款紀錄的識別碼 | |||||||||
bank_refund_order_number | String | 銀行或錢包端於退款時回傳的退款編號 支援:悠遊付, Atome, Pi錢包, 全盈支付 各支援銀行或錢包回傳長度限制,請參考 Reference |
|||||||||
refund_amount | int | 退款金額 台幣以外金額需乘以 100,如港幣(HKD) 1元 請帶 100 |
|||||||||
refund_info | JSONObject | 退款資訊 僅限於錢包交易才會回傳。此欄位主要顯示在執行退款時,錢包端返還的點數及金額資訊。 若一筆交易同時使用現金和點數折抵來付款,退款後會依據各錢包本身規則決定優先返還點數或是金額。 目前僅支援 :全盈支付
|
|||||||||
is_captured | boolean | 是否已請款 | |||||||||
bank_result_code | String(40) | 銀行回傳的交易結果代碼 | |||||||||
bank_result_msg | String(300) | 銀行回傳的交易結果訊息 | |||||||||
currency | String(3) | 貨幣種類(ISO 4217)。銀行支援幣別請參考 reference |
Record API
此 API 能讓您用您的後台直接進行查詢交易紀錄
名稱(* = 必填) | 類別(長度) | 預設 | 內容 |
---|---|---|---|
partner_key* | String(64) | 綁定 Portal 帳戶的驗證金鑰 | |
records_per_page | int | 50 | 每頁的交易數量,最大為 200 |
page | int | 0 | 第幾頁交易 |
filters | JSONObject | 沒有限制 | 交易紀錄的限制,有以下幾種可能: time* 起始到結束時間上限為 90 天 amount cardholder merchant_id record_status rec_trade_id order_number bank_transaction_id auth_code currency tsp card_identifier |
order_by | JSONObject | attribute = time is_descending = true |
排序的方式 |
// *** 格式 ***
// 測試環境 URL: https://sandbox.tappaysdk.com/tpc/transaction/query
// 正式環境 URL: https://prod.tappaysdk.com/tpc/transaction/query
// Header:
// Content-Type: application/json
// x-api-key: YourPartnerKey
{
"partner_key": String,
"records_per_page": int,
"page": int,
"filters": {
"time": {
"start_time": long,
"end_time": long
},
"amount": {
"upper_limit": int,
"lower_limit": int
},
"cardholder": {
"phone_number": String,
"name": String,
"email": String
},
"merchant_id": [String],
"record_status": int,
"rec_trade_id": String,
"order_number": String,
"bank_transaction_id": String,
"currency": String
},
"order_by": {
"attribute": String, // "time"(時間排序) 或 "amount"(金額排序)
"is_descending": boolean
}
}
Response
名稱 | 類別 | 內容 |
---|---|---|
status | int | 交易代碼 2 的話代表在當前過濾條件內,已無更多紀錄 |
msg | String | 錯誤訊息 |
records_per_page | int | 每頁的交易數量,最大為 200 |
page | int | 第幾頁交易 |
total_page_count | int | 總頁數 |
number_of_transactions | long | 總交易筆數 |
trade_records | JSONArray | 交易紀錄 |