有啥方法可以接受来自非本地 Web 应用程序的读卡器刷卡?

Posted

技术标签:

【中文标题】有啥方法可以接受来自非本地 Web 应用程序的读卡器刷卡?【英文标题】:Any way to accept Credit Card swipes with a reader from a non-native Web App?有什么方法可以接受来自非本地 Web 应用程序的读卡器刷卡? 【发布时间】:2017-04-30 09:30:31 【问题描述】:

我正在开发一个应用程序,它是一个市场,并使用 Stripe 的 API 进行订阅等。

该应用程序是一个将在移动设备上大量使用的网络应用程序,但它不是本机应用程序 - 它是一个基于浏览器的应用程序。

最终用户需要亲自接受客户的付款,我正在尝试通过刷客户卡来找到解决方案。然而,我发现的所有技术解决方案(例如 Cardflight 等)都是专门针对原生应用程序(iosandroid)的。

有没有人在网络应用上听说过或这样做过?

【问题讨论】:

它是非官方支持的,但在使用它之前,您需要确保自己符合 PCI 标准。联系 support@stripe.com 了解更多信息。 感谢 korben,我实际上/仍在等待 Stripe 支持团队的回复。想我应该问。我想 PCI 合规性与通过电话获取信用卡的过程相同 - 你是这个意思吗? 嗨 IfTrue,我正在尝试做同样的事情,你有没有找到解决方案? @dave4jr 我没有,现在也不相信这是可能的。 【参考方案1】:

IfTrue,我遇到了同样的问题(如我今年早些时候的评论所示)。我想出了如何做到这一点,但并非没有它的缺点(安全性、PCI 等)。首先,我需要一种 javascript 方法来触发基于滑动、扫描等的事件。我找到了这个库,https://github.com/CarlRaymond/jquery.cardswipe,它为您提供与扫描事件相关的 javascript 回调(扫描完成、扫描成功和扫描错误)。我特别喜欢它的一点是,您不必专注于表单即可将刷过的数据带到需要去的地方,您只需选择表单,无论您在应用程序中的哪个位置,它都会填写形成。再次,作者在其 README 文件中警告可能存在的安全风险。

获得解析的信用卡扫描数据后,我使用了 stripes jquery.payments 库,该库为您提供了验证数据以及使用输入构建您自己的表单的功能。关键是能够使用实际的表单输入,因此我可以在提交表单之前将解析数据的值分配给每个输入。 http://stripe.github.io/jquery.payment/example/

Stripe 一直试图摆脱这种做法。由于 PCI 问题和其他相关的安全问题,他们并不热衷于人们构建自己的表单输入。我最终没有这样做,因为我不想为额外的 PCI 法规负责。此外,使用那些基本的 USB 刷卡器(我正在使用的),有人可以在技术上拦截数据。这是我知道如何做到这一点的唯一方法,而且效果很好,如果不是出于安全问题,我仍然会使用它。这是我的一些代码。希望这会有所帮助。

            var complete = function(data) 
                if (data.type == "generic") 
                    sweetAlert("Oops...", "Card Type Not Recognized!", "error");
                    return false;
                
                $("#cc-fullname").val(data.firstName + " " + data.lastName);
                $("#cc-number").val(data.account);
                $("#cc-exp").val(data.expMonth + " / " + data.expYear);

                window["stripe_fullname"] = data.firstName + " " + data.lastName;
                window["stripe_number"] = data.account;
                window["stripe_exp_month"] = data.expMonth;
                window["stripe_exp_year"] = data.expYear;
            ;
            var failure = function() 
                swal("Oops...", "Something went wrong... Please try again!", "error");
            

            /*  Success Function
            ========================================= */
            var success = function(event, data) 
                Stripe.setPublishableKey(" stripe_publishable_key ");


                /*  Create Token
                ======================= */
                Stripe.card.createToken(
                    name: window["stripe_fullname"],
                    number: window["stripe_number"],
                    exp_month: window["stripe_exp_month"],
                    exp_year: window["stripe_exp_year"],
                , stripeResponseHandler);


                /*  Response Callback
                ======================== */
                function stripeResponseHandler(status, response) 
                    var $form = $('#payment-card-form');
                    if (response.error) 
                        $form.find('.payment-errors').text(response.error.message);
                        $form.find('button').prop('disabled', false);
                     else 
                        var token = response.id;
                        $form.append($('<input type="hidden" name="stripeToken" />').val(token));
                        $form.get(0).submit();
                    
                


            

            $.cardswipe(
                firstLineOnly: true,
                success: complete,
                parsers: ["visa", "amex", "mastercard", "discover", "generic"],
                debug: false
            );
            $(document).on("success.cardswipe", success).on("failure.cardswipe", failure);

【讨论】:

嘿 dave4jr,非常感谢您的回复。我通读了所有内容,它与我将要采取的一种方法非常相似,但正如您发现安全风险对我的客户来说非常棒一样。再次感谢您的跟进! 没问题先生! =) 谢谢! 嗨@dave4jr。我知道这是一篇相当老的帖子,但我想知道您是否可以详细说明您提到的一些安全问题。我正在对类似的方法进行一些调查。扫描仪 --> 本机/Web 应用程序 --> Web 服务 --> 支付网关。在我看来,只要符合 PCI 就足以放弃这一点,但我正在建立一个关于这个主题的案例。您的意见会有所帮助和赞赏。谢谢!

以上是关于有啥方法可以接受来自非本地 Web 应用程序的读卡器刷卡?的主要内容,如果未能解决你的问题,请参考以下文章

ic卡读卡器web开发静态调用ocx和动态调用ocx的区别

电脑里realtek pcie card reader 这个程序是啥?有啥用?

有啥办法可以限制本地主机的下载速度?

如何让套接字仅接受来自本地主机的连接(在 Java 中)?

读卡器程序在本地系统工作,但不能从 IIS 服务器

怎么让一个非窗口组件可以接受来自Windows的消息