應用場景
POS呼叫刷卡機進行信用卡完成預先授權交易時
- Step 1. POS:呼叫刷卡機完成預先授權交易。
- Step 2. 刷卡機:進行信用卡完成預先刷卡授權後並回傳授權結果。
注意事項:
- 刷卡機需在主畫面才能接收POS指令
- POS等待處理中 (timeout總秒數至少要60秒逾時)
交易流程圖
請求電文內容
STX + Data + ETX + LRC
請求開始電文 STX
STX byte
本文開始 必填
- ASCII字符集中的控制字符STX(Start of Text)
- 十六進制(Hexadecimal)值為02
byte STX = 0x02 ;
請求電文參數說明 (Data)
Trans Type String(2)
交易別 必填
位置1
- 11 AUTH COMPLE 預先授權完成
Host ID String(2)
銀行別 必填
位置3
- 01 信用卡
Invoice Number String(6)
調閱編號
位置5
- 請填空白
Card Number String(19)
信用卡卡號
位置11
- 請填空白
CUP Flag String(2)
銀聯交易 必填
位置30
- 00 一般交易
Trans Amount String(12)
交易金額
位置32
Trans Date String(6)
交易日期
位置44
- 請填預授權回傳之交易日期
Trans Time String(6)
交易時間
位置50
- 請填空白
Approval Number String(6)
授權碼
位置56
- 請填預授權回傳之授權碼
ECR Response Code String(4)
通訊回應碼
位置62
- 請填空白
Terminal ID String(8)
端末機代號
位置66
- 請填空白
Merchant ID String(15)
商店代號
位置74
- 請填空白
EC Order Number String(20)
綠界授權單號
位置89
- 請填預授權回傳之綠界授權單號
Store ID String(18)
櫃號 選填
位置109
18碼,不傳送時必須填滿空白
Card Type String(2)
卡片代碼
位置127
- 請填空白
Redeem Amount String(12)
折抵金額
位置129
- 請填空白
Redeem Point String(10)
折抵點數
位置141
- 請填空白
Redeem Balance String(10)
剩餘紅利點數
位置151
- 請填空白
Installment Period String(2)
分期期數
位置161
- 請填空白
Down Payment Amount String(12)
首期金額
位置163
- 請填空白
Down Payment Amount String(12)
每期金額
位置175
- 請填空白
Encrypted Card Number String(50)
電子發票加密卡號
位置187
- 請填空白
POS Number String(20)
POS設備編號 有條件必填
位置237
- 20碼,左靠、右補空白
Reserve String(236)
保留
位置257
- 請填空白
POS Request Time String(14)
收銀機系統時間 必填
位置493
- 西元年二十四小時制YYYYMMDDHHMMSS
Request Hash Value String(40)
發送資料雜湊值 必填
位置507
- 把欄位1〜欄位24,使用Sha-1演算法得出20個Bytes的Hash Value,然後轉為ASCII字元為40個Bytes
EDC Response Time String(14)
刷卡機系統時間
位置547
- 請填空白
Response Hash Value String(40)
回應資料雜湊值
位置561
- 請填空白
請求電文結束 ETX
ETX byte
本文結束 必填
0x03
- ASCII字符集中的控制字符ETX(End of Text)
- 十六進制(Hexadecimal)值為03
byte ETX = 0x03 ;
請求電文壓碼 LRC
LRC byte
電文檢查碼 必填
- 將LRC初始值=0跟Data(請求電文內容)+ETX(請求電文結束內容)進行XOR位元運算的結果
// 計算 LRC
byte LRC = 0; // LRC 的初始值
foreach (byte b in (dataBytes))
{
LRC ^= b; // 進行 XOR 運算
}
LRC ^= ETX; // 進行 XOR 運算
請求電文參數說明範例 (預先授權完成交易)
- 電文內容:STX + Data + ETX + LRC
- 電文格式:byte
....
回覆電文內容
ACK + ACK + STX + Data + ETX + LRC
回覆電文接收成功 ACK
ACK byte
確認回應
0x06,第一個回應
- 由刷卡機產生回傳
- ASCII字符集中的控制字符ACK,確認收到請求回應
byte ACK = 0x06 ;
ACK byte
確認回應
0x06,第二個回應
- 由刷卡機產生回傳
- ASCII字符集中的控制字符ACK,確認收到請求回應
byte ACK = 0x06 ;
回覆開始電文 STX
STX byte
本文開始 必填
- ASCII字符集中的控制字符STX(Start of Text)
- 十六進制(Hexadecimal)值為02
byte STX = 0x02 ;
回覆電文參數說明(Data)
Trans Type String(2)
交易別
位置1
- 10 PREAUTH 預先授權
Host ID String(2)
銀行別
位置3
- 01 信用卡
Invoice Number String(6)
調閱編號
位置5
由刷卡機產生回傳
Card Number String(19)
信用卡卡號
位置11
由刷卡機產生回傳
- 左靠、右補空白
- 除前9碼及後4碼顯示外,其餘用*隱藏
CUP Flag String(2)
銀聯交易
位置30
- 00 一般交易
- 01 銀聯交易
Trans Amount String(12)
交易金額
位置32
由刷卡機產生回傳
- 右靠、左補0,包含兩位小數,
- 不包含小數點
Trans Date String(6)
交易日期
位置44
由刷卡機產生回傳
- 格式為西元年(YYMMDD)
Trans Time String(6)
交易時間
位置50
由刷卡機產生回傳
- 格式為二十四小時制(hhmmss)
Approval Number String(6)
授權碼
位置56
由刷卡機產生回傳
ECR Response Code String(4)
通訊回應碼
位置62
由刷卡機回傳
- 0000 Approved 授權
- 0001 Error 拒絕
- 0002 Call Bank 請聯絡銀行
- 0003 Communication Error 通訊失敗
Terminal ID String(8)
端末機代號
位置66
由刷卡機回傳
Merchant ID String(15)
商店代號
位置74
由刷卡機回傳
- 為空白
EC Order Number String(20)
綠界授權單號
位置89
由刷卡機回傳
Store ID String(18)
櫃號
位置109
依請求傳入參數值回傳
Card Type String(2)
卡片代碼
位置127
由刷卡機產生回傳
- 00 VISA
- 01 MASTERCARD
- 02 JCB
- 03 CUP
Redeem Amount String(12)
折抵金額
位置129
為空白
Redeem Point String(10)
折抵點數
位置141
為空白
Redeem Balance String(10)
剩餘紅利點數
位置151
為空白
Installment Period String(2)
分期期數
位置161
為空白
Down Payment Amount String(12)
首期金額
位置163
為空白
Down Payment Amount String(12)
每期金額
位置175
為空白
Encrypted Card Number String(50)
電子發票加密卡號
位置187
由刷卡機產生回傳
- 銀行資訊+ 44碼加密卡號:銀行資訊為前3碼B00+銀行代碼或卡號前6碼
注意事項:
- 案例1: 銀行有加入發票載具(該欄位第1碼為英文字母B:B00+銀行代號)
B00807OdZm2SuYU65yEnAG++vaCd16yYS0Jt5mak50IphdwXs
- 案例2: 銀行未加入發票載具(該欄位第1碼為數字:則為卡號前6碼)
474832OdZm2SuYU65yEnAG++vaCd16yYS0Jt5mak50IphdwXs=
POS Number String(20)
POS設備編號
位置237
依請求傳入參數值回傳
Reserve String(236)
保留
位置257
為空白
POS Request Time String(14)
收銀機系統時間
位置493
依請求傳入參數值回傳
Request Hash Value String(40)
發送資料雜湊值
位置507
依請求傳入參數值回傳
EDC Response Time String(14)
刷卡機系統時間
位置547
Response Hash Value String(40)
回應資料雜湊值
位置561
回覆電文結束 ETX
ETX byte
本文結束 必填
0x03
- ASCII字符集中的控制字符ETX(End of Text)
- 十六進制(Hexadecimal)值為03
byte ETX = 0x03 ;
回覆電文壓碼 LRC
LRC byte
電文檢查碼 必填
- 將LRC初始值=0跟Data(請求電文內容)+ETX(請求電文結束內容)進行XOR位元運算的結果
// 計算 LRC
byte LRC = 0; // LRC 的初始值
foreach (byte b in (dataBytes))
{
LRC ^= b; // 進行 XOR 運算
}
LRC ^= ETX; // 進行 XOR 運算
回覆電文參數說明範例 (預先授權完成交易)
- 電文內容:ACK + ACK + STX + Data + ETX + LRC
- 電文格式:byte
....