最近对接银联多渠道,对接了“余额查询”和“缴费”功能。最近发生部分芯片卡不能交易的bug(磁条卡可以交易)。
通过“余额查询”功能记录本次bug及修改过程。
由于多渠道协议中缴费和余额查询功能“23域 卡序列号”均为条件功能(即:C 条件域(Conditional),此域在一定条件下出现在该消息中),所以在之前的对接中均未使用该域。出现部分芯片卡不能交易的问题之后,经过同事提示有可能是23域参与55域数据的计算,所以需要23域。
添加23域之后之前正常的芯片卡也不能交易。原因是由于多渠道中23域的定义为【n3,3位定长数字字符,压缩时用左靠BCD码表示的2个字节的定长域】; 因为之前对接银联互联网直连收单所以这块直接使用了之前的程序代码,但是直连收单协议中23域定义为【N3,3个字节的定长数字字符域,压缩时用右靠BCD码表示的2个字节的定长域】,所以导致错误。结论:多渠道中23域需要左靠右补0(互联网直连相反)。
报文参考如下: