美国运通的 ISO8583
ISO8583 for Amex
有人为 Amex 实现了消息传递 iso8583 吗?我有一个端口和 ip,但是当我用一个套接字发送一条回显消息 (1804) 时,它不回答任何事情……编码是 EBCDIC。有人有例子吗?代码在 C#
Console.WriteLine("Send Message Echo...");
ManageConnection.ManageSocket _manage = new ManageConnection.ManageSocket(IpAmex, PortAmex);
TupleList<Encoding, string> _request = new TupleList<Encoding, string>();
_request.Add(Encoding.GetEncoding(500), "1804");
_request.Add(Encoding.UTF8, "2030018000000000");
_request.Add(Encoding.GetEncoding(500), "000000");
_request.Add(Encoding.GetEncoding(500), "112233");
_request.Add(Encoding.GetEncoding(500), "1709141205108318700");
var _response = _manage.SendMessageSocket(_request);
return _response;
public string SendMessageSocket(TupleList<Encoding, string> _messages) {
string _return = String.Empty;
try
{
byte[] bytes = new byte[65000];
IPAddress ipAddress = IPAddress.Parse(IP);
IPEndPoint remoteEP = new IPEndPoint(ipAddress, Port);
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(remoteEP);
Console.WriteLine("Enviando mensaje....");
var bytesMessage = GetCompleteMessage(_messages);
// This function GetCompleteMessage= byte[] bytesMessage = { 241, 248, 240, 244, 32, 48, 1, 128, 0, 0, 0, 0, 240, 240, 240, 240, 241, 241, 241, 242, 242, 243, 243, 241, 247, 240, 249, 241, 244, 241, 242, 240, 245, 241, 240, 248, 243, 241,248, 247, 240, 240 };
int bytesSent = sender.Send(bytesMessage);
Console.WriteLine("Esperando respuesta....");
int bytesRec = sender.Receive(bytes); //Here don't receive nothing
int len = Array.IndexOf(bytes, byte.MinValue);
var responseString = Encoding.UTF8.GetString(bytes, byte.MinValue, len);
sender.Shutdown(SocketShutdown.Both);
sender.Close();
return xmlResponseString;
}
catch (Exception ex)
{
throw;
}
}
该消息针对 ISO8583 全球信用授权指南 (GCAG),
我不懂 C#,但我在 JAVA 中实现了 AMEX。我猜你不应该在 EBCDIC 中编码位图,而是只 unhex 它的内容。作为位图,我的意思是“2030018000000000
”。
希望对您有所帮助。
1.美国运通使用的类似 ISO8583 的规范。
他们使用了几种自定义的 ISO 8583 方言,例如:
- 全球信用授权指南(GCAG),
- 全球电子数据采集(GEDC)终端消息规范,
- 双界面处理(PIP)终端界面。
查看您的 MTI 1804,我猜它是 GCAG,是的,消息通常采用 EBCDIC 编码。
从您的要求中得到的消息并不完全清楚body。请添加您的网络消息的十六进制表示。它可以显示消息 body 编码的潜在问题。
我们支持围绕 ISO8583 方言和金融数据的在线服务。
这里是GCAG ISO 8583 message body parser。
您可以检查传出消息结构和您的 EBCDIC 编码。
2。关于美国运通主机。
我同意有很多 TCP/IP 套接字服务可以与 Amex 转发和交换消息数据或自己处理消息,但实际上 Amex 在大多数情况下使用全球网络服务 (GWS) IP 支付网关, 这是与特定 HTTP Headers.
的 HTTPS 连接
由于 HTTP/HTTPS 数据通过 GWS 传输消息,即使是 EBCDIC 编码,也被处理为 ASCII 十六进制字符串。
TCP/IP 套接字连接可能有附加消息 headers、长度字节、开始和结束数据包数据。确保您的 TCP/IP 主机的连接要求。
作为使用测试卡授权处理 Amex ISO 8583 消息的工作示例,您可以尝试GCAG host simulator直接通过表单发布您的请求消息或启动 HTTPS 主机模拟器服务。
3。作为奖励的例子
这是使用通过 Amex GCAG 主机模拟器处理的主位图更正的 1804 消息。 YAML 中表示的消息结构。
---
# Cheef's parser.
# Copyright (C) 2008-2017 Alexander Shevelev. https://iso8583.info/
# lib : "/lib/AMEX/GCAG/" - Global Credit Authorization Guide
# tool : "host"
# stat : 28 nodes, 14 lookup tables, 92.86% passed (13/14)
host: # AMEX GCAG host simulator
- rq:#"F1F8F0F42030018000000000F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4..F0F0" # AMEX GCAG message
- MTI: "1804" # Message Type ID. // network management request
- DE000: "2030018000000000" # Primary bitmap // 3.11.12.24.25.
- BM0:#"F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4F1F2F0F5F1F0F8F3F1F8F7F0F0" # Fields at Primary Bitmap
- DE003:#"000000" # PC // System Audit Control/Echo Message
- S01: "00" # Transaction Code. // Goods and service
- S02: "00" # Account, from. // unspecified
- S03: "00" # Account, to. // unspecified
- DE011: "112233" # STAN.
- DE012:#"170914120510" # Date and time, local transaction
- date: "170914" # Date, local transaction. // 2017.09.14
- time: "120510" # Time, local transaction. // 12:05:10
- DE024: "831" # Function code. // echo test.
- DE025: "8700" # Message reason code (MRC).
- rs:#"F1F8F1F42030010002000000F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4..F0F0" # AMEX GCAG message
- MTI: "1814" # Message Type ID. // network management request response
- DE000: "2030010002000000" # Primary bitmap // 3.11.12.24.39.
- BM0:#"F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4F1F2F0F5F1F0F8F3F1F0F0F0" # Fields at Primary Bitmap
- DE003:#"000000" # PC // System Audit Control/Echo Message
- S01: "00" # Transaction Code. // Goods and service
- S02: "00" # Account, from. // unspecified
- S03: "00" # Account, to. // unspecified
- DE011: "112233" # STAN.
- DE012:#"170914120510" # Date and time, local transaction
- date: "170914" # Date, local transaction. // 2017.09.14
- time: "120510" # Time, local transaction. // 12:05:10
- DE024: "831" # Function code. // echo test.
- DE039: "000" # Action Code // approved.
消息需要包含描述消息内容长度的两个字节。消息中缺少所述两个字节。
有人为 Amex 实现了消息传递 iso8583 吗?我有一个端口和 ip,但是当我用一个套接字发送一条回显消息 (1804) 时,它不回答任何事情……编码是 EBCDIC。有人有例子吗?代码在 C#
Console.WriteLine("Send Message Echo...");
ManageConnection.ManageSocket _manage = new ManageConnection.ManageSocket(IpAmex, PortAmex);
TupleList<Encoding, string> _request = new TupleList<Encoding, string>();
_request.Add(Encoding.GetEncoding(500), "1804");
_request.Add(Encoding.UTF8, "2030018000000000");
_request.Add(Encoding.GetEncoding(500), "000000");
_request.Add(Encoding.GetEncoding(500), "112233");
_request.Add(Encoding.GetEncoding(500), "1709141205108318700");
var _response = _manage.SendMessageSocket(_request);
return _response;
public string SendMessageSocket(TupleList<Encoding, string> _messages) {
string _return = String.Empty;
try
{
byte[] bytes = new byte[65000];
IPAddress ipAddress = IPAddress.Parse(IP);
IPEndPoint remoteEP = new IPEndPoint(ipAddress, Port);
Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
sender.Connect(remoteEP);
Console.WriteLine("Enviando mensaje....");
var bytesMessage = GetCompleteMessage(_messages);
// This function GetCompleteMessage= byte[] bytesMessage = { 241, 248, 240, 244, 32, 48, 1, 128, 0, 0, 0, 0, 240, 240, 240, 240, 241, 241, 241, 242, 242, 243, 243, 241, 247, 240, 249, 241, 244, 241, 242, 240, 245, 241, 240, 248, 243, 241,248, 247, 240, 240 };
int bytesSent = sender.Send(bytesMessage);
Console.WriteLine("Esperando respuesta....");
int bytesRec = sender.Receive(bytes); //Here don't receive nothing
int len = Array.IndexOf(bytes, byte.MinValue);
var responseString = Encoding.UTF8.GetString(bytes, byte.MinValue, len);
sender.Shutdown(SocketShutdown.Both);
sender.Close();
return xmlResponseString;
}
catch (Exception ex)
{
throw;
}
}
该消息针对 ISO8583 全球信用授权指南 (GCAG),
我不懂 C#,但我在 JAVA 中实现了 AMEX。我猜你不应该在 EBCDIC 中编码位图,而是只 unhex 它的内容。作为位图,我的意思是“2030018000000000
”。
希望对您有所帮助。
1.美国运通使用的类似 ISO8583 的规范。
他们使用了几种自定义的 ISO 8583 方言,例如:
- 全球信用授权指南(GCAG),
- 全球电子数据采集(GEDC)终端消息规范,
- 双界面处理(PIP)终端界面。
查看您的 MTI 1804,我猜它是 GCAG,是的,消息通常采用 EBCDIC 编码。
从您的要求中得到的消息并不完全清楚body。请添加您的网络消息的十六进制表示。它可以显示消息 body 编码的潜在问题。
我们支持围绕 ISO8583 方言和金融数据的在线服务。 这里是GCAG ISO 8583 message body parser。 您可以检查传出消息结构和您的 EBCDIC 编码。
2。关于美国运通主机。
我同意有很多 TCP/IP 套接字服务可以与 Amex 转发和交换消息数据或自己处理消息,但实际上 Amex 在大多数情况下使用全球网络服务 (GWS) IP 支付网关, 这是与特定 HTTP Headers.
的 HTTPS 连接由于 HTTP/HTTPS 数据通过 GWS 传输消息,即使是 EBCDIC 编码,也被处理为 ASCII 十六进制字符串。
TCP/IP 套接字连接可能有附加消息 headers、长度字节、开始和结束数据包数据。确保您的 TCP/IP 主机的连接要求。
作为使用测试卡授权处理 Amex ISO 8583 消息的工作示例,您可以尝试GCAG host simulator直接通过表单发布您的请求消息或启动 HTTPS 主机模拟器服务。
3。作为奖励的例子
这是使用通过 Amex GCAG 主机模拟器处理的主位图更正的 1804 消息。 YAML 中表示的消息结构。
---
# Cheef's parser.
# Copyright (C) 2008-2017 Alexander Shevelev. https://iso8583.info/
# lib : "/lib/AMEX/GCAG/" - Global Credit Authorization Guide
# tool : "host"
# stat : 28 nodes, 14 lookup tables, 92.86% passed (13/14)
host: # AMEX GCAG host simulator
- rq:#"F1F8F0F42030018000000000F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4..F0F0" # AMEX GCAG message
- MTI: "1804" # Message Type ID. // network management request
- DE000: "2030018000000000" # Primary bitmap // 3.11.12.24.25.
- BM0:#"F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4F1F2F0F5F1F0F8F3F1F8F7F0F0" # Fields at Primary Bitmap
- DE003:#"000000" # PC // System Audit Control/Echo Message
- S01: "00" # Transaction Code. // Goods and service
- S02: "00" # Account, from. // unspecified
- S03: "00" # Account, to. // unspecified
- DE011: "112233" # STAN.
- DE012:#"170914120510" # Date and time, local transaction
- date: "170914" # Date, local transaction. // 2017.09.14
- time: "120510" # Time, local transaction. // 12:05:10
- DE024: "831" # Function code. // echo test.
- DE025: "8700" # Message reason code (MRC).
- rs:#"F1F8F1F42030010002000000F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4..F0F0" # AMEX GCAG message
- MTI: "1814" # Message Type ID. // network management request response
- DE000: "2030010002000000" # Primary bitmap // 3.11.12.24.39.
- BM0:#"F0F0F0F0F0F0F1F1F2F2F3F3F1F7F0F9F1F4F1F2F0F5F1F0F8F3F1F0F0F0" # Fields at Primary Bitmap
- DE003:#"000000" # PC // System Audit Control/Echo Message
- S01: "00" # Transaction Code. // Goods and service
- S02: "00" # Account, from. // unspecified
- S03: "00" # Account, to. // unspecified
- DE011: "112233" # STAN.
- DE012:#"170914120510" # Date and time, local transaction
- date: "170914" # Date, local transaction. // 2017.09.14
- time: "120510" # Time, local transaction. // 12:05:10
- DE024: "831" # Function code. // echo test.
- DE039: "000" # Action Code // approved.
消息需要包含描述消息内容长度的两个字节。消息中缺少所述两个字节。