開發指南

一、API介紹

API 種類說明必要
付款APIPOS 商透過掃碼設備取得用戶的支付條碼後,向街口支付發起付款請求,取得支付結果,透過商店端交易序號(MerchantTradeNo)作為請求唯一值,若請求重複則會返回相同交易處理結果。Y
取消APIPOS 商系統超時未收到支付結果(超過15秒),向街口支付發起取消請求,取消該次交易,若未收到取消結果可多次輪循確保雙方交易結果一致性,取消成功後可再次發起新交易請求。Y
退款APIPOS 商根據實際業務情境,向街口支付發起退款請求,對原街口端交易序號進行退款,支持多次部分退款,但退款金額不可超過原支付金額。Y
查詢APIPOS 商對於交易結果進行查詢,需於交易發生後 15 秒後方可進行,確保查詢交易已經執行完畢。N

二、流程說明

(1) 店家商戶建立業務商品訂單

店家生成業務商品訂單,並與用戶溝通商品的支付金額

(2) 用戶出示街口支付支付條碼

用戶打開街口支付 APP,提供付款碼讓店家端進行條碼掃描,掃碼設備將支付條碼傳入店家系統中

(3) 店家發起付款 API 請求

店家系統將支付條碼以及相關的支付訊息,完成加簽後,向街口支付發起支付請求

(4) 付款結果通知

街口支付處理完交易流程後,返回交易結果給到店家系統,並於用戶 APP 展示支付結果給到用戶

(5) 店家退款發起API請求

若於交易流程後,用戶有額外退款的要求,店家系統將相關退款訊息,完成加簽後,由店家系統發起退款 API 請求

(6) 交易結果查詢

若店家系統有出現交易狀態不明確時,可以透過查詢 API 來確定交易結果


三、交易異常處理

方案一:取消 API 取消訂單

若店家端於付款 API 當下發生超時行為或者是系統失敗錯誤,無法確定交易狀態結果為何,於系統超時(15秒後),向街口發起交易取消,若未收到取消結果,可進行多次取消輪循,確保交易實際會取消成功,並線下由店員與用戶重新溝通發起第二次交易請求,街口方收到取消 API 請求後,會進行交易中斷處理,避免用戶發生重複扣款的行為,取消 API 於線下支付場景中,對於支付時效性的要求十分的高,因此為所有商戶必做的功能之一。

方案二:查詢 API 查詢結果

若店家端於付款 API 當下發生超時行為或者是系統失敗錯誤,無法確定交易狀態結果為何,於系統超時(15秒後),向街口發起交易查詢,若未收到交易查詢結果,可進行多次取消輪循,由於部分店家實作線下交易並非時效性要求較高(如停車場繳費設備等),因此可透過交易查詢 API 來進行實作,但若為用戶與店員面對面交易,建議一律採用取消 API 實作為主,獲得更快的處理效能

上述兩方案若交易失敗原因為業務原因(如:銀行餘額不足、用戶當月可支付額度不足),POS 系統商應展示交易失敗原因給到店員進行查看


四、系統實作說明

(1) 特店代碼(MerchantCode)以及店鋪代碼(StoreID)差別

特店代碼是由街口方提供的參數,主要是用來街口用來區分合作特店為誰,會需要根據雙方業務合作條件來建立對應的特店代碼,一般而言,特店代碼的編立與合作公司的統編相同,店鋪代碼則是由店家端系統參數所建立的,對於街口而言店鋪是交易歸屬的最基礎單位,後續街口會根據財務需求進行對應店鋪的歸屬,一般而言,店鋪代碼是根據店家對於交易的歸屬進行拆分的單位。

(2)商店端交易序號(MerchantTradeNo)的業務含義

對於店家端而言,交易時會先成立商品訂單號(例如:一份餐點、一瓶水等等),該筆商品允許使用多種支付方式,對於街口而言,每一筆的商店端交易序號代表著交易流水號,每一筆新的單號會視為一次新的支付請求,因此務必確保交易序號為唯一值,避免用戶發生重複扣款的情境,若於付款 API 發生交易序號重複的情況,街口方會返回原先交易序號的交易結果,因此需要商店端實作何時該判斷唯一個新的交易請求。

需要特別注意,在付款 API 以及退款 API 中,雖然同時需要店家端傳輸 MerchantTradeNo,但是兩者業務含義不同,一個是付款流水號,另一個則為退款流水號,在退款 API 中,由於存在部分退款的情境,因此若為多次部分退款,需要每次變更不同的退款流水號。

(3) 不可折抵金額(unredeem)說明

在業務情境中,部分交易不允許使用折抵方式(例如:菸、酒等商品),由於街口有多種折抵方式,若店家端不允許該筆交易使用折抵方式,則需要在付款請求時帶入對應的不可折抵金額

(4) 折抵方式(redeemName)說明

在業務情境中,折抵方式可區分為街口折抵、店家折抵、街口折抵加上店家折抵,對於交易端而言並無影響,對於店家帳務端而言,折抵方式區分的主要目的為折抵金額實際承擔方為誰,街口折抵代表該折抵金額由街口來承擔,店家折抵則為店家承擔,該欄位是否出現需要依照雙方業務合作行銷模式而定。

(5) 載具付款合併說明

街口會於付款完成後傳輸載具,店家端可於系統中實作商品付款後,自行上傳雲端發票,不需要用戶另行出示載具條碼提供給到店家進行二次掃描,加速整體結帳速度。

(6) 取消 API 與退款 API 實作差異

取消 API 的應用情境主要用於系統超時以及失敗,針對原先交易不明確的情況進行整單取消處理,避免重複扣款以及加速整體支付時效用途,且街口方會針對取消 API 去做特別監控,避免異常發生,而退款 API 的應用主要是針對於用戶真實需要發起退款,店家系統方需要傳輸退款訂單號,作為後續對帳處理用,因此實作部分需要店家按照個別情境來分別處理。