PayPal Express Checkout

Par geniso le 14 Novembre 2019 à 02:55 (Édité) 5 60

Bonjour, je fais ce topic car j'aimerai de l'aide. En effet j'essaye d'intégrer Paypal express checkout à mon site, mais je n'y arrive pas, quand je clique sur le bouton de payement paypal il y a une alert qui s'affiche avec ecrit : Paiement annulé : une erreur est survenue. Merci de bien vouloir réessayer ultérieurement.

Vous pouvez tester mon systeme à cette adresse : https://h2mdev.fr/test/ppl/test



j'ai intégrer ce tuto mais qui ne marche pas pour moi: https://www.primfx.com/integrer-paypal-express-checkout-son-site-php-496/tests-systeme-et-passage-live/

Dans la console au moment d'appuyer sur payer je vois ce message : ppxo_unhandled_error 


Voilà merci 🦁

Cette pub permet au site de vivre ...

5 commentaires

Tu veux participer ?
Alors connecte toi ou inscris toi et viens participer !

@geniso,


Je ne pourrais pas d'aider plus car il faut que je teste le code de mon côté afin d'avoir les résultats des erreurs niveau PHP ou JavaScript.

Donc je reviendrai vers toi dès lors que j'aurai plus d'information

Okey, j'ai modifié mon code avec les erreurs fixées, donc ça donne ça:


<?php
session_start();
require_once "../class/config.php";
require_once "../class/PayPalPayment.php";


$success = 0;
$msg = "Une erreur est survenue, merci de bien vouloir réessayer ultérieurement...(2)";
$paypal_response = [];


if (!empty($_GET['paymentID']) AND !empty($_GET['payerID'])) {
	 $dump_post = print_r($_POST,true); 
   $dump_tobdd = $bdd->prepare('INSERT INTO assyncdebug (paypal_dump) VALUE (:paypal_dump)');
   $dump_tobdd->execute(array("paypal_dump" =>$dump_post));
   
   
   $paymentID = htmlspecialchars($_POST['paymentID']);
   $payerID = htmlspecialchars($_POST['payerID']);


   $payer = new PayPalPayment();
   $payer->setSandboxMode(1);
   $payer->setClientID("...");
   $payer->setSecret("...");


   $payment = $bdd->prepare('SELECT * FROM paiements WHERE payment_id = ?');
   $payment->execute(array($paymentID));
   $payment = $payment->fetch();


   if ($payment) {
	     $dump_post = print_r($paypal_response,true); 
   $dump_tobdd = $bdd->prepare('INSERT INTO assyncdebug (paypal_dump) VALUE (:paypal_dump)');
  $dump_tobdd->execute(array("paypal_dump" =>$dump_post));
  
  
      $paypal_response = $payer->executePayment($paymentID, $payerID);
      $paypal_response = json_decode($paypal_response);


      $update_payment = $bdd->prepare('UPDATE paiements SET payment_status = ?, payer_email = ? WHERE payment_id = ?');
      $update_payment->execute(array($paypal_response->state, $paypal_response->payer->payer_info->email, $paymentID));


      if ($paypal_response->state == "approved") {
         $success = 1;
         $msg = "";
      } else {
         $msg = "Une erreur est survenue durant l'approbation de votre paiement. Merci de réessayer ultérieurement ou contacter un administrateur du site.";
      }
   } else {
      $msg = "Votre paiement n'a pas été trouvé dans notre base de données. Merci de réessayer ultérieurement ou contacter un administrateur du site. (Votre compte PayPal n'a pas été débité)";
   }
}else{
	
	$dump_post = "Aucune donnée ".date("H:i"); 
   $dump_tobdd = $bdd->prepare('INSERT INTO assyncdebug (paypal_dump) VALUE (:paypal_dump)');
   $dump_tobdd->execute(array("paypal_dump" =>$dump_post));
	
}
echo json_encode(["success" => $success, "msg" => $msg, "paypal_response" => $paypal_response]);


Maintenant dans la base assyncedebug il y a ecris qu'il n'y a aucune donnée pourtant les données sont bien envoyés je pense, donc aucun POST voilà pourquoi le systeme ne marche pas mais je ne sais pas pourquoi les données ne s'envoie pas, dans paiements les CREATE s'inserent

@geniso,


Alors j'ai trouvé quelques petites erreurs que tu as fait :


$insert = $bdd->prepare("INSERT INTO paiements (payment_id, payment_status, payment_amount, payment_currency, payment_date) VALUES(?, ?, ?, ?, NOW())");
		
$insert_ok = $insert->execute(array($paypal_response->id, $paypal_response->state, $paypal_response->transactions[0]->amount->total, $paypal_response->transactions[0]->amount->currency));


Il y avait une virgule de trop dans ton execute.


$dump_tobdd = $bdd->prepare('INSERT INTO assyncdebug (paypal_dump) VALUE (:paypal_dump)');
$dump_tobdd->execute(array("paypal_dump" => $dump_post));


Tu as oublié un espace entre INTO et assyncdebug



Je ne sais pas si ça va résoudre ton problème mais au moins tes tables seront correctement remplies

Salut @Clouder,

Oui j'ai regardé mais bon j'ai toujours le même problème apres avoir essayé tous ce qui est dis, je te montre mon code:


paypal_create:


<?php
session_start();
require_once "../class/config.php";
require_once "../class/PayPalPayment.php";


$success = 0;
$msg = "Une erreur est survenue, merci de bien vouloir réessayer ultérieurement... (1)";
$paypal_response = [];


$payer = new PayPalPayment();
$payer->setSandboxMode(1);
   $payer->setClientID("MonClientID");
   $payer->setSecret("MonSecretID");


$payment_data = [
   "intent" => "sale",
   "redirect_urls" => [
      "return_url" => "http://localhost/",
      "cancel_url" => "http://localhost/"
   ],
   "payer" => [
      "payment_method" => "paypal"
   ],
   "transactions" => [
      [
         "amount" => [
            "total" => "9.99",
            "currency" => "EUR"
         ],
         "item_list" => [
            "items" => [
               [
                  "sku" => "1PK5Z9",
                  "quantity" => "1",
                  "name" => "Un produit quelconque",
                  "price" => "9.99",
                  "currency" => "EUR"
               ]
            ]
         ],
         "description" => "Description du paiement..."
      ]
   ]
];


$paypal_response = $payer->createPayment($payment_data);
$paypal_response = json_decode($paypal_response);


if (!empty($paypal_response->id)) {
$insert = $bdd->prepare("INSERT INTO paiements (payment_id, payment_status, payment_amount, payment_currency, payment_date) VALUES(:payment_id, :payment_status, :payment_amount, :payment_currency, NOW())");
   $insert_ok = $insert->execute(array(
         "payment_id" => $paypal_response->id,
         "payment_status" => $paypal_response->state,
         "payment_amount" => $paypal_response->transactions[0]->amount->total,
         "payment_currency" => $paypal_response->transactions[0]->amount->currency,
      ));


   if ($insert_ok) {
      $success = 1;
      $msg = "";
   }
} else {
   $msg = "Une erreur est survenue durant la communication avec les serveurs de PayPal. Merci de bien vouloir réessayer ultérieurement.";
}


echo json_encode(["success" => $success, "msg" => $msg, "paypal_response" => $paypal_response]);


Maintenant mon paypal execute:


<?php
session_start();
require_once "../class/config.php";
require_once "../class/PayPalPayment.php";


$success = 0;
$msg = "Une erreur est survenue, merci de bien vouloir réessayer ultérieurement...(2)";
$paypal_response = [];


if (!empty($_GET['paymentID']) AND !empty($_GET['payerID'])) {
	 $dump_post = print_r($_POST,true); 
   $dump_tobdd = $bdd->prepare('INSERT INTO assyncdebug (paypal_dump) VALUE (:paypal_dump)');
   $dump_tobdd->execute(array("paypal_dump" =>$dump_post));
   
   
   $paymentID = htmlspecialchars($_POST['paymentID']);
   $payerID = htmlspecialchars($_POST['payerID']);


   $payer = new PayPalPayment();
   $payer->setSandboxMode(1);
   $payer->setClientID("...");
   $payer->setSecret("...");


   $payment = $bdd->prepare('SELECT * FROM paiements WHERE payment_id = ?');
   $payment->execute(array($paymentID));
   $payment = $payment->fetch();


   if ($payment) {
	     $dump_post = print_r($paypal_response,true); 
   $dump_tobdd = $bdd->prepare('INSERT INTOassyncdebug (paypal_dump) VALUE (:paypal_dump)');
  $dump_tobdd->execute(array("paypal_dump" =>$dump_post));
  
  
      $paypal_response = $payer->executePayment($paymentID, $payerID);
      $paypal_response = json_decode($paypal_response);


      $update_payment = $bdd->prepare('UPDATE paiements SET payment_status = ?, payer_email = ? WHERE payment_id = ?');
      $update_payment->execute(array($paypal_response->state, $paypal_response->payer->payer_info->email, $paymentID));


      if ($paypal_response->state == "approved") {
         $success = 1;
         $msg = "";
      } else {
         $msg = "Une erreur est survenue durant l'approbation de votre paiement. Merci de réessayer ultérieurement ou contacter un administrateur du site.";
      }
   } else {
      $msg = "Votre paiement n'a pas été trouvé dans notre base de données. Merci de réessayer ultérieurement ou contacter un administrateur du site. (Votre compte PayPal n'a pas été débité)";
   }
}else{
	
	$dump_post = "Aucune donnée"; 
   $dump_tobdd = $bdd->prepare('INSERT INTO assyncdebug (paypal_dump) VALUE (:paypal_dump)');
   $dump_tobdd->execute(array("paypal_dump" =>$dump_post));
	
}
echo json_encode(["success" => $success, "msg" => $msg, "paypal_response" => $paypal_response]);


Quand je vais sur la page du create directement , il y a un message de succès, tu peux tester toi même ici:

https://h2mdev.fr/test/ppl/php/paypal_create_payment

Mais pour paypal_execute_paymentil y a une erreur

Salut @geniso,



As-tu regardé les autres topics sur le site de PrimFX ?


Notamment celui-la ?

Cette pub permet au site de vivre ...