1

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

4

1 回答 1

3

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

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

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

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

如果您仍在阅读本文,那么我会假设 ISO8583 是一项要求(或者您是一个贪吃的惩罚者)并且您有兴趣尝试 VeriFone 提供的这个引擎。

您需要做的第一件事(希望您已经完成)是安装 ACT 作为开发套件的一部分(我还建议您在开始之前前往 DevNet 并获取最新版本的 ACT。. .)。安装后,库头文件可以在%evoact%\include\iso8583.h. 关于如何使用它的文档可以在%evoact%\docs. 特别是,参见第 6 章DOC00310_Verix_eVo_ACT_Programmers_Guide.pdf

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

该引擎设计为表驱动。一个例程用于 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() 例程。这将构造完整的消息并返回构造消息中的字节数。

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

接收消息

1 调用 read() 接收消息。

2 调用 process_8583() 例程。这会导致所有字段都存入应用程序变量中。

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

于 2015-07-06T20:14:31.847 回答