:::success
# 晶片金融卡元件流程
#### 卡片測試ID: `D221275272` (白卡)
#### 卡片測試ID: `F229057643` (黃卡)
### 元件初始化
><font color="#3d3d3d">等待`isSCSBWebATMInitialized` 為 *true*,代表元件已正常初始化
>>判斷`getCode`是否為 **0**、**3005**、**5070** 此3種視為安控元件有安裝,且正常執行
>>###### <註: 0: 代表執行成功, 3005代表卡片不存在, 5070: 代表使用者取消操作>
>>常見安控元件未安裝或異常的錯誤 **61001**、**61006**、**5908**</font>
>>###### <註: 61001: 未正常啟動安控元件, 61006: 無法與安控元件建立連線, 5908: 雙向驗證失敗>
``` mermaid
graph TB;
交易-->初始化時判斷安控元件是否安裝
初始化時判斷安控元件是否安裝-->安控元件未安裝
初始化時判斷安控元件是否安裝-->安控元件已安裝
安控元件未安裝-->跳出燈箱提醒
安控元件已安裝-->視畫面邏輯處理
```
:::warning
### 初始化後流程
><font color="#3d3d3d">判斷`getCode`是否為 **61201**、**61202**、**61203**、**61204**</font>
###### <註: 以上代碼皆為版本異常情況,目前只做版本異常跳燈箱提醒,可繼續流程,不可使用之版本尚未定義>
``` mermaid
graph TB;
檢查版本-->最低可支援版本;
檢查版本-->不可使用之版本;
最低可支援版本-->比目前版本小跳出燈箱提醒,繼續流程;
不可使用之版本-->跳出燈箱提醒,不可繼續流程;
```
><font color="#3d3d3d">判斷`getCode`若不為**0** 跳燈箱錯誤
>>使用回傳的`data`判斷`data.length < 1` 或 `data[0]是否為空` </font>
``` mermaid
graph TB;
取得讀卡機名稱並判斷是否有異常-->正常列出讀卡機
取得讀卡機名稱並判斷是否有異常-->異常跳出燈箱提醒;
正常列出讀卡機-->讀取電腦上的讀卡機名稱;
正常列出讀卡機-->找不到讀卡機跳出燈箱提醒;
```
><font color="#3d3d3d">判斷`getCode`若是 **0** 或 **3005** 或 **5907** 可繼續流程</font>
###### <註: code為 0: 執行成功、3005: 卡片不存在、5907: 元件認證失敗(在這步可能會有此錯誤,後續流程若還有此問題再跳燈箱錯誤),以上皆可繼續流程>
``` mermaid
graph TB;
連結卡片-->連結正常可繼續流程;
連結卡片-->異常情況跳出燈箱提醒;
```
><font color="#3d3d3d">判斷`getCode`若是 **0** 或 **3005** 可繼續流程</font>
###### <註: **0** 和 **3005** 以外的都是異常情況>
``` mermaid
graph TB;
取得卡片狀態-->狀態正常可繼續流程;
取得卡片狀態-->異常情況跳出燈箱提醒;
```
:::danger
### 驗證
><font color="#3d3d3d">判斷getCode是否為 **0** 和 getData是否有值
>###### <註: getData: 取得的卡片資訊>
>>若為 **0** 代表執行成功,前端檢核銀行代碼`data[0]`是否為`011`</font>
>>###### <註: data[0]: 發卡單位代號>
``` mermaid
graph TB;
是否為本行-->判斷卡片資訊是否為上海商業銀行卡片;
是否為本行-->若非本行,跳出燈箱提醒;
```
><font color="#3d3d3d">判斷getCode是否為 **0**
>>若為 **0** 代表驗證成功,把卡片帳號資訊`data[2]`帶到後端驗證</font>
>>###### <註: data[2]: 帳號>
``` mermaid
graph TB;
驗證PIN碼-->驗證PIN碼成功,把卡片資訊帶到後端;
驗證PIN碼-->驗證PIN碼失敗,跳出燈箱提醒;
```
><font color="#3d3d3d">後端`打電文BS1801`,取得`Hashtable data = bs1801.getData();
String VerifyID = (String) data.get("IDNO");` 檢核是否與登入的`userId`相等</font>
``` mermaid
graph TB;
是否為本人卡片-->若後端驗證成功則中斷卡片連結;
是否為本人卡片-->若後端驗證錯誤,跳出燈箱提醒;
```
><font color="#3d3d3d">判斷`getCode`若是 **0** 代表執行成功
</font>
###### <註: **0** 以外的都是異常情況>
``` mermaid
graph TB;
中斷卡片連結-->執行成功,卡片中斷;
中斷卡片連結-->異常情況跳出燈箱提醒;
```
:::
# 錯誤訊息
#### 全景已定義錯誤代碼
```
"E3005": "請插入晶片金融卡!插入完成後再請按下確認,或是取消此次交易。",
"E30": "輸入的晶片密碼錯誤,請重新輸入。",
"E5001": "一般性錯誤。",
"E5909": "輸入密碼不符合規則。",
"E5079": "操作逾時。",
"E3002": "無法判別的卡片種類、拔插錯誤的卡片。",
"E3999": "無效的狀態。",
"E31": "金融卡已被鎖卡。",
"E32": "金融卡密碼長度不正確。",
"E33": "金融卡密碼格式不正確。",
"E1": "執行失敗。",
"E5908": "請下載安裝上海商業儲蓄銀行網路銀行讀卡機安控元件並啟動,點擊下載可到下載頁面。",
"E61001": "請下載安裝上海商業儲蓄銀行網路銀行讀卡機安控元件並啟動,點擊下載可到下載頁面。",
"E61006": "請下載安裝上海商業儲蓄銀行網路銀行讀卡機安控元件並啟動,點擊下載可到下載頁面。",
"E61201": "讀卡機安控元件己有最新版本,建議您進行軟體更新。",
"E61202": "讀卡機安控元件己有最新版本,建議您進行軟體更新。",
"E61203": "讀卡機安控元件己有最新版本,建議您進行軟體更新。",
"E61204": "讀卡機安控元件己有最新版本,建議您進行軟體更新。",
"E5070": "使用者取消操作。",
"E5071": "密碼不正確。",
"UNEXPECTED_ERROR": "不可預期的錯誤。"
```
>###### <註:>
>>###### 1. `E3005` `E30` `E5908` `E61001` `E61006` `E61201` `E61202` `E61203` `E61204` ,為全景已定義代碼,更改為自定義錯誤訊息
>>###### 2. 若是mapping不到的代碼,則一律跳`"不可預期的錯誤。"`
#### 檢核訊息
```
"PLEASE_INSTALL_CARD_READER": "請安裝讀卡機! 安裝完讀卡機後,請按下確定。",
"USE_SCSB_CARD_FOR_TRANSACTIONS": "請使用上海商業儲蓄銀行發放的晶片金融卡進行交易,謝謝!",
"PLEASE_SELECT_CARD_READER": "請選擇讀卡機",
"PLEASE_ENTER_6-12_DIGIT_CHIP_PIN": "請輸入6-12位晶片密碼",
"CARDREMARK_INSUFFICIENT_LENGTH": "晶片卡備註欄長度不足"
```