Если это правда, я столкнулся с той же проблемой (как показано в моем комментарии ранее в этом году). Я понял, как это сделать, но не без недостатков (безопасность, 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);
person
dave4jr
schedule
20.07.2017