2016-10-20 34 views
1

的ISO消息,我有文本数据,如何产生j8583

PROCESSINGCODE: 000000 
SYSTEMTRACEAUDITNUMBER: 000001 
Cardacceptorterminalidentification:3239313130303031 
Reservednational:001054455354204D45535347 
Networkmanagementinformationcode:0301 

我需要生成使用j8583项目位域的ISO消息。

我试图解析isomesssage,但我不知道如何生成ISO消息。

注:我知道,这可与初级专业人员来完成,但我需要j8583做到这一点。

我在下面程序创建的。

public static void main(String[] args) { 


MessageFactory<IsoMessage> mf = new MessageFactory<IsoMessage>(); 
    try { 
     //mfact = ConfigParser.createFromClasspathConfig("C:\\Users\\DHEERAJ\\workspace\\j8583.xml"); 

     String path="C:\\Users\\DHEERAJ\\workspace\\j8583.xml"; 
     ConfigParser.configureFromUrl(mf, new File(path).toURI().toURL()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
     mf.setForceSecondaryBitmap(true); 
     mf.setUseBinaryBitmap(true); 
     mf.setAssignDate(true); 
     mf.setTraceNumberGenerator(new SimpleTraceGenerator((int) (System.currentTimeMillis() % 100000))); 
     System.out.println("NEW MESSAGE"); 
     IsoMessage m = mf.newMessage(0200); 

     m.setValue(3, "000000", IsoType.ALPHA, 6); 
     m.setValue(11, "000001", IsoType.ALPHA, 6); 
     m.setValue(41, "3239313130303031", IsoType.ALPHA, 16); 
     m.setValue(60, "001054455354204D45535347", IsoType.ALPHA, 24); 
      m.setValue(70, "0301", IsoType.ALPHA, 4); 

      m.setForceSecondaryBitmap(true); 

} 

我有下面的输出。

V0080¢€00000010201245030000013239313130303031001054455354204D455353470301

这个输出没有位值,并开始有一些不需要的值。

有人可以帮忙吗?

谢谢。

+0

我想知道背后downvote的原因问题?欢迎任何有关改进的建议。谢谢 –

+0

一开始,这看起来像是一个“为我写代码”的问题。或者是一个教程或其他东西的请求。 –

+0

@StephenC我已经用代码更新了我的问题。 :)任何其他建议?谢谢 –

回答

2

下面的Java代码打印0200A220000000800010040000000000000000000010240507450000013239313130303031001054455354204D455353470301,在其中你可以看到位图信息。

import com.solab.iso8583.MessageFactory; 
import com.solab.iso8583.IsoMessage; 
import com.solab.iso8583.IsoType; 
import com.solab.iso8583.parse.ConfigParser; 
import com.solab.iso8583.impl.SimpleTraceGenerator; 
import java.io.File; 
import java.io.IOException; 

class Sample { 
    public static void main(String[] args) { 
     // Check http://j8583.sourceforge.net/javadoc/index.html 

     MessageFactory<IsoMessage> mf = new MessageFactory<IsoMessage>(); 

     try { 
      String path="j8583.xml"; 
      ConfigParser.configureFromUrl(mf, new File(path).toURI().toURL()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     mf.setForceSecondaryBitmap(true); 
     mf.setUseBinaryBitmap(true); 
     mf.setAssignDate(true); // This sets field 7 automatically 
     mf.setTraceNumberGenerator(new SimpleTraceGenerator((int) (System.currentTimeMillis() % 100000))); 

     IsoMessage m = mf.newMessage(0x200); // You must use 0x200, 0x400, etc. 
     m.setValue(3, "000000", IsoType.ALPHA, 6); 
     m.setValue(11, "000001", IsoType.ALPHA, 6); 
     m.setValue(41, "3239313130303031", IsoType.ALPHA, 16); 
     m.setValue(60, "001054455354204D45535347", IsoType.ALPHA, 24); 
     m.setValue(70, "0301", IsoType.ALPHA, 4); 
     m.setForceSecondaryBitmap(true); 

     System.out.println(m.debugString()); 
    } 
} 
+0

感谢您的回复。考虑到“A220000000800010”作为输出中的主要位图,将前2个字符A2解码为二进制“10100010”说明字段3和7存在。但在你的代码中,没有字段7.我错过了什么!另外你在代码中将MTI设置为0080? –

+1

嗨,对不起,我按原样复制了你的代码。现在我编辑我的答案,将生成新消息的行更改为“IsoMessage m = mf.newMessage(0x200);'。如[j8583 Java文档](http://j8583.sourceforge.net/javadoc/index.html)所述,注意MTI参数现在是'0x200'而不是'0200'。这会生成以下消息:'0200A220000000800010040000000000000000000010240507450000013239313130303031001054455354204D455353470301'。关于字段7,您可以使用此行'mf.setAssignDate(true);'来设置它。我强烈建议检查Java文档,他们写得很好:) –

+1

是。现在工作正常。谢谢 :) –