拿到一条报文,第一眼看的就是 MTI。输入四位数字,下面会逐位拆开告诉你它是什么。
| MTI | 含义 | 说明 |
|---|---|---|
0100 | 授权请求 | 刷卡时的实时授权,只冻结不扣款 |
0110 | 授权请求响应 | DE39 带回批准或拒绝 |
0120 | 授权通知 | 已成事实的通知,发卡行不能拒绝 |
0130 | 授权通知响应 | |
0200 | 金融请求 | 授权加请款一步完成 |
0210 | 金融请求响应 | |
0220 | 金融通知 | 脱机交易或代授权后的补送 |
0230 | 金融通知响应 | |
0320 | 批文件通知 | |
0400 | 冲正请求 | 撤销原交易,等待对方应答 |
0410 | 冲正请求响应 | 实践中几乎总是回 00 |
0420 | 冲正通知 | 我方已撤,对方必须跟着撤 |
0430 | 冲正通知响应 | |
0500 | 对账请求 | |
0510 | 对账请求响应 | |
0520 | 对账通知 | |
0800 | 网络管理请求 | 签到、签退、回显、密钥交换 |
0810 | 网络管理响应 | |
0820 | 网络管理通知 |
MTI 是四位数字,每一位都有独立含义,合起来才是这条报文的身份。第 1 位是标准版本,第 2 位是消息类(授权、金融、冲正、网络管理…),第 3 位是功能(请求、响应、通知),第 4 位是来源方以及是不是重发。
这一位决定了对方能不能拒绝你。功能码 0 是请求——"我想这么做,你同不同意",对方可以拒绝。功能码 2 是通知(advice)——"我已经这么做了,你必须跟上",对方只能确认收到,不能拒绝。
所以 0400 和 0420 不是同义词:前者是请求撤销,后者是通知"我已经撤了"。选错的典型后果是发了 0400 却被拒绝,而你本地已经作废了交易,卡在中间无法收场。
第 4 位的奇数值表示重发:0400 是首次,0401 就是同一笔的重发。重发的铁律是除了这一位,其它一个字节都不许改——尤其 DE11(STAN)和 DE7(传输时间)必须沿用原值。很多"重复扣款"事故的根因,就是重发时顺手生成了新的 STAN,接收方看到的就成了两笔独立交易。
MTI 的第一位标的是这条报文按 ISO 8583 的哪个版本写的:0 是 1987 版,
1 是 1993 版。很容易把这读成沿革,以为数字大的取代了小的。并没有。
两个版本同时在生产跑,在同一个卡组织里,对同一笔交易。授权报文是 1987 格式、以 0
开头 —— 0100、0110、0200、0400;
清算报文是 1993 格式、以 1 开头,比如首次提出的 1240。
所以一笔消费在授权那一腿产生一条 0100,在清算文件里产生一条 1240,
这两条不是两笔交易。
要在意它的原因是:两个版本不共用同一套字段字典。同一个数据域号可以装不同的内容, 内容也可以在域号之间搬 —— 比如商户类别码在授权里是 DE18、在清算里是 DE26。 按其中一个版本配好的解析器读另一个版本时不会报错,只会给你看起来合理的胡话。 对照在授权与清算的差异。