2017-10-16 5 views
0

J'utilise l'API paypal dans mon projet Laravel et lorsque l'utilisateur clique sur soumettre, je veux créer et exécuter un paiement paypal. Le problème est que paypal sont traités avec javascript de la façon suivante: my-page.blade.php:Laravel paypal formulaire soumettre la validation

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

Lorsque le paiement est terminé la fonction window.alert() est appelée dans ce cas. J'ai pensé faire $('#form').submit() afin que le formulaire soit soumis après que le paiement soit exécuté. Mon formulaire a des règles de validation dorsale et il vous redirige si vos entrées ne réussissent pas une certaine règle de validation. Le problème avec cela est que l'argent de l'utilisateur peut être pris et le formulaire non soumis. Comment puis-je éviter ce problème? Comment afficher le formulaire de connexion Paypal et exécuter le paiement uniquement lorsque les validations sont passées lorsque Javascript est utilisé pour afficher le formulaire de connexion et exécuter le paiement?

+0

Est-ce que Paypal pas une URL de réponse automatique au cas où l'utilisateur paie mais ferme le navigateur? L'URL sera appelée par Paypal à un moment ultérieur avec le statut de l'ordre payé. Paypal enverra les données de poste à cette URL. Même si vous payez et cliquez sur la page et ne pas soumettre le formulaire. –

+0

Que diriez-vous d'avoir plusieurs étapes? Dans la première étape (s) vous traitez toutes les choses gérées dans votre backend et quand tout est en ordre, vous laissez l'utilisateur choisir un mode de paiement ou confirmer le paiement et soumettre à paypal. Si vous ne souhaitez pas stocker les données dans la base de données avant que le paiement ne soit confirmé, ce qui est parfois nécessaire en raison des exigences légales, vous pouvez enregistrer les données dans la session, puis effectuer votre soumission en fonction du résultat de la demande de paiement. Si le paiement échoue, vous pouvez effacer la session, si elle persiste, les données (validées précédemment) de la session sont conservées. – dbrumann

Répondre

0

Paypal a deux autres paramètres que vous pouvez utiliser:

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