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 ```