iOS ISO-8583消息发送
我是一名iOS开发者。我需要通过套接字服务器发送ISO-8583标准的消息 我已经和服务器建立了连接,并且工作正常。 服务器是这样工作的:当消息以正确的格式(但数据不正确,例如错误的PIN)发送给它时,它会以正确的错误代码进行响应。当消息格式错误时,服务器根本不响应;) 因此,知道我的连接工作正常(经过测试),我有以下问题: 我需要发送ISO8583信息到服务器。邮件必须包含以下字段:iOS ISO-8583消息发送,ios,iphone,message,server,iso,Ios,Iphone,Message,Server,Iso,我是一名iOS开发者。我需要通过套接字服务器发送ISO-8583标准的消息 我已经和服务器建立了连接,并且工作正常。 服务器是这样工作的:当消息以正确的格式(但数据不正确,例如错误的PIN)发送给它时,它会以正确的错误代码进行响应。当消息格式错误时,服务器根本不响应;) 因此,知道我的连接工作正常(经过测试),我有以下问题: 我需要发送ISO8583信息到服务器。邮件必须包含以下字段: SI(2字节-整个消息的大小) TPDU(必须是12345-文件说明) 详细信息(更多信息如下) EOT(规
- SI(2字节-整个消息的大小)
- TPDU(必须是12345-文件说明)
- 详细信息(更多信息如下)
- EOT(规范-符号“0D”)
- MTI-0200
- 账号-6019 5300 0601 9592
- 代码-700000
- 终端ID-359551
- PIN-880088(需要在末尾添加两个空格(docs说))
- 字段2-卡号,长度-19(3长度+16数字),格式 LLVAR
- 字段3-处理代码,长度-6,格式编号
- 字段12-时间(hhmmss),长度-6,格式编号
- 字段13-日期(mmdd),长度-4,格式编号
- 字段41-终端ID,长度-8,字母数字格式
- 字段52-引脚,长度-16,十六进制格式
ISOMessage *isoMessage1 = [[ISOMessage alloc] init];
NSString *tpdu = @"0102030405";
[isoMessage1 setMTI:@"0200"];
isoMessage1.bitmap = [[ISOBitmap alloc] initWithGivenDataElements:@[@"DE02", @"DE03", @"DE12", @"DE13", @"DE41", @"DE52"] configFileName:nil];
[isoMessage1 addDataElement:@"DE02" withValue:cardNumber configFileName:nil];
[isoMessage1 addDataElement:@"DE03" withValue:@"700000" configFileName:nil];
[isoMessage1 addDataElement:@"DE12" withValue:transactionTime configFileName:nil];
[isoMessage1 addDataElement:@"DE13" withValue:transactionDate configFileName:nil];
[isoMessage1 addDataElement:@"DE41" withValue:@"35959551" configFileName:nil]; //TID - 35959551
[isoMessage1 addDataElement:@"DE52" withValue:@"880088" configFileName:nil];
2) 手动设置所有字段,如下所示:
//CARD NUMBER
NSData *card = [cardNumber dataUsingEncoding:NSUTF8StringEncoding];
//TPDU
NSMutableData *TPDU = [[NSMutableData alloc] init];
[TPDU appendBytes:"\x01\x02\x03\x04\x05" length:5];
//TRANSACTION CODE
NSData *transactionCode = [[NSString stringWithFormat:@"%x",700000] dataUsingEncoding:NSUTF8StringEncoding];
//TIME AND DATE
NSData *time = [[NSString stringWithFormat:@"%x",[transactionTime intValue]] dataUsingEncoding:NSUTF8StringEncoding];
NSData *date = [[NSString stringWithFormat:@"%x",[transactionDate intValue]] dataUsingEncoding:NSUTF8StringEncoding];
//PIN
NSData *PIN = [[NSString stringWithFormat:@"%@ ",self.pinField.text] dataUsingEncoding:NSASCIIStringEncoding];
//TID
NSData *TID = [@"35959551" dataUsingEncoding:NSASCIIStringEncoding];
//MTI
NSMutableData *MTI = [[NSMutableData alloc] init];
[MTI appendBytes:"\x02\x00" length:2];
//BITMAP
NSArray* fields = [NSArray arrayWithObjects:@2, @3,
@12, @13, @41, @52, nil];
NSMutableArray* binary = [NSMutableArray new];
for(int i=0 ; i<64 ; ++i) {
binary[i] = @"0";
}
for(int j = 0; j<[fields count]; ++j)
{
binary[[fields[j] intValue]-1] = @"1";
}
NSMutableString * bitmap = [[NSMutableString alloc] init];
for (NSObject * obj in binary)
{
[bitmap appendString:[obj description]];
}
NSData *bitmapByte = [bitmap dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *request = [[NSMutableData alloc] init];
[request appendData:TPDU];
[request appendData:MTI];
[request appendData:bitmapByte];
[request appendData:card];
[request appendData:transactionCode];
[request appendData:time];
[request appendData:date];
[request appendData:TID];
[request appendData:PIN];
NSData *SI = [[NSString stringWithFormat:@"00%lu",(unsigned long)[request length]] dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData* fullRequest = [[NSMutableData alloc] init];
[fullRequest appendData:SI];
[fullRequest appendData:request];
//卡号
NSData*卡=[cardNumber数据使用编码:NSUTF8StringEncoding];
//TPDU
NSMutableData*TPDU=[[NSMutableData alloc]init];
[TPDU附录字节:“\x01\x02\x03\x04\x05”长度:5];
//交易代码
NSData*transactionCode=[[NSString stringWithFormat:@“%x”,700000]数据使用编码:NSUTF8StringEncoding];
//时间和日期
NSData*time=[[NSString stringWithFormat:@“%x”,[transactionTime intValue]]dataUsingEncoding:NSUTF8StringEncoding];
NSData*date=[[NSString stringWithFormat:@“%x”,[transactionDate intValue]]dataUsingEncoding:NSUTF8StringEncoding];
//别针
NSData*PIN=[[NSString stringWithFormat:@“%@”,self.pinField.text]dataUsingEncoding:NSASCIIStringEncoding];
//工业贸易署
NSData*TID=[@“35959551”数据使用编码:NSASCIIStringEncoding];
//MTI
NSMutableData*MTI=[[NSMutableData alloc]init];
[MTI appendBytes:“\x02\x00”长度:2];
//位图
NSArray*字段=[NSArray阵列及其对象:@2、@3、,
@12,13,41,52,零,;
NSMUTABLEARRY*二进制=[NSMUTABLEARRY new];
for(int i=0;i最终成功地实现了myslef。下面是设置参数的代码(以防有人需要):
NSDate*currentTime=[NSDate日期];
NSDateFormatter*dateFormatter=[[NSDateFormatter alloc]init]
//get current Time
[dateFormatter setDateFormat:@"hhmmss"];
NSString *transactionTime = [dateFormatter stringFromDate: currentTime];
transactionTime = [transactionTime stringByReplacingOccurrencesOfString:@":" withString:@""];
//get current Date
[dateFormatter setDateFormat:@"MMdd"];
NSString *transactionDate = [dateFormatter stringFromDate:currentTime];
NSString* cardNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"cardNumber"];
//TID
NSData *TID = [@"35959551" dataUsingEncoding:NSASCIIStringEncoding];
//PIN
NSData *PIN = [[NSString stringWithFormat:@"%@",self.pinField.text] dataUsingEncoding:NSASCIIStringEncoding];
//TPDU
NSMutableData *TPDU = [[NSMutableData alloc] init];
[TPDU appendBytes:"\x01\x02\x03\x04\x05" length:5];
//MTI
NSMutableData *MTI = [[NSMutableData alloc] init];
[MTI appendBytes:"\x02\x00" length:2];
//TRANSACTION CODE
NSString *transactionCode = @"700000";
NSData *trCode = [self convertToData:transactionCode];
//CARD NUMBER
NSString *cardWithLength = [@"16" stringByAppendingString:cardNumber];
NSData *card = [self convertToData:cardWithLength];
//TIME AND DATE
NSData *time = [self convertToData:transactionTime];
NSData *date = [self convertToData:transactionDate];
//BITMAP
NSString *mapa = @"6018000000801000";
NSData *mapaData = [self convertToData:mapa];
NSMutableData *request = [[NSMutableData alloc] init];
[request appendData:TPDU];
[request appendData:MTI];
[request appendData:mapaData];
[request appendData:card];
[request appendData:trCode];
[request appendData:time];
[request appendData:date];
[request appendData:TID];
[request appendData:PIN];
NSString *SI = [NSString stringWithFormat:@"00%lu",(unsigned long)[request length]];
NSData *SIData = [self convertToData:SI];
NSMutableData* fullRequest = [[NSMutableData alloc] init];
[fullRequest appendData:SIData];
[fullRequest appendData:request];
//get current Time
[dateFormatter setDateFormat:@"hhmmss"];
NSString *transactionTime = [dateFormatter stringFromDate: currentTime];
transactionTime = [transactionTime stringByReplacingOccurrencesOfString:@":" withString:@""];
//get current Date
[dateFormatter setDateFormat:@"MMdd"];
NSString *transactionDate = [dateFormatter stringFromDate:currentTime];
NSString* cardNumber = [[NSUserDefaults standardUserDefaults] objectForKey:@"cardNumber"];
//TID
NSData *TID = [@"35959551" dataUsingEncoding:NSASCIIStringEncoding];
//PIN
NSData *PIN = [[NSString stringWithFormat:@"%@",self.pinField.text] dataUsingEncoding:NSASCIIStringEncoding];
//TPDU
NSMutableData *TPDU = [[NSMutableData alloc] init];
[TPDU appendBytes:"\x01\x02\x03\x04\x05" length:5];
//MTI
NSMutableData *MTI = [[NSMutableData alloc] init];
[MTI appendBytes:"\x02\x00" length:2];
//TRANSACTION CODE
NSString *transactionCode = @"700000";
NSData *trCode = [self convertToData:transactionCode];
//CARD NUMBER
NSString *cardWithLength = [@"16" stringByAppendingString:cardNumber];
NSData *card = [self convertToData:cardWithLength];
//TIME AND DATE
NSData *time = [self convertToData:transactionTime];
NSData *date = [self convertToData:transactionDate];
//BITMAP
NSString *mapa = @"6018000000801000";
NSData *mapaData = [self convertToData:mapa];
NSMutableData *request = [[NSMutableData alloc] init];
[request appendData:TPDU];
[request appendData:MTI];
[request appendData:mapaData];
[request appendData:card];
[request appendData:trCode];
[request appendData:time];
[request appendData:date];
[request appendData:TID];
[request appendData:PIN];
NSString *SI = [NSString stringWithFormat:@"00%lu",(unsigned long)[request length]];
NSData *SIData = [self convertToData:SI];
NSMutableData* fullRequest = [[NSMutableData alloc] init];
[fullRequest appendData:SIData];
[fullRequest appendData:request];