---
title: '路邊停車狀態通知 API介接規則 - v1. 2023.11.30'
---
# 路邊停車狀態通知 API介接規則 <br> v1.5 (2023.11.30)
## 版本說明
| 日期 | 版本 | 說明 | 修改者
| -------- | -------- |-------- | -------- |
| 2023/10/17 | v1.0 | 初版 | |
| 2023/10/17 | v1.1 | 新增繳費統計、新增開單統計 | |
| 2023/10/24 | v1.2 | 入位通知和離位通知的"SpaceNumber"型態改成string | |
| 2023/10/25 | v1.3 | 修改API | 天茶 |
| 2023/11/07 | v1.4 | 新增開單、結單API <br /> 修改全部API| |
| 2023/11/14 | v1.5 | 修改繳費通知API欄位
| 2023/11/30 | v1.6 | 新增多臺繳費機狀態通知API <br /> 新增多臺攝影機繳費通知API
| 2024/02/29 | v1.7 | 開單通知API新增ImageFile欄位
| 2024/03/13 | v1.8 | 新增開單修改API
## API呼叫流程
*1.停車平台後端程式(MqttSender)監聽API傳送過來的資料*
*2.解析後轉發到平台的Mqtt,可以串接警報的點位*
## API端點
http://220.135.33.221:3031
*<font color='blue'>API端點的Port由MqttSender程式指定 </font>*
## API授權
*目前測試無驗證*
## 入位通知API
### 請求
:::warning
### POST **/api/YLPKInfo/CarIn**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"Road": "265-E",
"SpaceNumber": "265-E001",
"CarNumber": "AGH6730",
"CarIn_UTC": "20231018092830"
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | Road|字串 | 路段 <font color='blue'>(不會是中文名稱,而是代碼)</font>|
| ✔ | SpaceNumber|字串 | 車位 |
| | CarNumber|字串 | 車號 |
| ✔ | CarIn_UTC|字串 | 入位時間(UTC),yyyyMMddHHmmss |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 離位通知API
### 請求
:::warning
### POST **/api/YLPKInfo/CarOut**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"Road": "260-T",
"SpaceNumber": "260-T001",
"CarOut_UTC": "20231018092830"
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | Road|字串 | 路段 <font color='blue'>(不會是中文名稱,而是代碼)</font>|
| ✔ | SpaceNumber|字串 | 車位 |
| ✔ | CarOut_UTC|字串 | 離位時間(UTC),yyyyMMddHHmmss |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 開單通知API
### 請求
:::warning
### POST **/api/YLPKInfo/PaperOpen**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"Road": "260-T",
"SpaceNumber": "260-T001",
"CarNumber": "HMB-5555",
"Open_UTC": "20231018092830",
"PaperNumber": "ADVSDED12359",
"Rate": 30,
"ImageBase64": "Base64"
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | Road|字串 | 路段 <font color='blue'>(不會是中文名稱,而是代碼)</font>|
| ✔ | SpaceNumber|字串 | 車位 |
| ✔ | CarNumber|字串 | 車號 |
| ✔ | Open_UTC|字串 | 開單時間(UTC),yyyyMMddHHmmss |
| ✔ | PaperNumber|字串 | 開單單號 |
| ✔ | Rate|數字 | 費率(小時為單位)<font color='red'>(可否加這欄)</font> <font color='blue'>(可以)</font> |
| ✔ | ImageBase64|字串 | 停車圖片(Base64) |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 開單修改API
:::info
開單修改會在開單通知後的任意時間通知,有可能是隔天
:::
### 請求
:::warning
### POST **/api/YLPKInfo/PaperModify**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"PaperNumber": "ADVSDED12359",
"CarNumber": "HMB-5555"
}
```
:::
### Json內容
| 必要 | 欄位 | 型別 | 說明 |
| - | - | - | - |
| ✔ | PaperNumber|字串 | 開單單號 |
| ✔ | CarNumber |字串 | 車號 |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 結單通知API
### 請求
:::warning
### POST **/api/YLPKInfo/PaperClose**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"Road": "D",
"SpaceNumber": "260-T001",
"CarNumber": "AGH6730",
"Close_UTC": "20231018092830",
"PaperNumber": "string",
"Cost": 150
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | Road|字串 | 路段 <font color='blue'>(不會是中文名稱,而是代碼)</font>|
| ✔ | SpaceNumber|字串 | 車位 |
| ✔ | CarNumber|字串 | 車號 |
| ✔ | Close_UTC|字串 | 結單時間(UTC),yyyyMMddHHmmss |
| ✔ | PaperNumber|字串 | 開單單號 |
| ✔ | Cost|數字 | 停車總費用<font color='red'>(可否加這欄)</font> <font color='blue'>(可以)</font> |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 繳費通知API
:::danger
這裡幫我寫一下,我先定義我想要的需求
:::
### 請求
:::warning
### POST **/api/YLPKInfo/Payfees**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"Road": "D",
"SpaceNumber": "260-T001",
"CarNumber": "AGH6730",
"PaperNumber": "string",
"Pay": 150,
"Pay_UTC": "20231018092830",
"PaymentType":"PaymentMachine",
"PaymentMachineCode":"260T031024"
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | Road|字串 | 路段 <font color='blue'>(不會是中文名稱,而是代碼)</font>|
| ✔ | SpaceNumber|字串 | 車位 |
| ✔ | CarNumber|字串 | 車號 |
| ✔ | PaperNumber|字串 | 開單單號 |
| ✔ | Pay|數字 | 繳費金額 |
| ✔ | Pay_UTC|字串 | 繳費時間(UTC),yyyyMMddHHmmss |
| ✔ | PaymentType|字串 | 繳費管道⏬<br /> "PaymentMachine":現場繳費機<br /> "LINE_Pay":LINE Pay <br /> "NCCC":聯合信用卡<br /> "NCCC_GooglePay":聯合信用卡 Google Pay<br /> "NCCC_ApplePay":聯合信用卡 Apple Pay<br /> "JKOPAY":街口支付<br /> "EasyWallet":悠遊付<br /> "PlusPay":全盈支付|
| | PaymentMachineCode|字串 | 繳費機代號 (繳費管道是現場繳費機才有)<font color='red'>(可否加這欄)</font> |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 繳費機狀態通知API
:::danger
#### ~~繳費機如何判斷離線?~~
#### ~~多久發一次狀態?~~
:::
:::info
每五分鐘輪詢一次
:::
### 請求
:::warning
### POST **/api/YLPKInfo/Aps**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"ApsId": "260T031024",
"Battery": 85.4,
"IsDisconnected": true,
"CardReaderStatus": 1,
"CardReaderEventType": 2,
"CardReaderErrorCode":0,
"ScannerStatus":1,
"ScannerEventType":0,
"ScannerErrorCode":0
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | ApsId|字串 | 繳費機編號 |
| ✔ | Battery|數值 | 電池電量(%) |
| ✔ | IsDisconnected|布林 | 是否斷線 |
| ✔ | CardReaderStatus|數值 | 刷卡機狀態⏬<br> 0:未知、1:已就緒、2:錯誤、3:警告、4:無法使用 |
| ✔ | CardReaderEventType|數值 | 刷卡機事件⏬<br> 0:觸發、1:已處理、2:紀錄 |
| ✔ | CardReaderErrorCode|數值 | 刷卡機錯誤代碼⏬<br> 0:無錯誤、1:設備啟動、2:COM未啟用、3:COM無信號 |
| ✔ | ScannerStatus|數值 | 掃描器狀態⏬<br> 0:未知、1:已就緒、2:錯誤、3:警告、4:無法使用 |
| ✔ | ScannerEventType|數值 | 掃描器事件⏬<br> 0:觸發、1:已處理、2:紀錄 |
| ✔ | ScannerErrorCode|數值 | 掃描器錯誤代碼⏬<br> 0:無錯誤、1:設備啟動、2:COM未啟用、3:COM無信號 |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 多臺繳費機狀態通知API
:::info
每五分鐘輪詢一次
:::
### 請求
:::warning
### POST **/api/YLPKInfo/ApsList**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
[
{
"ApsId": "260T031024",
"Battery": 85.4,
"IsDisconnected": true,
"CardReaderStatus": 1,
"CardReaderEventType": 2,
"CardReaderErrorCode":0,
"ScannerStatus":1,
"ScannerEventType":0,
"ScannerErrorCode":0
}
]
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | ApsId|字串 | 繳費機編號 |
| ✔ | Battery|數值 | 電池電量(%) |
| ✔ | IsDisconnected|布林 | 是否斷線 |
| ✔ | CardReaderStatus|數值 | 刷卡機狀態⏬<br> 0:未知、1:已就緒、2:錯誤、3:警告、4:無法使用 |
| ✔ | CardReaderEventType|數值 | 刷卡機事件⏬<br> 0:觸發、1:已處理、2:紀錄 |
| ✔ | CardReaderErrorCode|數值 | 刷卡機錯誤代碼⏬<br> 0:無錯誤、1:設備啟動、2:COM未啟用、3:COM無信號 |
| ✔ | ScannerStatus|數值 | 掃描器狀態⏬<br> 0:未知、1:已就緒、2:錯誤、3:警告、4:無法使用 |
| ✔ | ScannerEventType|數值 | 掃描器事件⏬<br> 0:觸發、1:已處理、2:紀錄 |
| ✔ | ScannerErrorCode|數值 | 掃描器錯誤代碼⏬<br> 0:無錯誤、1:設備啟動、2:COM未啟用、3:COM無信號 |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 攝影機狀態通知API
:::info
每五分鐘輪詢一次
:::
### 請求
:::warning
### POST **/api/YLPKInfo/Camera**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"CameraId": "260T002CRO20116",
"Battery": 85.23,
"IsDisconnected": true,
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | CameraId|字串 | 攝影機編號<font color='red'> 是否等同立柱編號?</font> <font color='blue'>(對)</font> |
| ✔ | Battery|字串 | 電池電量(%) |
| ✔ | IsDisconnected|布林 | 是否斷線 |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 多臺攝影機狀態通知API
:::info
每五分鐘輪詢一次
:::
### 請求
:::warning
### POST **/api/YLPKInfo/CameraList**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
[
{
"CameraId": "260T002CRO20116",
"Battery": 85.23,
"IsDisconnected": true,
}
]
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | CameraId|字串 | 攝影機編號<font color='red'> 是否等同立柱編號?</font> <font color='blue'>(對)</font> |
| ✔ | Battery|字串 | 電池電量(%) |
| ✔ | IsDisconnected|布林 | 是否斷線 |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 繳費統計API
:::danger
~~此API是統計所有路段的收費金額嗎?因為API沒有明確寫路段或是某台繳費機
如果是,那是何時發送過來,還是我們要自動去取得?
<font color='blue'>(是所有;每晚11點半發送。)</font>~~
#### ~~可能每小時或幾小時發一次嗎?一小時~~
:::
:::info
改成每小時一次
:::
### 請求
:::warning
### POST **/api/YLPKInfo/Payment**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"PaidAmount": 100,
"TotalAmount": 6543,
"SummaryDateTime": "20231025110000",
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | PaidAmount|數值 | 繳費張數 |
| ✔ | TotalAmount|數值 | 繳費金額 |
| ✔ | SummaryDateTime|字串 | 統計時間(TW),yyyyMMddHHmmss |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::
## 開單統計API
:::danger
~~此API是統計所有路段的收費金額嗎?因為API沒有明確寫路段
如果是,那是何時發送過來,還是我們要自動去取得?
<font color='blue'>(是所有;每晚11點半發送。)</font>~~
:::
:::danger
~~開單統計跟繳費機統計可否合併同一個API?否~~
:::
:::info
改成每小時一次
:::
### 請求
:::warning
### POST **/api/YLPKInfo/Paper**
#### 檔頭
`Content-Type` : `application/json`
#### 內容
```json=
{
"PaperAmount": 100,
"TotalAmount": 6543,
"SummaryDateTime": "20231025110000",
}
```
:::
### Json內容
| 必要 | 欄位 |型別| 說明|
| -------- | --|------ | -------- |
| ✔ | PaidAmount|數值 | 開單張數 |
| ✔ | TotalAmount|數值 | 停車費總共金額 |
| ✔ | SummaryDateTime|字串 | 統計時間(TW),yyyyMMddHHmmss |
:::success
#### 回應結果:成功 (200)
```json=
{
"result": "ok",
}
```
:::
:::danger
#### 回應結果:失敗 (400)
```json=
{
"error": "錯誤訊息",
}
```
:::