有没有办法接受信用卡刷卡与非本地Web应用程序的读卡器?

时间:2016-12-14 22:00:45

标签: web-applications stripe-payments credit-card payment-processing stripe-connect

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

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

最终用户需要亲自接受客户的付款,我正试图通过刷客户的卡来找到解决方案。然而,我找到的所有技术解决方案(像Cardflight等)都专门针对本机应用程序(iOS或Android)。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

            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);