Payment Completed
Description
付款完成。
Resource
PATCH /v1/order/payment_completed
Authorization
採用 OAuth 2.0 Bearer Token,詳細使用流程請參考 Auth Login。
Request Body Parameters
| Name | Type | Description |
|---|---|---|
| id | string | 訂單編號 |
| store_id | string | 門市代碼 |
| payments | Payment[] | 付款資訊 |
| receipt | Receipt | 發票資訊 |
| kiosk_id | string | KIOSK的機號 (optional) |
Request Body Parameters - Payment
| Name | Type | Description |
|---|---|---|
| type | Payment | 付款方式 |
| payment_amount | integer | 支付金額 |
| transaction_id | integer | 交易代碼 (optional) |
| relate_id | integer | 其他代碼 (optional) |
| customize | Customize | 自定義金流 (optional) *若 type 為 CUSTOMIZE 需必填 |
Request Body Parameters - Customize
| name | type |
|---|---|
| id | 自定義金流代碼 |
| name | 自定義金流名稱 |
Request Body Parameters - Payment Instruction
| type | name |
|---|---|
| LINE_PAY | LINE Pay |
| PI_PAY | Pi Pay |
| CREDIT_CARD | 信用卡 |
| EASY_CARD | 悠遊卡 |
| CASH | 臨櫃結帳 |
| MWD_PAY | 麥味登Pay |
| Easy_Wallet | 悠遊付 |
| APPLE_PAY | Apple Pay |
| GOOGLE_PAY | Google Pay |
| NCCC_EASY_CARD | NCCC悠遊卡 |
| NCCC_IPASS | NCCC一卡通 |
| NCCC_ICASH | NCCC iCash |
| NCCC_HAPPY_CASH | NCCC有錢卡 |
| CASH_CAR | 現金 |
| CHARGE_CARD | 簽帳 |
| MOTORCADE | 車隊 |
| CREDIT_CARD_CAR | 信用卡 |
| CTBC_CARD | 中信卡 |
| BARCODE_PAY | 條碼支付 |
| TAIWAN_PAY | 台灣 Pay |
| JkoPay | 街口支付 |
| CUSTOMIZE | 自定義金流 |
| TK01 | 門票折抵 |
| HAO_SPEED | 全家外送自取 |
| EC | EC |
| HSA_EXTRA | 異質POS |
| PX_PAY | 全支付 |
| CASH_ON_DELIVERY | 貨到付款 |
| NEWEB_PAY | 藍新金流 |
| CASH_MODULE | 現金模組 |
| I_CASH_PAY | 愛金卡支付 |
| DD_PAY | 信用卡(DD_PAY) |
Request Body Parameters - Receipt
| Name | Type | Description |
|---|---|---|
| type | string (enum) |
發票類型 ALLOWED VALUES:
(optional) |
| tax_ID_number | string | 統一編號 (optional) |
| npoban | string | 捐贈碼 (https://i.imgur.com/5LAsOF4.jpg) (optional) |
| carrier_type | string | 買方載具類別 (optional) |
| carrier | string | 買方載具 (optional) |
| take_number | bool | 是否開立發票 |
| use_member_carrier | bool | 使用會員載具 (optional) |
Request Example
{
"id": "STORE2005010001",
"store_id": "A01",
"payments": [
{
"type": "CASH_MODULE",
"payment_amount": 100
}
],
"kiosk_id": "k01",
"receipt": {
"type": "PAPER",
"tax_ID_number": "24436074",
"npoban": "",
"carrier_type": "",
"carrier": "",
"take_number": true,
"use_member_carrier": false
}
}
Response
Status-Code: 204 No Content
Payment Completed API Workflow
sequenceDiagram
%%{init: {'securityLevel': 'loose', 'theme': 'base'}}%%
autonumber
participant C as Client
participant OP as OmniPlatform
participant R as repository
C ->> OP: Request [PATCH] /v1/order/payment_completed
OP ->> OP: Call self.check_params_process(params)
alt 請求參數缺少必填欄位
OP -->> C: Return(400, f"{column} 不可為空")
end
OP ->> OP: auth_data = get_auth_info(bearer)
OP ->> OP: company_id = get_company_id(auth_data)
Note over OP, R: 檢查 order00 的 status 是否合法 (1:待審核、2:POS已接單、A:店長APP已接單)
OP ->> R: Call get_order00_status(company_id, shop_id, order_id)
R -->> OP: order_status
alt order_status not in allow_order_status
OP -->> C: Return Response(400, {'message': '訂單狀態錯誤,無法更新訂單'})
end
Note over OP, R: 更新 order00 的 payments_term = 1、receipt_type = 1 及其他選填參數
OP ->> R: Call update_order00_for_cash_kiosk(update_params)
Note over OP, R: 新增 order02 pay_id、isinv = 1、is_paid = 1、counter_to_online_payment = 1 與其他選填參數
OP ->> OP: client_device = self.get_client_device_by_orderid(self.company_id, params['order_id'])
OP ->> OP: pay_id = PayID().get_pay_id(client_device, payments['type'])
OP ->> OP: order02_df = handle_order02_data(payments)
OP ->> R: Call insert_order02(order02_df)
Note over OP, R: 若 params['receipt']['take_number'] = True 則進行 OrderCreate 的開立發票流程
alt params['receipt']['take_number']
OP ->> R: Call repository.get_order00_info(self.company_id, params['store_id'], params['id'])
R -->> OP: order00
OP ->> OP: handle_receipt(params, order00)
end
Note over OP, R: 若未設定 UniPOS 網址 且訂單狀態等於 2 則與 POS 進行訂單同步
alt external_pos_url == '' and order_status == '2'
OP ->> OP: status_code, response_data = payment_completed_sync_order()
Note over OP, R: 若POS訂單同步成功,更新全通路訂單狀態 = 4
alt status_code == 200 and response_data.get('code', '') == '0'
OP ->> OP:update_order_status()
end
end
Note over OP, R: 若有設定 UniPOS 網址,則發送 order_change 的 webhook
alt external_pos_url != ''
OP ->> OP: send_order_change_webhook()
OP ->> OP:update_order_status()
end
OP -->> C: Return Response(204)