2017-10-16 55 views
0

我在我的Laravel項目中使用paypal API,當用戶單擊提交時,我想創建並執行一項PayPal付款。問題是,貝寶是用JavaScript以下方式處理: 我-page.blade.php:Laravel paypal表單提交驗證

<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登錄表單並執行付款?

+0

貝寶沒有的情況下,用戶支付,但關閉瀏覽器的自動響應的網址?該網址將在稍後的時間點通過PayPal與付款訂單的狀態進行通話。貝寶將發送數據到這個網址。即使您付費並點擊了該頁面並且未提交表單。 –

+0

如何進行多個步驟?在第一步中,您將處理所有在後臺管理的內容,當所有內容都準備就緒時,您可以讓用戶選擇付款方式或確認付款並提交給PayPal。如果您不希望在確認付款之前將數據存儲在數據庫中(由於法律要求有時這是必要的),您可以將數據保存在會話中,然後根據付款請求的結果進行提交。如果付款失敗,您可能需要清除該會話,如果它通過,則保留會話中的(先前驗證過的)數據。 – dbrumann

回答

0

寶有兩個以上參數可以使用:

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