我似乎对Stripe.js有问题,我正在使用Laravel作为出纳的框架。
我使用stripe.js,这样我就不会通过服务器传递和信用卡数据,也不会存储任何数据。到目前为止,浏览器似乎出现了问题。让我进一步解释一下,Chrome可以工作,Firefox和Internet Explorer不可以。
在Chrome上:当前提交字段时,表单的行为与预期一致。当您按下提交按钮时,它将显示卡片错误。例如,卡号、过期月份等(它会验证它)。
在Firefox和IE上:该表格不会进行验证,而是说:
A network error has occurred, and you have not been charged. Please try again.
并且会自动提交表格,而不会告知卡号是否被接受等。此外,当你提交表格时,它会直接进入Laravel错误页面,上面写着:
Missing required param: card
我认为这意味着stripe.js没有被完全使用,也许表单没有注意到自定义js。
Stripe.js
$(document).ready(function() {
Stripe.setPublishableKey('pk_test_HdoLAxfuWl53vjchF01fMphS');
$('#subscription-form button').on('click', function() {
var form = $('#subscription-form');
var submit = form.find('button');
var submitInitialText = submit.text();
submit.attr('disabled', 'disabled').text('Just one moment...');
Stripe.card.createToken(form, function(status, response) {
var token;
if(response.error) {
form.find('.stripe-errors').text(response.error.message).show();
submit.removeAttr('disabled');
submit.text(submitInitialText);
return false;
} else {
token = response.id;
form.append($('<input type="hidden" name="token">').val(token));
form.submit();
}
});
});
});
你可以在上试用该应用程序http://account.mcjoin.us最好告诉我可能的问题。永远,谢谢你的帮助!
我的问题的解决方案非常明显;Internet Explorer和Firefox没有贬值e.preventDefault();
这可能令人困惑,但让我解释一下。在Chrome上,e.preventDefault()是不必要的,它所做的是阻止默认的表单函数。在Internet Explorer或Firefox上,如果不存在,Javascript将无法"劫持"表单并执行它需要执行的操作。因此,添加e.preventDefault()将使表单没有默认交互。
现在让我们进一步研究代码,这里是stripe.js:
$(document).ready(function() {
Stripe.setPublishableKey('pk_live_DdMQOXgak0v4yS0yH7vnsHqu');
$('#subscription-form button').on('click', function(e) {
var form = $('#subscription-form');
var submit = form.find('button');
var submitInitialText = submit.text();
submit.attr('disabled', 'disabled').text('Just one moment...');
e.preventDefault();
Stripe.card.createToken(form, function(status, response) {
var token;
if(response.error) {
form.find('.stripe-errors').text(response.error.message).show();
submit.removeAttr('disabled');
submit.text(submitInitialText);
} else {
token = response.id;
form.append($('<input type="hidden" name="token">').val(token));
form.submit();
}
});
});
});
就是这样!就这么简单!
我看了一下您的页面,但它需要身份验证。我怀疑你得到这个结果是因为有一个只发生在Firefox和IE上的JavaScript错误,阻止了Stripe.js代码的工作。我会查看错误控制台。删除页面上可能存在的所有其他JavaScript并重新测试也将证实这一理论。
我还会更新你的服务器端代码,这样在没有代币的情况下就不会进行收费尝试。
干杯,拉里
PS我在Stripe从事支持工作。