C# 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 轨道

我想制作一个程序,在不使用任何第三方工具的情况下,在银行和POS终端设备之间进行对话。让我们假设,目前,该程序将仅用于通过银行交换IP地址+端口号与特定银行进行对话

首先,假设我通过在POS终端刷卡得到这个输出

%B1234123412341234
^CardUser/John^030510100000019301000000877000000?;1234123412341234=0305101193010877?
然后我根据这一点将这些原始数据分类为磁道1、格式B和磁道2

曲目1格式B

轨道2

然后,我将使用C#程序来读取这些格式

在我写了所有上述代码之后,我想我需要用它将我的数据发送到银行

我的数据包括

  • 第1轨道+第2轨道信息
  • 任何类型的采购流程都可以提取的金额
  • 我想其中的两个项目,包括在ISO信息,我将发送给银行

    我的问题是:

  • 与银行互动的业务流程是否正确?我想得到任何建议

  • 是否可以将其中两个项目合并到一个ISO消息中,然后发送到银行


  • 请给我建议、任何参考资料或任何web链接。

    如果要使用ISO 8583消息格式,则需要在以下字段之一传递卡信息:
  • DE2=卡号
  • DE35=轨道II
  • DE45=轨道I

    您可以使用DE35或De45通过DE2,但没有人同时通过35和45

    接下来,您需要传递到期日期,该日期存储在DE14中

    您还需要传递这是什么类型的交易,即DE3的前两位数字,对于购买,它将是00,对于手工现金,它将是11,剩余的可以是0000,或者如果您指定了帐户类型,那么数字3和4将代表帐户类型,其余的应该是00,因为在这些交易中没有帐户

    您需要在字段DE4中传递金额

    您需要在DE11中传递跟踪编号

    字段DE41、DE42和DE43也用于标识您正在使用的终端以及拥有该终端的商户

    字段DE7、DE12用于指定交易的日期/时间

    字段DE49用于指定交易的货币

    字段DE18对于指定您使用的POS终端的商户类别代码很重要,这是该商户遵循的活动类型

    DE19可用于指定国家/地区

    DE25为输入模式(您是否使用芯片、磁条、手动输入?)


    这是您应该遵循的最低要求,但是,这取决于收单银行,他们至少需要什么规格

    我不知道现在它是否能帮助您。因为已经两年多了,你可能已经找到了解决这个问题的方法。。不过,我还是想简单描述一下:

    首先,当在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);
        }
    }