【发布时间】:2018-03-28 01:32:21
【问题描述】:
我在我的 Laravel 项目中使用 paypal API,当用户点击提交时,我想创建并执行 paypal 付款。问题是paypal是用javascript处理的,方法如下: my-page.blade.php:
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script type="text/javascript">
(function ($) {
$('#submit').click(function(event) {
event.preventDefault()
$('#payments').fadeIn('slow')
var CREATE_PAYMENT_URL = '{{ route('change-company-activity-subject-paypal-create') }}'
var EXECUTE_PAYMENT_URL = '{{ route('change-company-activity-subject-paypal-execute') }}'
paypal.Button.render({
env: 'sandbox', // Or 'sandbox'
commit: true, // Show a 'Pay Now' button
payment: function() {
return paypal.request.post(CREATE_PAYMENT_URL, {_token: '{{ csrf_token() }}'}).then(function(data) {
// console.log(data)
return data.id
});
},
// onAuthorize() is called when the buyer approves the payment
onAuthorize: function(data, actions) {
console.log(data)
// Set up the data you need to pass to your server
var data = {
paymentID: data.paymentID,
payerID: data.payerID,
_token: '{{ csrf_token() }}'
};
// Make a call to your server to execute the payment
return paypal.request.post(EXECUTE_PAYMENT_URL, data)
.then(function (res) {
res = JSON.parse(res)
console.log(res)
window.alert('Payment Complete!');
});
}
}, '#paypal-button');
console.log('paypal')
})
})(jQuery)
</script>
在这种情况下,当支付完成时会调用window.alert() 函数。我想过做$('#form').submit(),所以在付款完成后提交表格。我的表单具有后端验证规则,如果您的输入未通过某个验证规则,它会重定向您。这样做的问题是用户的钱可以被拿走而表单没有提交。我怎样才能避免这个问题?使用Javascript显示登录表单并执行支付时,如何仅在验证通过时显示Paypal登录表单并执行支付?
【问题讨论】:
-
Paypal 是否没有自动响应 URL,以防用户付款但关闭浏览器?该 url 将在稍后的时间点由 Paypal 调用,并显示已付款订单的状态。 Paypal 会将发布数据发送到此 url。即使您付款并点击离开页面而不提交表单。
-
多步骤怎么样?在第一步中,您处理后端管理的所有内容,当一切正常时,您让用户选择付款方式或确认付款并提交到贝宝。如果您不想在确认付款之前将数据存储在数据库中(有时由于法律要求是必要的),您可以将数据保存在会话中,然后根据付款请求的结果进行提交。如果付款失败,您可能需要清除会话,如果它通过了,您会保留会话中的(先前验证的)数据。
标签: javascript php forms laravel paypal