最近在做8583的接口联调,目前手头只有一份文档描述,小弟也是头一次接触8583,目前卡在MAC校验这一关了,无论怎么算MAC,发过去返回的都是A0,MAC校验错,
原8583文档关于MAC算法描述如下:
将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK (MAB)
问题就是,这个发送给POS中心的消息格式到底要什么样的?
比如原数据:
loginData.put("2", "4367450070849241");// 主帐号 最大19字节BCD
loginData.put("3", "000000");// 处理码 定长6字节
loginData.put("4", "000000000001");// 交易金额 定长12字节
loginData.put("11", "123456");// 流水号 定长6字节
//loginData.put("14", "0218");// 有效期 定长4字节
loginData.put("22", "012");//输入方式码 后一个0为左靠右补0 定长3字节
loginData.put("25", "00");//服务点条件码 消费固定00
loginData.put("41", "00015719");//终端号
loginData.put("42", "105110070110485");// 商户号
loginData.put("49", "156");//货币代码 000000080030
loginData.put("60", "22000008"); //2200009100050
以上是原数据。
拼装成字符串后:
4367450070849241000000000000000001123456012000001571910511007011048515622000008
按照文档要求,对一些数据进行左补空格 或者右补‘0’或者转化为16进制位后:
4360075312486901000000000000000001123456012 ** 0 ** 000001531110500327001051131353622000005003 ** 0 **
再给各个数字域添加长度后:
** 16 ** 436007531248690100000000000000000112345601200000015311105003270010511313536 ** 0011 ** 220000050030
以上这几种 到底应该选哪种去做MAC运算呢?