我想知道使用ISO 8583向服务器发送消息并回复verifone vx520终端的示例代码。
答案 0 :(得分:3)
正如你对问题的评论所指出的,这不是一个代码共享网站,所以这样一个开放式的问题有点难以回答,但也许我可以让你从正确的方向开始。
首先,让我首先建议,如果您可以控制终端代码和将要与之通信的服务器,我建议您不使用ISO8583。是的,它是一个行业标准,是的,它有效地传递数据,但它比VISA-1或XML或JSON等更难使用。这意味着你有更多的机会让bug蠕变进入你的代码。这也意味着如果出现问题,需要花费更多的精力来尝试找出发生的事情并尝试修复它。我已经使用了所有这些协议以及其他协议,我将告诉您ISO8583是我最不喜欢的协议之一。
假设您没有选择并且您必须使用ISO8583,那么值得注意的是ISO8583只是关于如何组装数据包以进行通信的规范。 Vx520终端(或任何其他VeriFone终端)没有什么特别之处,可以改变你实现它的方式,以及你如何在任何其他C ++平台上这样做除了VeriFone为你提供一个库来处理这个规范你可以随意使用或忽略。
您根本不需要使用此库。你可以自己动手,也可以。您可以在Wikipedia,Code 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使用应用程序变量中的值。