如何在我的 C# windows 应用程序上启用 POS 支付?
How to enable POS payment on my C# windows application?
如何将卡上的数据读取到POS应用程序?
我被告知一些信息,例如卡号和持卡人姓名显示在主管终端的屏幕上。为了将卡信息发送到 POS 主管应用程序,应该使用 Keypress()
事件。
如何将POS刷卡机的卡片信息发送到POS app?因为仅通过安装驱动程序和配置支付网关不会将数据发送到 pos 应用程序。我必须做什么才能使 keypress()
事件执行?我确定开发人员必须编写代码才能从 POS 刷卡机获取该字符串数据。您是否足够慷慨地完成整个过程并展示一些示例代码(在线示例代码或您想要共享的一些代码)来说明如何做?因为刷卡时 Keypress()
事件无法执行?
首先,这听起来像是 PCI DSS 的噩梦。在屏幕上显示卡信息是一个明确的问题,下面的代码使您容易受到键盘记录和内存解析的攻击。也就是说...
如果您希望为此使用 KeyPress
事件,我假设您正在从键盘楔形 MSR 接收曲目信息,这非常简单 - 它只是吐出曲目信息纯文本。您可以使用 KeyPress
事件来处理输入的每个字符,然后在轨道结束标记(通常为 ?
)上发送字符串:
为了简单起见,我们假设您正在滑动到 WinForms TextBox
:
在您的表单设计器 select 您的文本框中,转到事件并添加一个 KeyPress 处理程序,或者在您的表单的 InitializeComponent()
方法中,手动附加它:
this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
然后在表单的代码隐藏中定义您的 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();
}
}
我们在这里所做的是在滑动触发的每个 KeyPress
事件参数上解析 KeyChar
。 ?
是单个轨道的典型结束哨兵,并且有两个轨道被认为是处理卡片所必需的(有关格式的更多信息,请参见此处:http://en.wikipedia.org/wiki/Magnetic_stripe_card#Financial_cards)-因此我们考虑卡片信息在第二首曲目结束时完成。
您需要定义上面提到的 sendTrackInfo()
方法来格式化(删除哨兵、分离等)并将您在 trackInfo.ToString()
中收集的跟踪数据发送给您的主管应用程序,可能在 XML 中或作为流。
如何将卡上的数据读取到POS应用程序?
我被告知一些信息,例如卡号和持卡人姓名显示在主管终端的屏幕上。为了将卡信息发送到 POS 主管应用程序,应该使用 Keypress()
事件。
如何将POS刷卡机的卡片信息发送到POS app?因为仅通过安装驱动程序和配置支付网关不会将数据发送到 pos 应用程序。我必须做什么才能使 keypress()
事件执行?我确定开发人员必须编写代码才能从 POS 刷卡机获取该字符串数据。您是否足够慷慨地完成整个过程并展示一些示例代码(在线示例代码或您想要共享的一些代码)来说明如何做?因为刷卡时 Keypress()
事件无法执行?
首先,这听起来像是 PCI DSS 的噩梦。在屏幕上显示卡信息是一个明确的问题,下面的代码使您容易受到键盘记录和内存解析的攻击。也就是说...
如果您希望为此使用 KeyPress
事件,我假设您正在从键盘楔形 MSR 接收曲目信息,这非常简单 - 它只是吐出曲目信息纯文本。您可以使用 KeyPress
事件来处理输入的每个字符,然后在轨道结束标记(通常为 ?
)上发送字符串:
为了简单起见,我们假设您正在滑动到 WinForms TextBox
:
在您的表单设计器 select 您的文本框中,转到事件并添加一个 KeyPress 处理程序,或者在您的表单的 InitializeComponent()
方法中,手动附加它:
this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress);
然后在表单的代码隐藏中定义您的 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();
}
}
我们在这里所做的是在滑动触发的每个 KeyPress
事件参数上解析 KeyChar
。 ?
是单个轨道的典型结束哨兵,并且有两个轨道被认为是处理卡片所必需的(有关格式的更多信息,请参见此处:http://en.wikipedia.org/wiki/Magnetic_stripe_card#Financial_cards)-因此我们考虑卡片信息在第二首曲目结束时完成。
您需要定义上面提到的 sendTrackInfo()
方法来格式化(删除哨兵、分离等)并将您在 trackInfo.ToString()
中收集的跟踪数据发送给您的主管应用程序,可能在 XML 中或作为流。