Javascript Braintree付款赢得';不能使用AJAX提交
我有一个动态AJAX提交。我正在尝试使用AJAX将Braintree(PayPal)支付数据提交到payment.php。不幸的是,Braintree给了我一个暂时的错误。Braintree在提交时使用代码(nonce)创建输入,但我的提交是在创建代码之前提交的 Braintree给了我一个创建代码的脚本Javascript Braintree付款赢得';不能使用AJAX提交,javascript,php,jquery,ajax,braintree,Javascript,Php,Jquery,Ajax,Braintree,我有一个动态AJAX提交。我正在尝试使用AJAX将Braintree(PayPal)支付数据提交到payment.php。不幸的是,Braintree给了我一个暂时的错误。Braintree在提交时使用代码(nonce)创建输入,但我的提交是在创建代码之前提交的 Braintree给了我一个创建代码的脚本 <script src="https://js.braintreegateway.com/v2/braintree.js"></script> submit(this
<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
submit(this)调用ajax。我试图推迟提交,但没有任何效果。例如如果我在提交过程中调用alert(),则会添加代码,提交工作正常;除了现在我有一个警报。问题是两个代码同时运行,而Braintree代码反应太慢。我还试图重新定位JS代码上方和下方的链接,但运气不佳。如前所述,我认为您应该使用从BrainTree的GlobalSetup收到的onPaymentMethodReceived
回调。您可以在如下设置中配置此回调,而不是使用jQuery自己处理表单提交
braintree.setup("CLIENT-TOKEN-FROM-SERVER", "dropin", {
container: "dropin-container",
onPaymentMethodReceived: function (paymentMethod) {
// Do some logic in here.
// When you're ready to submit the form:
myForm.submit();
}
});
当Drop-in(作为表单提交的结果)生成了一个paymentmethod\u nonce
时,调用onPaymentMethodReceived
。将使用paymentMethod
对象调用它,该对象将nonce作为字符串包含
您可以找到有关传递给onPaymentMethodReceived
回调的paymentMethod
对象的更多详细信息,它有一个名为nonce
的属性
希望这能有所帮助:)我的解决方案是防止AJAX在收到之前提交。希望这有帮助
braintree.setup('TOKEN-HERE', "dropin", {
container: "payment-form",
onPaymentMethodReceived: (obj) ->
$('form#checkout input#payment_method_nonce').val(obj['nonce'])
frm = $('form#checkout')
$.ajax
type: frm.attr('method')
url: frm.attr('action')
data: frm.serialize()
})
$(document).on 'ajax:before', 'form#checkout', ->
return false unless $('form#checkout input#payment_method_nonce').val()
我也想这么做,我就是这么做的
- 首先创建dropin并处理所有创建错误,直到第8行
- 然后防止默认提交事件立即获取付款方法
- 最后使用此方法>>requestPaymentMethod()您好,请不要使用JS提交支付网关,它将很容易被破解,而不是使用PHP Braintree库。如何在不重新加载页面的情况下获得验证错误?还是必须重新加载,没办法绕过它?@Mitul。。但是PHP是服务器端脚本,在我们的浏览器中不起作用。如果我们在提交表单之前要做一些处理,那么JS是唯一的方式:)你可以在自己的服务器上调用ajax,然后在客户端调用braintree支付方法b。关键是可以看到我在理解你的方法时遇到了一些困难。Ajax是用JS完成的,对吗?如果你看一下流程,我们的JS客户端将从我们的服务器获得一个令牌,该令牌将用于BrainTree服务器的身份验证,从BrainTree服务器获得一个nonce,将该nonce发送到我们的服务器,然后服务器将再次使用BrainTree服务器验证该令牌。谢谢,但我尝试了这一点。OnPaymentMethodReceived仅在提交时收到。因此,您可以阻止任何其他提交。提交->创建临时->不再提交A这就是我们想要做的,对吗<代码>onPaymentMethodReceived将在表单提交时调用。生成nonce后,您可以使用传递到此回调的对象获取对该对象的引用,然后您将手动触发表单提交,如上面的示例代码所示。您是否只需发送nonce即可获取所有错误?nonce是否也包含错误信息?也许这就是我所误解的,我建议你去了解它是如何工作的。您没有从JS文件向BrainTree服务器发送nonce,而是向BrainTree服务器发送令牌以验证支付方法,如果它是有效的方法,BrainTree服务器将以
响应。然后,您将该nonce和其他付款详细信息发送到您自己的PHP/Java服务器,该服务器将创建一个新的交易,并将其发送到BrainTree服务器,该服务器将处理付款。非常感谢。现在我明白了。我认为整个表单需要提交才能得到错误,但实际上我只需要生成nonce。非常感谢。nonce
braintree.setup('TOKEN-HERE', "dropin", { container: "payment-form", onPaymentMethodReceived: (obj) -> $('form#checkout input#payment_method_nonce').val(obj['nonce']) frm = $('form#checkout') $.ajax type: frm.attr('method') url: frm.attr('action') data: frm.serialize() }) $(document).on 'ajax:before', 'form#checkout', -> return false unless $('form#checkout input#payment_method_nonce').val()