询问ISO 8583 verifone vx520的示例代码

时间:2015-07-06 07:21:57

标签: iso8583 openiso8583.net verifone

我想知道使用ISO 8583向服务器发送消息并回复verifone vx520终端的示例代码。

1 个答案:

答案 0 :(得分:3)

正如你对问题的评论所指出的,这不是一个代码共享网站,所以这样一个开放式的问题有点难以回答,但也许我可以让你从正确的方向开始。

首先,让我首先建议,如果您可以控制终端代码和将要与之通信的服务器,我建议您使用ISO8583。是的,它是一个行业标准,是的,它有效地传递数据,但它比VISA-1或XML或JSON等更难使用。这意味着你有更多的机会让bug蠕变进入你的代码。这也意味着如果出现问题,需要花费更多的精力来尝试找出发生的事情并尝试修复它。我已经使用了所有这些协议以及其他协议,我将告诉您ISO8583是我最不喜欢的协议之一。

假设您没有选择并且您必须使用ISO8583,那么值得注意的是ISO8583只是关于如何组装数据包以进行通信的规范。 Vx520终端(或任何其他VeriFone终端)没有什么特别之处,可以改变你实现它的方式,以及你如何在任何其他C ++平台上这样做除了VeriFone为你提供一个库来处理这个规范你可以随意使用或忽略。

您根本不需要使用此库。你可以自己动手,也可以。您可以在WikipediaCode Project和其他几个地方找到有关规范本身的更多信息(只需询问您最喜欢的搜索引擎)。请注意,当我完成8583项目时,我无法使用此库。如果我能够访问它,也许我不会非常讨厌这个协议......谁知道呢?

如果您还在阅读本文,那么我认为ISO8583是一项要求(或者您是一个受到惩罚的贪婪者)并且您有兴趣尝试VeriFone提供的这个引擎。

你需要做的第一件事(希望你已经完成它)是将ACT作为开发套件的一部分安装(我还建议你先去DevNet并获得最新版本的ACT开始...)。安装后,可以在%evoact%\include\iso8583.h找到库标题。有关如何使用它的文档可以在%evoact%\docs找到。特别是,请参阅DOC00310_Verix_eVo_ACT_Programmers_Guide.pdf的第6章。

显然,试图在这里包含一整章的信息将超出范围,但为了让您对引擎的工作方式有一个高层次的了解,请允许我分享一些摘录:

  

此引擎设计为桌面驱动。使用单个例程   用于组装和拆卸ISO 8583数据包。组装和   ISO 8583数据包的反汇编由以下结构驱动:

     
      
  • 地图一个或多个64位的集合,用于驱动数据包组装和   表明邮件中的内容。
  •   
  • 字段表定义使用的所有字段   通过申请。
  •   
  • 转换表定义数据转换例程。
  •   
  • 变体表用于定义变体字段的可选表。
  •   
     

process_8583()例程用于ISO的装配和反汇编   8583包。

使用process_8583()的示例在其他地方给出如下:

#include "appl8583.h" 
int packet_sz; 
void assemble_packet () 
{ 
    packet_sz = process_8583 (0, field_table, test_map, buffer, sizeof( buffer));
    printf ("\ fOUTPUT SIZE %d", packet_sz); 
}

void disassemble_packet () 
{ 
    packet_sz = process_8583 (1, field_table, test_map, buffer, packet_sz); 
    printf ("\ fINPUT NOT PROCESSED %d", packet_sz); 
}
  

要将此引擎合并到应用程序中,请修改APPL8583.C   和APPL8583.H文件,以便每个文件都包含所有应用程序变量   位图中需要并正确设置地图。编   APPL8583.C并将其与您的应用程序和ISO 8583库链接。   使用以下过程传输或接收ISO 8583数据包   使用ISO 8583接口引擎:

     

传输ISO 8583数据包

     

1在应用程序变量中设置要传输的数据值。

     

2调用prot8583_main()例程。这构造了完整的   message并返回构造消息中的字节数。

     

3调用write()来传输消息。

     

收到消息

     

1调用read()接收消息。

     

2调用process_8583()例程。这导致所有领域   存入应用程序变量。

     

3使用应用程序变量中的值。