以下是在自动柜员机控制软件,在涉及金额的交易业务报文解包时必须注意的地方,给大家分享下。如果在交易业务报文解包时按照下面提到的方法来做,就会降低发生软件业务的短款事件。
第一种情况:对后台主机返回的业务报文响应码做判断
后台主机拒绝业务交易后,要对atoi()得到的响应码做进一步的判断。对于后台主机返回的拒绝交易,最后一定要保证响应码不为“0”。
实例1:仿海外报文
//l_ l_acMsgTypeID是报文头
if(memcp(l_acMsgTypeID,”ATP”,3) ==0 ||
memcp(l_acMsgTypeID,”AUP”,3) ==0 ||
memcp(l_acMsgTypeID,”AGP”,3) ==0 )
{
*p_piRespCode = atoi(l_acTemp);
if(*p_piRespCode <= 0 )
{
//后台主机拒绝交易,保证响应码不为0
*p_piRespCode = RSP_OTHERNOTMATCH;
} //if(*p_piRespCode <= 0 )
}
实例2:银联ISO8583报文
//l_acTemp是解包时得到的响应码
*p_piRespCode = atoi(l_acTemp);
if(*p_piRespCode == 0 && memcmp(l_acTemp, ”00”, 2) !=0 )
{
//返回的响应码不符合要求,作为拒绝交易处理
*p_piRespCode = RSP_OTHERNOTMATCH;
}// if(*p_piRespCode == 0 && memcmp(l_acTemp, ”00”) !=0 )
第二种情况:对前置系统返回报文中的终端编号进行校对
如果前置系统或主机返回的报文里面含有终端编号,在解包时就必须和本地的终端编号进行比较。
//l_acTemp是解包时得到的终端编号