【问题标题】:Laravel paypal form submit validationLaravel paypal 表单提交验证
【发布时间】: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


【解决方案1】:

Paypal 还有两个可以使用的参数:

paypal.Button.render({
  payment: function() {},
  onAuthorize: function(data) {},
  onError: function(err) {
    // error handling
  },
  onCancel: function(data, actions) {
    // cancel handling
  },
});

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多