文章开头,给 直播室-直播10 网站打个广告 提供体育赛事、游戏赛事的直播导航 http://www.zhibo10.com/
好久没来更新博客,既要忙着公司的alading网站,同时又要给原来银联POS程序上加上交通卡支付的程序,今天晚上没什么事就写一篇困饶我好几天的一个问题。
以后ishelf机器上要做交通卡充值,原来的银联POS程序需要加上交通卡交易的程序,开发工作不算复杂,根据要求修改相应的参数即可,我这边测试也很顺利通过,悲剧的事情发生在发布给测试同事(jack)以后,整个交通卡充值的过程都很顺利,可是银联支付总是失败。起初是因为发布版本、键盘密钥,读卡器密钥问题,我通过一系列排查以后,再用我测试通过的版本覆盖测试机上的文件,Jack的测试工作还是时而成功,时而失败。
今天在上级领导的强大压力下,我决定今天要找出原因,jack测试几笔数据,收到报文后我们解析结果报错,错误是:TCAS_MAC_ERROR,从日志很明显示看出来MAC校验问题,请银联的朋友(Olive)看一下,Olive发给我她那边的交易日志,通过看她给我的日志找到MAC校验部份内容
The MacStr len=[49],value=[1962226006100140587330000000050000000570000123800]
The cacu mac str key=[0C5FC3D15BF0B72A]
我这边解析出来的MacStr是
196222600610014058730000000050000000570000123800
对比两个MAC
1962226006100140587330000000050000000570000123800
196222600610014058730000000050000000570000123800
分解该报文
196222600610014058733:19位银行卡号
000000005000:12位交易金额
000057 :6位交易流水号
00 :应码码
00123800:终端号
问题出在银行卡号上
196222600610014058733 : 19位银行卡号 :6222600610014058733
19622260061001405873 : 19位银行卡号 :622260061001405873
怎么回事?通过检查mac校验部份程序发现,以前支付成功都是16位的信用卡号,普通的卡都是mac校验的问题,再检查发现,从ISO8583协议数据里取银行卡号程序向前多取了一位,修复该问题后,问题就没了,最后发现交通卡充值校验规则其实是和水、电、煤的交易相同的,如果早有人告诉我这一点,会不会我不会浪费这么多时间。
最后感谢Jack的不厌其烦的测试工作,同时感谢银联Olive朋友,在他的配合下我才完成程序调试工作。