ISO8583報文(簡稱8583包)又稱8583報文是一個國際標准的包格式,最多由128個字段域組成,每個域都有統一的規定,並有定長與變長之分。
8583包前面一段為位圖,用來確定包的字段域組成情況。參考文檔
其中位圖是8583包的靈魂,它是打包解包確定字段域的關鍵,而了解每個字段域的屬性則是填寫數據的基礎。在POS機的開發上時經常要用到,例如回頭客會員管理系統在POS機上的應用就是采用8583報文。
報文的類型有很多種,比如:sale,reversal,settlement等等,不同的類型組包也是不一樣的, 下面是“消費”類型報文的測試和組8583報文的過程,針對我們日常使用POS機系統來說的,這里主要是模擬的POS終端發向POSP系統的8583報文。其基本業務流程圖如下所示
基礎知識:
1byte = 8bit
1byte = 2個16進制數
2個字節=1個字符
BCD碼:用4位二進制數來表示1位十進制數中的0~9這10個數碼,即1bcd碼=4bit
報文結構:
TPDU頭 = ID(60H) + 目的地址(N4) + 源地址(N4),長度為10字節,壓縮時用BCD碼表示為5個字節長度的數值。
報文頭 = 應用類別定義(N2 )+軟件總版本號(N2) + 終端狀態(N1) + 處理要求 (N1)+ 軟件分版本號(N6),總長度為12字節,壓縮時用BCD碼表示為6個字節長度的數值。
報文長度(2字節)+TPDU(5字節)+報文頭(6字節)+域數據(指令碼(0域 2字節 消息類型)+位圖(8字節)+其他域數據
POS終端上送POS中心的消息報文結構包括TPDU、報文頭和應用數據三部分:
16進制報文:
007b 6000160000 602200000000 0200 7020048020c08811
600016000060220000000002007020048020c08811165477666265921222000000000000014959555556022000375477666265921222d25085060000012600000033333333333333333232323232323232323232323232323135361000000000000000000822000001001500000100100000103133394343433842
青色背景:報文長度 007b 如上是246個字節->123個字符->長度是123(10進制)->7b(16進制)->占用兩個字節007b
黃色背景:TUDU頭 6000160000
紅色背景:報文頭 602200000000
磁條卡金融支付類應用為:60
軟件版本號 22
終端狀態 0(正常交易狀態)
處理要求 0(無處理要求)
保留使用 000000
灰色背景:消息類型 0200
綠色背景:bitmap位圖,轉成bit顯示, 7020048020c08811
根據文檔我們可以輕易的得到需要的域為2,3,4,11,22,25,35,41,42,49,53,60,64域
(6) 2域
165477666265921222(16個字節,最大是19個字節) 主賬號
N..19(LLVAR),2個字節的長度值+最大19個字節的主賬號,
壓縮時用BCD碼表示的1個字節的長度值+用左靠BCD碼表示的最大10個字節的主賬號。
(7) 3域
000000 交易處理碼
(8) 4域
000000014959 (149.59CNY 49域可以看出來)
(9) 11域
555556 (系統跟蹤號 定長3個字節)
(10) 22域
0220 (服務點輸入方式碼 刷卡無PIN)
(11) 25域
00 (服務點條件碼 00正常提交)
(12) 35域
375477666265921222d250850600000126000000
2磁道數據(Track 2 Data)
2個字節的長度值+最大37個字節的第二磁道數據(數字和分隔符)
壓縮時用BCD碼表示的1個字節的長度值+用左靠BCD碼表示的最大19個字節的第二磁道數據
(13) 41域
受卡機終端標識碼
3333333333333333 (33333333 BCD碼)
(14) 42域
受卡方標識碼
323232323232323232323232323232 (222222222222222 BCD碼)
(ANS15,15個字節的定長域)
(15) 49域
交易貨幣代碼
313536(AN3) (156 BCD碼)
(16) 53域
安全控制信息
1000000000000000 (16 BCD個字節)
(17) 60域
60.1交易類型碼 22:消費類型
60.2批次號 000001
長度:8個字節
000822000001
壓縮時用右靠BCD碼表示的2個字節的長度值+用左靠BCD碼表示的最大7個字節的數據
(18) 64域
報文鑒別碼(Message Authentication Code) MAC
B64,8個字節的定長域
3133394343433842