---
# System prepended metadata

title: 路邊停車狀態通知 API介接規則 - v1.6 2023.11.30

---

---
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": "錯誤訊息",    
}
```
:::