我开始在我的应用程序中使用jpos。我需要我的应用程序向服务器发送消息iso8583(ver 1987)并收到响应。
这是我的代码:
InputStream is = PackagerFactory.class.getResourceAsStream("iso87ascii.xml");
ISOPackager packager = new GenericPackager(is);
ISOMsg m = new ISOMsg();
m.setMTI("0820");
m.set(7, "0319174039");
m.set(11, "639530");
m.set(15, "0319");
m.set(24, "001");
m.set(64, "6038f060aba137a5b0efb4cc538416c8");
m.setPackager(packager);
byte b[] = m.pack();
String s = new String(b);
" s"的价值:082002220100000000010000031917403963953003190016038f060aba137a5b0efb4cc538416c8
所以:
0820是MTI
02220100000000010000是位图。
有些事情我不明白:
1.关于位图:
为什么是位图20的长度,但是,它的长度是在文件config" iso87ascii.xml"中指定的。是16?
这是iso87ascii.xml的内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE isopackager SYSTEM "genericpackager.dtd">
<!-- ISO 8583:1987 (ASCII) field descriptions for GenericPackager -->
<isopackager>
<isofield
id="0"
length="4"
name="MESSAGE TYPE INDICATOR"
class="org.jpos.iso.IFA_NUMERIC"/>
<isofield
id="1"
length="16"
name="BIT MAP"
class="org.jpos.iso.IFA_BITMAP"/>
<isofield
id="2"
length="19"
name="PAN - PRIMARY ACCOUNT NUMBER"
class="org.jpos.iso.IFA_LLNUM"/>
...
<isofield
id="7"
length="14"
name="TRANSMISSION DATE AND TIME"
class="org.jpos.iso.IFA_NUMERIC"/>
...
<isofield
id="11"
length="6"
name="SYSTEM TRACE AUDIT NUMBER"
class="org.jpos.iso.IFA_NUMERIC"/>
....
<isofield
id="15"
length="4"
name="DATE, SETTLEMENT"
class="org.jpos.iso.IFA_NUMERIC"/>
...
<isofield
id="24"
length="3"
name="NETWORK INTERNATIONAL IDENTIFIEER"
class="org.jpos.iso.IFA_NUMERIC"/>
.....
<isofield
id="64"
length="32"
name="MESSAGE AUTHENTICATION CODE FIELD"
class="org.jpos.iso.IF_CHAR"/>
</isopackager>
2.关于消息的标题:
我想发送一条格式的信息:
Package header + Package body
包头:四个ASCII字符头指示包体长度。
包装体:8583信息
那么,我怎么能用JPOS呢?
请帮助,
提前感谢,
答案 0 :(得分:1)
您的第7场打包器是
<isofield id="7" length="14" name="TRANSMISSION DATE AND TIME" class="org.jpos.iso.IFA_NUMERIC"/>
您将其设置为:
m.set(7, "0319174039");
打包器将其打到14宽(左侧添加了0&#39; s)。试试这个,你会发现它:
Logger l = new Logger();
l.addListener(new SimpleLogListener(System.out));
ISOPackager packager = new GenericPackager("iso87ascii.xml");
packager.setLogger(l, "");
ISOMsg m = new ISOMsg();
m.setMTI("0820");
m.set(7, "0319174039");
m.set(11, "639530");
m.set(15, "0319");
m.set(24, "001");
m.set(64, "6038f060aba137a5b0efb4cc538416c8");
m.setPackager(packager);
byte b[] = m.pack();
m.dump(System.out,"");
m.unpack(b);
System.out.println(ISOUtil.hexdump(b));
m.dump(System.out,"");
你称之为包长度标题是jpos通过渠道所做的事情。因此,您将iso msg通过一个附加/预占长度的通道传递给消息并传输它。
ASCIIChannel channel = new ASCIIChannel("127.0.0.1",7654,packager);//IP port to connect to, and packager will be used to pack the message and send it
channel.setLogger(l, "Test");
channel.send(m);
另请参阅Google Group主题。