2016-10-20 71 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

是。現在工作正常。謝謝 :) –