Ce site utilise des cookies pour améliorer uniquement votre expérience utilisateur.
Vous pouvez lire à tout moment comment nous utilisons les cookies sur le site.
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 🦁
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 😉
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
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