---
# System prepended metadata

title: ODO 第三方付款串接

---

ODO 第三方付款串接
===
[toc]

### Introduction
ODO 允許第三方自行處理交易付款流程，處理完成後，將付款資料透過 API 傳送到 ODO 平台，這個付款請求的流程是：
```flow
st=>start: Start
op1=>operation: 顧客透過第三方APP點餐
op2=>operation: 顧客完成用餐
op3=>operation: 顧客透過第三方APP結帳
op4=>operation: 店員於POS收到結帳請求
cond1=>condition: 使用POS結帳?
op5a=>operation: POS完成收款
op8a=>operation: POS賬單成功結帳
op6a=>operation: POS通知ODO平台收款成功
op7a=>operation: ODO平台通知第三方APP收款成功
op5b=>operation: 第三方APP完成收款
op8b=>operation: 第三方APP傳送付款資料給ODO平台
op6b=>operation: ODO平台通知POS收款成功
op7b=>operation: POS賬單成功結帳
e=>end: End

st->op1->op2->op3->op4->cond1
cond1(yes)->op5a->op8a->op6a->op7a->e
cond1(no)->op5b->op8b->op6b->op7b->e
```
### Web API
:::info 
**POST** /api/orders/paid
:::
1. 傳入 OrderToken 找出 OrderTokenMaster，並用其 LinkedTableId、LinkedOrderId 取得最新的 OrderTokenMaster 
2. 將傳入的 OnlinePaymentDetailList 存進資料庫
3. 將最新的 OrderTokenMaster OrderStatusId 調整為 PAID

:::success
**GET** /api/orders/paid/next 
:::

1. 取得 OrderStatusId 為 PAID 的 OrderTokenMaster
2. 回傳 OrderToken 以及 OnlinePaymentDetailList

:::warning
**PATCH** /api/orders/paid
:::

1. 傳入 OrderToken 找出 OrderTokenMaster
2. 將 OrderTokenMaster OrderStatusId 調整為 COMPLETED

:::info
**POST** /api/orders/checkout
:::

1. 傳入 OrderToken 找出 OrderTokenMaster，並用其 LinkedTableId、LinkedOrderId 取得最新的 OrderTokenMaster 
2. 將最新的 OrderTokenMaster OrderStatusId 調整為 WAIT_FOR_CHECKOUT

:::success
**GET** /api/orders/checkout/next
:::

1. 取得 OrderStatusId 為 WAIT_FOR_CHECKOUT 的 OrderTokenMaster
2. 回傳 OrderToken

:::warning
**PATCH** /api/orders/checkout
:::
1. 傳入 OrderToken 找出 OrderTokenMaster
2. 將 OrderTokenMaster OrderStatusId 調整為 WAIT_FOR_PAYMENT

### ODO Server

#### 處理已付款訂單流程
```flow
st=>start: Start
e=>end: End
op=>operation: Call /api/orders/paid/next 
op2=>operation: 將 OnlinePaymentDetailList 存入帳單並結賬
op3=>operation: Call /api/orders/paid

st->op->op2->op3->e

```

#### 處理待結賬訂單流程
```flow
st=>start: Start
e=>end: End
op=>operation: Call /api/orders/checkout/next
op2=>operation: 將帳單調整為待結賬
op3=>operation: Call /api/orders/checkout

st->op->op2->op3->e
```