2017-10-16 1 views
0

Ich benutze die paypal API in meinem Laravel Projekt und wenn der Benutzer auf submit klickt, möchte ich eine Paypal Zahlung erstellen und ausführen. Das Problem ist, dass paypal mit JavaScript, um die folgende Art und Weise verarbeitet werden: my-page.blade.php:Laravel paypal Formular Übermittlungsbestätigung

<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> 

Wenn die Zahlung der window.alert() Funktion abgeschlossen ist, wird in diesem Fall genannt. Ich habe daran gedacht, $('#form').submit() zu tun, damit das Formular nach der Ausführung der Zahlung übermittelt wird. Mein Formular enthält Back-End-Validierungsregeln und leitet Sie um, wenn Ihre Eingaben eine bestimmte Validierungsregel nicht bestehen. Das Problem dabei ist, dass das Geld des Benutzers entnommen und das Formular nicht übermittelt werden kann. Wie kann ich dieses Problem vermeiden? Wie zeige ich das Paypal-Login-Formular an und führe die Zahlung nur durch, wenn die Validierungen bestanden haben, wenn JavaScript verwendet wird, um das Login-Formular anzuzeigen und die Zahlung auszuführen?

+0

Hat Paypal nicht eine automatische Antwort-URL haben, falls der Benutzer zahlt aber den Browser schließt? Die URL wird von Paypal zu einem späteren Zeitpunkt mit dem Status der bezahlten Bestellung aufgerufen. Paypal wird Postdaten an diese URL senden. Auch wenn Sie die Seite bezahlen und wegklicken und das Formular nicht absenden. –

+0

Wie wäre es mit mehreren Schritten? In dem/den ersten Schritt (en) verarbeiten Sie alle in Ihrem Backend verwalteten Sachen und wenn alles in Ordnung ist, lassen Sie den Benutzer eine Zahlungsmethode auswählen oder die Zahlung bestätigen und an paypal senden. Wenn Sie die Daten nicht in der Datenbank speichern möchten, bevor die Zahlung bestätigt wurde, was aufgrund gesetzlicher Anforderungen manchmal erforderlich ist, können Sie die Daten in der Sitzung speichern und dann Ihre Übermittlung basierend auf dem Ergebnis der Zahlungsanforderung durchführen. Wenn die Zahlung fehlschlägt, möchten Sie möglicherweise die Sitzung löschen. Wenn sie ausgeführt wurde, behalten Sie die (zuvor validierten) Daten aus der Sitzung bei. – dbrumann

Antwort

0

Paypal hat zwei weitere Parameter können Sie verwenden:

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