C# POS终端与银行之间的支付
我想制作一个程序,在不使用任何第三方工具的情况下,在银行和POS终端设备之间进行对话。让我们假设,目前,该程序将仅用于通过银行交换IP地址+端口号与特定银行进行对话 首先,假设我通过在POS终端刷卡得到这个输出C# POS终端与银行之间的支付,c#,payment,credit-card,bank,iso8583,C#,Payment,Credit Card,Bank,Iso8583,我想制作一个程序,在不使用任何第三方工具的情况下,在银行和POS终端设备之间进行对话。让我们假设,目前,该程序将仅用于通过银行交换IP地址+端口号与特定银行进行对话 首先,假设我通过在POS终端刷卡得到这个输出 %B1234123412341234 ^CardUser/John^030510100000019301000000877000000?;1234123412341234=0305101193010877? 然后我根据这一点将这些原始数据分类为磁道1、格式B和磁道2 曲目1格式B 轨道
%B1234123412341234
^CardUser/John^030510100000019301000000877000000?;1234123412341234=0305101193010877?
然后我根据这一点将这些原始数据分类为磁道1、格式B和磁道2
曲目1格式B
轨道2
然后,我将使用C#程序来读取这些格式
在我写了所有上述代码之后,我想我需要用它将我的数据发送到银行
我的数据包括
请给我建议、任何参考资料或任何web链接。如果要使用ISO 8583消息格式,则需要在以下字段之一传递卡信息:
这是您应该遵循的最低要求,但是,这取决于收单银行,他们至少需要什么规格我不知道现在它是否能帮助您。因为已经两年多了,你可能已经找到了解决这个问题的方法。。不过,我还是想简单描述一下: 首先,当在POS终端的MSR磁头刷卡(借记/贷记)时,T1和T2中的卡数据详细信息用于形成ISO 8583数据包 您必须决定您将使用哪个版本的ISO 8583,并且您的POS机将要点击的支付开关必须紧随其后 假设您使用的是ISO 8583 v2003 现在,当刷卡时,您的POS终端将形成一个ISO8583数据包,对其进行加密,并通过安全隧道(TCP-IP)发送给支付交换机。现在,此开关将连接到支付网关(它可以连接到银行,或一个或多个PG),请求将从支付开关转发到PG 授权和认证后,PG将通过支付开关向POS终端回复请求
%B1234123412341234
^CardUser/John^030510100000019301000000877000000?;1234123412341234=0305101193010877?
需要注意的一点:
1.您的POS终端应通过PCI PTS POI认证,可合法刷卡任何VISA/MC/Amex卡
2.PCI PTS有安全要求,您的设备应遵守这些要求
3.ISO 8583标准对不同类型的财务请求有不同的MTI。对于ex For SALE,您必须发送MTI 200/210、用于撤销MTI 420/430、用于登录和密钥交换MTI 804/810等
您必须具备8583标准的深入知识才能形成数据包
如果您想让我解释有关ISO8583的安全要求或更多信息,请告诉我。您需要与相关银行联系,但是,您会发现卡支付(至少在英国)往往会通过数量有限的“清算所”它们规定了连接机制和许可。请你给我一些@ChrisBD的参考资料好吗?如果你想直接与银行沟通,那么你正在谈论成为一家支付服务提供商。更多信息请参见我的答案:首先,让我对你说,我真的非常感谢你的帮助,非常感谢。然后我想让你们知道,你们是我的在线老师之一,可以让我知道如何阅读ISO8583信息,根据你们的回答,我正在开发一个移动应用程序。我想集成支付开关。我如何集成它?您能给我发送支付开关的链接吗?对于支付开关,您需要联系提供此类服务的不同公司。
;
1234123412341234
=
0305
101
193010877
?
protected void CardReader_OTC(object sender, EventArgs e)
{
bool CaretPresent = false;
bool EqualPresent = false;
CaretPresent = CardReader.Text.Contains("^");
EqualPresent = CardReader.Text.Contains("=");
if (CaretPresent)
{
string[] CardData = CardReader.Text.Split('^');
//B1234123412341234^CardUser/John^030510100000019301000000877000000?
PersonName.Text = FormatName(CardData[1]);
CardNumber.Text = FormatCardNumber(CardData[0]);
CardExpiration.Text = CardData[2].Substring(2, 2) + "/" + CardData[2].Substring(0, 2);
}
else if (EqualPresent)
{
string[] CardData = CardReader.Text.Split('=');
//1234123412341234=0305101193010877?
CardNumber.Text = FormatCardNumber(CardData[0]);
CardExpiration.Text = CardData[1].Substring(2, 2) + "/" + CardData[1].Substring(0, 2);
}
}