银联接口开发随笔(3)

文章开头,给 -直播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

分解该报文

19622260061001405873319位银行卡号

00000000500012位交易金额

000057 6位交易流水号

00 :应码码

00123800:终端号

问题出在银行卡号上

196222600610014058733 19位银行卡号 6222600610014058733

19622260061001405873  19位银行卡号 622260061001405873

怎么回事?通过检查mac校验部份程序发现,以前支付成功都是16位的信用卡号,普通的卡都是mac校验的问题,再检查发现,从ISO8583协议数据里取银行卡号程序向前多取了一位,修复该问题后,问题就没了,最后发现交通卡充值校验规则其实是和水、电、煤的交易相同的,如果早有人告诉我这一点,会不会我不会浪费这么多时间。

最后感谢Jack的不厌其烦的测试工作,同时感谢银联Olive朋友,在他的配合下我才完成程序调试工作。

你可能感兴趣的:(接口)