--- title: 車麻吉介接 API v1.1 --- # 車麻吉介接 API | 版本: v1.1 | | ---------- | [TOC] > :bulb: Auth required為YES的API請在Header中加上Bearer token,token即使用Login或RefreshToken中回傳的 Token值 > :warning: 判讀 ErrorCode 時, 需連 HTTP StatusCode 一併判讀 --- <font size="5">**修改紀錄**</font> | Version | Date | Description | |:-------:|:----------:|:------------------------------------------------------------------------------------------------------ | | v1.1 | 2023-05-19 | 修正載具 Carrier (1) 說明<br/>修改 Status 403 ErrorCode 1 說明<br/>修改 Status 404 ErrorCode 2000 說明 | | v1.1 | 2023-05-19 | 新增 Status 500 ErrorCode | | v1.1 | 2023-05-19 | 新增 查詢交易狀態 API | | v1.1 | 2023-05-22 | 修正關閉交易(close) RequestData SessionId 的說明 | | &nbsp; | | | --- ## 登入 **URL** : `https://Ip:Port/mochipay/v1/Login` **Method** : `POST` **Auth required** : NO > 說明:首次介接時需透過登入的方式取得驗證Token * **Request Data** ```json! { "Username": "[Username]", "Password": "[password in plain text]" } ``` **Data Example** ```json! { "Username": "Autopass", "Password": "mochipay9999" } ``` * **Response** **Code**:`200 OK` ```json! { "Username": "string", "Password": null, "Token": "string", "ValidateTime": "DateTime" } ``` **Data Example** ```json! { "Username": "Autopass", "Password": null, "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkF1dG9wYXNzIiwibmJmIjoxNjU1MDg1ODc1LCJleHAiOjE2NTU5NDk4NzUsImlhdCI6MTY1NTA4NTg3NSwiaXNzIjoiVEVMRVhQRVIiLCJhdWQiOiJBVVRPUEFTUyJ9.Bj1T5BAFxIbe9eNGiIZr1L4bYCyI7j0RIIWf3bM3Jqg", "ValidateTime": "2022-06-23T10:04:35.4853115+08:00" } ``` **Code**:`400 BadRequest` ```json! { "Message": [ "Username or password is incorrect" ] } ``` --- ## 更新驗證 Token **URL**: `https://Ip:Port/mochipay/v1/RefreshToken ` **Method** : `POST` **Auth required** : YES * **Request Data** ```json! { "Username": "[Username]", "Password": "[password in plain text]" } ``` **Data Example** ```json! { "Username": "Autopass", "Password": "mochipay9999" } ``` * **Response** **Code**:`200 OK` ```json! { "Username": "string", "Password": null, "Token": "string", "ValidateTime": "DateTime" } ``` **Data Example** ```json! { "Username": "Autopass", "Password": null, "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6IkFjZXIiLCJuYmYiOjE1NDA1MjE2MTIsImV4cCI6MTU0MTEyNjQxMiwiaWF0IjoxNTQwNTIxNjEyfQ.nJl8LXxPKOEBTNIF0jFO8z05D_fo2wUT4B31rccYbug", "ValidateTime": "12/25/2015 10:30:00 AM" } ``` **Code**:`400 BadRequest` ```json! { "Message": [ "Username or password is incorrect" ] } ``` --- ## 查車 **URL**: ` https://Ip:Port/{FieldNo}/mochipay/v1/parking_records/query_parking ` **Method** : `POST` **Auth required** : YES **Route Data**: `FieldNo請填場地代碼` * **Request Data** ```json! { "vehicle_type": "string", "plate_number": "string", "plate_number_fuzzy": "string" } ``` **Data Example** ```json! { "vehicle_type": "car", "plate_number": "1111", // plate_number_fuzzy請填相同值 "plate_number_fuzzy": "1111" // 和plate_number請填相同值 } ``` * **Response** **Code**:`200 OK` ```json! { "Results":[ { "vehicle_type": "string", "plate_number": "string", "parking_record_id": "string", "checked_in_at":"string", "checked_out_at":"string", "checked_in_image":"string", "parking_ticket_id":"string", "amount": int }, { "vehicle_type": "string", "plate_number": "string", "parking_record_id": "string", "checked_in_at":"string", "checked_out_at":"string", "checked_in_image":"string", "parking_ticket_id":"string", "amount": int } ] } ``` **Data Example** ```json! { "Results": [ { "vehicle_type": "car", "plate_number": "1111", "parking_record_id": "287", "checked_in_at":"2022/05/17 14:30:00", "checked_out_at":"", "checked_in_image":"string", "parking_ticket_id":"", "amount": -1 }, ] } ``` > :bulb: 這時候還不會拿到checked\_out\_at、parking\_ticket\_id和amount,amount先填-1 > > :bulb: 圖片的部分是先壓縮後轉base64的string **Code**:` 404 NotFound` ```json! { "Message": [ "Username or password is incorrect" ] } ``` --- ## 選車開始交易 **URL**: ` https://Ip:Port/{FieldNo}/mochipay/v1/parking_tickets/create ` **Method** : `POST` **Auth required** : YES **Route Data**: `FieldNo請填場地代碼` * **Request Data** ```json! { "vehicle_type": "string", "plate_number": "string", "parking_record_id": "string" } ``` **Data Example** ```json! { "vehicle_type": "car", "plate_number": "1111", // plate_number_fuzzy請填相同值 "parking_record_id": "287" // 和plate_number請填相同值 } ``` * **Response** **Code**:`200 OK` ```json! { "vehicle_type": "string", "plate_number": "string", "parking_record_id": "string", "checked_in_at":"string", "checked_out_at":"string", "request_amount":"string", "should_leave_before":"string", "parking_ticket_id":"string", "checked_in_image":"string", "SessionId":"string", "pay_by_autopass": bool, "autopass_pay_amount": uint } ``` **Data Example** ```json! { "vehicle_type": "car", "plate_number": "1111", "parking_record_id": "287", "checked_in_at":"2022/05/17 14:30:00", "checked_out_at":"2022/06/13 10:41:52", "request_amount":"25", "should_leave_before":"2022/06/13 10:56:52", "parking_ticket_id":"55678", "checked_in_image":"string", "SessionId":"34f117a1-d66c-4d77-a22a-6116c870145a", "pay_by_autopass": true, "autopass_pay_amount": 40 } ``` **Code**:[ErrorCode請參照下方錯誤代碼列舉](#ErrorCodes) ```json! { "ErrorCode": "[ErrorCode]" } ``` --- ## 更新選車框車時間 **URL**: ` https://Ip:Port/{FieldNo}/mochipay/v1/parking_tickets/update_timeout ` **Method** : `POST` **Auth required** : YES **Route Data**: `FieldNo請填場地代碼` * **Request Data** ```json! { "SessionId": "string", // 就是parking_ticket_id "Sec": "int" // 要延長的時間秒數 } ``` **Data Example** ```json! { "SessionId": "654321", // 就是parking_ticket_id "Sec": "300" } ``` * **Response** **Code**:`200 OK` ```json! { "Message": "string" } ``` **Data Example** ```json! { "Message": "The session expire time is extended." } ``` **Code**:[ErrorCode請參照下方錯誤代碼列舉](#ErrorCodes) ```json! { "ErrorCode": "[ErrorCode]" } ``` --- ## 繳費完成通知 **URL**: ` https://Ip:Port/{FieldNo}/mochipay/v1/parking_tickets/pay ` **Method** : `POST` **Auth required** : YES **Route Data**: `FieldNo請填場地代碼` * **Request Data** ```json! { "plate_number": "string", "parking_ticket_id":"string", "parking_record_id": "string", "checked_in_at":"string", "checked_out_at":"string", "amount":"string", "paid_at":"string", "CreditCard_No":"string", // 信用卡號 "CustomerVAT":"string", // 客戶輸入的統編 "CarrierCode":"string", // 會員載具碼 "CarrierCode_CreditCard":"string", // 信用卡載具 "ReceiptType":int, "SessionId":"string" } ``` **Data Example** ```json! { "plate_number": "1111", "parking_ticket_id":"55678", "parking_record_id": "287", "checked_in_at":"2022/05/17 14:30:00", "checked_out_at":"string", "amount":"25", "paid_at":"string", "CreditCard_No":"1234-5678-8765-4321", // 信用卡號 "CustomerVAT":"12345678", // 客戶輸入的統編 "CarrierCode":"/ABC1234", // 會員載具碼 "CarrierCode_CreditCard":"string", // 信用卡載具 "ReceiptType":1, "SessionId":"34f117a1-d66c-4d77-a22a-6116c870145a" } ``` Receive Type Variable Type : Number | 編號 | 類型 | 說明 | | ---- | ------------------ | ------------------------- | | 0 | Unknown | 保留 | | 1 | Carrier | 手機條碼 (預設請使用此項) | | 2 | Print | 列印 (雲端支付不適用) | | 3 | Donate | 捐贈 | | 4 | Carrier_CreditCard | 信用卡載具 | | 5 | iPass | 一卡通 | | 6 | EasyCard | 悠遊卡 | | 7 | iCash | iCash | | 8 | HappyCash | HappyGO | | 9 | NPC | 自然人憑證 | * **Response** **Code**:`200 OK` ```json! { "data": { "result": "string" } } ``` **Data Example** ```json! { "data": { "result": "2022/06/13 10:57:19" } } ``` **Code**:[ErrorCode請參照下方錯誤代碼列舉](#ErrorCodes) ```json! { "ErrorCode": "[ErrorCode]" } ``` --- ## 關閉交易 **URL**: ` https://Ip:Port/{FieldNo}/mochipay/v1/parking_tickets/close ` **Method** : `POST` **Auth required** : YES **Route Data**: `FieldNo請填場地代碼` * **Request Data** ```json! { "SessionId": "[Session ID]", } ``` **Data Example** ```json! { "SessionId": "34f117a1-d66c-4d77-a22a-6116c870145a", } ``` * **Response** **Code**:`200 OK` ```json! { "data": { "result": "string" } } ``` **Code**:[ErrorCode請參照下方錯誤代碼列舉](#ErrorCodes) ```json! { "ErrorCode": "[ErrorCode]" } ``` --- ## Health Check **URL**: ` https://Ip:Port/mochipay/v1/HealthCheck ` **Method** : `POST` **Auth required** : YES * **Request Data** ```json! { "Username": "[Username]", "Password": "[password in plain text]" } ``` **Data Example** ```json! { "Username": "Autopass", "Password": "mochipay9999" } ``` * **Response** **Code**:`200 OK` ```json! { "Message": [ "string" ] } ``` **Data Example** ```json! { "Message": [ "Hi, Autopass" ] } ``` **Code**:`400 BadRequest` ```json! { "Message": [ "Username or password is incorrect" ] } ``` --- ## 查詢交易狀態 **URL**: ` https://Ip:Port/mochipay/v1/parking_tickets/query ` **Method** : `POST` **Auth required** : YES * **Request Data** ```json! { "parking_record_id":"287", "parking_ticket_id":"55678", } ``` **Data Example** ```json! { "parking_record_id":"287", "parking_ticket_id":"55678", } ``` * **Response** **Code**:`200 OK` ```json! { "parking_record_id": "string", "parking_ticket_id": "string", "plate_number": "string", "checked_in_at": "string", "checked_out_at": "string", "recevied_amount": "string", "pay_by_autopass": bool, "Status": int } ``` **Data Example** ```json! { "parking_record_id": "287", "parking_ticket_id": "55678", "plate_number": "1111", "checked_in_at": "2022/05/17 14:30:00", "checked_out_at": "2022/06/13 10:41:52", "recevied_amount": "25", "pay_by_autopass": true, "Status": 1 } ``` | Status | 類型 | 說明 | | ------ | ------------------- | ---------- | | 0 | TransactionNotFound | 查無此交易 | | 1 | PaidCompleted | 已繳清 | | 2 | InProgress | 交易進行中 | | 3 | Unpaid | 未繳清 | **Code**:[ErrorCode請參照下方錯誤代碼列舉](#ErrorCodes) ```json! { "ErrorCode": "[ErrorCode]" } ``` --- # ErrorCodes ## Status 400 BadRequest 資料格式錯誤 提供的資料格式有誤 錯誤代碼列舉 | ErrorCode | Name | Description | | --------- | -------------- | ------------------------ | | 0 | UNKNOWN | 保留 | | 2000 | QRCODE_INVALID | QRCODE不合規範,無法解析 | ## Status 403 Forbidden 拒絕要求 現場 APS 折扣失敗 ```json! { "ErrorCode": "[ErrorCode]" } ``` 錯誤代碼列舉 | ErrorCode | Name | Description | | --------- | --------------------------- | --------------------------------------------------- | | 0 | UNKNOWN | 保留 | | 1 | SESSION_UNAVAILABLE | 指定的 SESSION_ID 已被 Server 端關閉, 例如 Timeout) | | 2 | CAR_IS_BUSY | 已有其他繳費機或 SESSION 正在處理查詢的車輛 | | 3 | STORE_NOT_FOUND | 拒絕使用折扣: 找不到指定的店家 | | 4 | CODE_USED | 拒絕使用折扣: 已使用過 | | 5 | DATE_NOT_MATCH | 拒絕使用折扣: 非當日票券 | | 6 | LIMIT_DISCOUNT_TIME_REACHED | 拒絕使用折扣: 折扣時數已達上限 | | 7 | NOT_COBRANDER | 拒絕使用折扣: 非聯名卡 | | 8 | CREDITCARD_DISCOUNT_REACHED | 拒絕使用折扣: 信用卡使用次數已達上限 | ## Status 404 NotFound 查無車輛, SessionId 錯誤 ```json! { "ErrorCode": "[ErrorCode]" } ``` | ErrorCode | Name | Description | | --------- | ----------------- | ----------------------------------- | | 0 | UNKNOWN | 保留 | | 1 | CAR_NOT_FOUND | 找不到指定的車輛 | | 2000 | SESSION_NOT_FOUND | SessionId 不正確, 或 Session 已關閉 | ## Status 500 InternalServerError ```json! { "ErrorCode": "[ErrorCode]" } ``` | ErrorCode | Name | Description | | --------- | ---------------- | ------------------ | | 0 | UNKNOWN | 保留 | | 1 | RECEIVED_ERROR | 現場主機回應錯誤 | | 2 | CONNECTION_ERROR | 與現場主機連線錯誤 |