2017-08-24 1 views
0

Je suis en train d'intégrer le paiement par PayPal dans Laravel 5.4 et j'ai le problème suivant: J'ai copié ce code de leur documentation:Laravel intégration serveur paypal

<div id="paypal-button"></div> 

    <script> 
     var CREATE_PAYMENT_URL = '{{ route('pay') }}'; 
     var EXECUTE_PAYMENT_URL = '{{ route('execute-payment') }}'; 

     paypal.Button.render({ 

      env: 'sandbox', // Or 'sandbox' 

      commit: true, // Show a 'Pay Now' button 

      payment: function() { 
       return paypal.request.post(CREATE_PAYMENT_URL).then(function(data) { 
         return data.id; 
       }); 
      }, 

      onAuthorize: function(data) { 
       return paypal.request.post(EXECUTE_PAYMENT_URL, { 
         paymentID: data.paymentID, 
         payerID: data.payerID 
       }).then(function() { 

       // The payment is complete! 
       // You can now show a confirmation message to the customer 
       }); 
      } 

     }, '#paypal-button'); 
    </script> 

Mais quand je presse le paypal bouton il me donne une erreur interne du serveur dans la console. Je suppose que c'est parce que le jeton csrf est manquant. Si c'est le cas, comment puis-je ajouter le jeton au reqeust?

Répondre

0

Si votre erreur est la cause d'un TokenMismatchException vous devez l'ajouter à la demande comme ceci:

payment: function() { 
    return paypal.request.post(CREATE_PAYMENT_URL, { 
     _token: {{csrf_token()}} 
    }).then(function(data) { 
     return data.id; 
    }); 
}, 
onAuthorize: function(data) { 
    return paypal.request.post(EXECUTE_PAYMENT_URL, { 
     paymentID: data.paymentID, 
     payerID: data.payerID, 
     _token: {{csrf_token()}} 
    }).then(function() { 
     // The payment is complete! 
     // You can now show a confirmation message to the customer 
    }); 
} 

espoir que cela vous aide.

+0

Cette fonction est appelée lorsque le paiement est terminé que je dois passer le jeton dans la fonction de paiement – TheAngelM97

+0

@ TheAngelM97 J'ai mis à jour ma réponse – Asur

0

Laravel sort de la boîte avec un csrf-tokenmeta tag. Ainsi, au lieu d'appeler paypal.request.post directement, vous pouvez le faire:

<div id="paypal-button"></div> 

<script> 
    var CREATE_PAYMENT_URL = '{{ route('pay') }}'; 
    var EXECUTE_PAYMENT_URL = '{{ route('execute-payment') }}'; 
    var laravelCsrfToken = document.head.querySelector('meta[name="csrf-token"]') 

    paypal.Button.render({ 

    env: 'sandbox', // Or 'sandbox' 

    commit: true, // Show a 'Pay Now' button 

    payment: function() { 
     return paypal.request({ 
     method: 'post', 
     url: CREATE_PAYMENT_URL, 
     headers: { 
      'x-csrf-token': laravelCsrfToken 
     } 
     }).then(function(data) { 
     return data.id; 
     }); 
    }, 

    onAuthorize: function(data) { 
     return paypal.request({ 
     method: 'post', 
     url: EXECUTE_PAYMENT_URL, 
     data: { 
      paymentID: data.paymentID, 
      payerID: data.payerID 
     }, 
     headers: { 
      'x-csrf-token': laravelCsrfToken 
     } 
     }).then(function() { 
     // The payment is complete! 
     // You can now show a confirmation message to the customer 
     }); 
    } 
    }, '#paypal-button'); 
</script> 
+0

I essayé, mais je reçois à nouveau cette erreur checkout.js: 20324 POST http: // localhost: 8000/pay 500 (Erreur interne du serveur) – TheAngelM97

+0

Accédez à l'onglet 'réseau' dans Google Chrome Dev Tools et voir ce qui se passe. Ou allez à Laravel logs pour obtenir l'erreur. –

+0

il jette l'erreur de jeton csrf non valide – TheAngelM97