如何在我的C#windows应用程序上启用POS付款?

时间:2015-05-06 02:06:06

标签: c# winforms payment-gateway payment-processing

如何将卡上的数据读入POS应用程序?

我被告知一些信息,如卡号和持有人的姓名显示在主管终端的屏幕上。为了将卡信息发送到POS主管应用程序,应该使用Keypress()事件。

如何从POS卡刷卡机向POS应用程序发送卡信息?因为只需安装驱动程序并配置支付网关就不会向pos应用程序发送数据。我必须做些什么来使keypress()事件执行?我确定开发人员必须编写代码才能从POS卡刷卡机获取该字符串数据。您是否足够慷慨地完成整个过程并显示一些示例代码(在线示例代码或您想要分享的代码)如何执行此操作?因为在卡刷卡上执行Keypress()事件的地方没有办法吗?

1 个答案:

答案 0 :(得分:1)

首先,这听起来像是PCI DSS的噩梦。在屏幕上显示卡信息是一个明确的问题,以下代码使您容易受到键盘记录和内存分析的影响。那说......

如果您预计会使用KeyPress事件,我会假设您正在从键盘楔形MSR接收音轨信息,这非常简单 - 它只是吐出音轨纯文本信息。您可以使用KeyPress事件来处理输入的每个字符,然后在轨道端标记上发送字符串(通常为?):

为了简单起见,我们假设您正在刷入WinForms TextBox

在您的表单设计器中选择您的文本框,转到事件并添加KeyPress处理程序,或者在表单的InitializeComponent()方法中,手动附加它:

this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);

然后在Form的代码隐藏中定义您的KeyPress事件:

private StringBuilder trackInfo;
private bool track1Complete = false;

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar != '?' && !track1Complete)
    {
        trackInfo.Append(e.KeyChar);
    }
    else if (e.KeyChar == '?' && !track1Complete)
    {
        trackInfo.Append(e.KeyChar);
        trackInfo.AppendLine();
        track1Complete = true;
    }
    else if (e.KeyChar != '?' && track1Complete)
    {
        trackInfo.Append(e.KeyChar);
    }
    else if (e.KeyChar == '?' && track1Complete)
    {
        trackInfo.Append(e.KeyChar);
        trackInfo.AppendLine();
        sendTrackInfo();
    }
}

我们在这里做的是解析由滑动触发的每个KeyChar事件参数上的KeyPress?是单个曲目的典型结束哨兵,并且有两条曲目被认为是处理卡片所必需的(有关格式的更多信息,请参阅此处:http://en.wikipedia.org/wiki/Magnetic_stripe_card#Financial_cards) - 因此我们考虑卡片信息在第二首曲目结束时完成。

您需要定义上面引用的sendTrackInfo()方法来格式化(删除标记,分隔等)并将您在trackInfo.ToString()收集的曲目数据发送到您的主管应用程序,可能是XML或流。