PHP

PayPal Express Checkout

Résolu

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 🦁

812 vues
14 novembre 2019 à 2:55 (Édité)
Cette pub permet au site de vivre ...

9 commentaires

Re:


Je viens de trouver cet article et cet article traitant le sujet 😉

Est-ce que cela répond à ton besoin ? 🤔

Re:


Ah d'accord...

Ca aurait été plus simple que Boris mette à jour son tutoriel pfff... 🙄😒

Il prend 150 ans pour mettre à jour quelque chose... 😒

Si je trouve quelque chose d'autres je te ferais signe 😉

@Jerem971,

Oui mais lui il a une console pour intégrer les fichiers de paypal or moi c'est un hebergement et non un dédié, donc je n'ai pas pu faire son tutoriel mais je l'avais déjà vue


@Clouder, Ok ça marche

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