web-dev-qa-db-fra.com

Définition de l'URL de retour Paypal et retour automatique?

Ceci est une question de suivi pour: PHP: Un moyen facile de démarrer Paypal?

Donc, mon problème est que je spécifie l'URL de retour. Cependant, après avoir payé avec Paypal, je me retrouve sur un écran qui dit:

Vous venez de compléter votre paiement. XXXX, vous venez de compléter votre paiement. Votre identifiant de transaction pour ce paiement est: XXXXXXXXXXXXX.

Nous enverrons un email de confirmation à [email protected]. Cette transaction apparaîtra sur votre relevé en tant que Paypal.

Go to Paypal account overview

J'en ai besoin pour ne pas afficher cet écran et aller directement à l'URL de retour. J'ai:

  • Définir la variable "return"
  • Définissez la variable "rm" sur: 2 (selon le guide = "), le navigateur de l'acheteur est redirigé vers l'URL de renvoi à l'aide de la méthode POST, ainsi que de tous les paiements. les variables sont incluses ")

En fait, voici toute ma forme:

<form method="post" action="https://www.sandbox.Paypal.com/cgi-bin/webscr">
  <input type="hidden" value="_xclick" name="cmd">
  <input type="hidden" value="[email protected]" name="business">
  <!-- <input type="hidden" name="undefined_quantity" value="1" /> -->
  <input type="hidden" value="Order at The Greek Merchant:&lt;Br /&gt;Goldfish Flock BLG&lt;br /&gt;" name="item_name">
  <input type="hidden" value="NA" name="item_number">
  <input type="hidden" value="22.16" name="amount">
  <input type="hidden" value="5.17" name="shipping">
  <input type="hidden" value="0" name="discount_amount">        
  <input type="hidden" value="0" name="no_shipping">
  <input type="hidden" value="No comments" name="cn">
  <input type="hidden" value="USD" name="currency_code">
  <input type="hidden" value="http://XXX/XXX/XXX/Paypal/return" name="return">
  <input type="hidden" value="2" name="rm">      
  <input type="hidden" value="11255XXX" name="invoice">
  <input type="hidden" value="US" name="lc">
  <input type="hidden" value="PP-BuyNowBF" name="bn">
  <input type="submit" value="Place Order!" name="finalizeOrder" id="finalizeOrder" class="submitButton">
</form>

Une idée de comment je peux le faire revenir automatiquement? Sinon, comment puis-je obtenir le résultat du paiement sur mon site Web afin de pouvoir mettre à jour la base de données? Qu'est-ce que IPN?

124
coderama

Vous devez activer le retour automatique dans votre compte Paypal, sinon le champ return sera ignoré.

De la documentation (mise à jour pour refléter la nouvelle mise en page, janvier 2019):

Le retour automatique est désactivé par défaut. Pour activer le retour automatique:

  1. Connectez-vous à votre compte Paypal à l’adresse suivante: https://www.Paypal.com ou https://www.sandbox.Paypal.com La page "Aperçu de mon compte" apparaît.
  2. Cliquez sur l'icône d'engrenage en haut à droite. La page Résumé du profil apparaît.
  3. Cliquez sur le lien Mes préférences de vente dans la colonne de gauche.
  4. Sous la section Vente en ligne, cliquez sur le lien Mettre à jour dans la ligne des préférences du site Web. La page Préférences de paiement sur le site Web apparaît.
  5. Sous Retour automatique pour les paiements sur site Web, cliquez sur le bouton radio Activé pour activer le retour automatique.
  6. Dans le champ URL de retour, entrez l'URL vers laquelle vous souhaitez que vos payeurs soient redirigés après avoir effectué leurs paiements. REMARQUE: Paypal vérifie l'URL de retour que vous avez entrée. Si l'URL n'est pas correctement formatée ou ne peut pas être validée, Paypal n'active pas le renvoi automatique.
  7. Faites défiler la page jusqu'en bas et cliquez sur le bouton Enregistrer.

IPN est pour la notification de paiement instantanée. Cela vous donnera des informations plus fiables/utiles que ce que vous obtiendrez du renvoi automatique.

La documentation pour IPN est ici: https://www.x.com/sites/default/files/ipnguide.pdf

Documentation en ligne pour IPN: https://developer.Paypal.com/docs/classic/ipn/gs_IPN/

La procédure générale consiste à passer un paramètre notify_url à la demande et à configurer une page qui traite et valide les notifications IPN. Paypal enverra des demandes à cette page pour vous informer du paiement/remboursement/etc. traverser. Cette page de gestionnaire IPN serait alors le bon endroit pour mettre à jour la base de données afin de marquer les commandes comme ayant été payées.

189
Kevin Stricker

Exemple de formulaire utilisant PHP pour les paiements directs.

<form action="https://www.Paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="upload" value="1">
    <input type="hidden" name="business" value="[email protected]">

    <input type="hidden" name="item_name_' . $x . '" value="' . $product_name . '">
    <input type="hidden" name="amount_' . $x . '" value="' . $price . '">
    <input type="hidden" name="quantity_' . $x . '" value="' . $each_item['quantity'] . '"> 
    <input type="hidden" name="custom" value="' . $product_id_array . '">
    <input type="hidden" name="notify_url" value="https://www.yoursite.com/my_ipn.php">
    <input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php">
    <input type="hidden" name="rm" value="2">
    <input type="hidden" name="cbt" value="Return to The Store">
    <input type="hidden" name="cancel_return" value="https://www.yoursite.com/Paypal_cancel.php">
    <input type="hidden" name="lc" value="US">
    <input type="hidden" name="currency_code" value="USD">
    <input type="image" src="http://www.Paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" alt="Make payments with Paypal - its fast, free and secure!">
</form>

merci de parcourir les champs notify_url, return, cancel_return

exemple de code pour le traitement de ipn (my_ipn.php) demandé par Paypal après le paiement.

Pour plus d'informations sur la création d'un IPN, veuillez vous reporter au lien this .

<?php
// Check to see there are posted variables coming into the script
if ($_SERVER['REQUEST_METHOD'] != "POST")
    die("No Post Variables");
// Initialize the $req variable and add CMD key value pair
$req = 'cmd=_notify-validate';
// Read the post from Paypal
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
}
// Now Post all of that back to Paypal's server using curl, and validate everything with Paypal
// We will use CURL instead of PHP for this for a more universally operable script (fsockopen has issues on some environments)
//$url = "https://www.sandbox.Paypal.com/cgi-bin/webscr";
$url = "https://www.Paypal.com/cgi-bin/webscr";
$curl_result = $curl_err = '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($req)));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$curl_result = @curl_exec($ch);
$curl_err = curl_error($ch);
curl_close($ch);

$req = str_replace("&", "\n", $req);  // Make it a Nice list in case we want to email it to ourselves for reporting
// Check that the result verifies
if (strpos($curl_result, "VERIFIED") !== false) {
    $req .= "\n\nPaypal Verified OK";
} else {
    $req .= "\n\nData NOT verified from Paypal!";
    mail("[email protected]", "IPN interaction not verified", "$req", "From: [email protected]");
    exit();
}

/* CHECK THESE 4 THINGS BEFORE PROCESSING THE TRANSACTION, HANDLE THEM AS YOU WISH
  1. Make sure that business email returned is your business email
  2. Make sure that the transaction�s payment status is �completed�
  3. Make sure there are no duplicate txn_id
  4. Make sure the payment amount matches what you charge for items. (Defeat Price-Jacking) */

// Check Number 1 ------------------------------------------------------------------------------------------------------------
$receiver_email = $_POST['receiver_email'];
if ($receiver_email != "[email protected]") {
//handle the wrong business url
    exit(); // exit script
}
// Check number 2 ------------------------------------------------------------------------------------------------------------
if ($_POST['payment_status'] != "Completed") {
    // Handle how you think you should if a payment is not complete yet, a few scenarios can cause a transaction to be incomplete
}

// Check number 3 ------------------------------------------------------------------------------------------------------------
$this_txn = $_POST['txn_id'];
//check for duplicate txn_ids in the database
// Check number 4 ------------------------------------------------------------------------------------------------------------
$product_id_string = $_POST['custom'];
$product_id_string = rtrim($product_id_string, ","); // remove last comma
// Explode the string, make it an array, then query all the prices out, add them up, and make sure they match the payment_gross amount
// END ALL SECURITY CHECKS NOW IN THE DATABASE IT GOES ------------------------------------
////////////////////////////////////////////////////
// Homework - Examples of assigning local variables from the POST variables
$txn_id = $_POST['txn_id'];
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom'];
// Place the transaction into the database
// Mail yourself the details
mail("[email protected]", "NORMAL IPN RESULT YAY MONEY!", $req, "From: [email protected]");
?>

L'image ci-dessous vous aidera à comprendre le processus Paypal. Paypal process flow

Pour en savoir plus, consultez les liens suivants:

espérons que cela vous aide .. :)

41

une façon j'ai trouvé:

essayez d'insérer ce champ dans votre code de formulaire généré:

<input type='hidden' name='rm' value='2'>

rm signifie () méthode de retour ;

2 signifie (post)

Après l'achat et le retour de l'utilisateur à l'URL de votre site, cette URL obtient également les paramètres POST.

p.s. si vous utilisez php, essayez d’insérer var_dump($_POST); dans votre URL de retour (script), puis effectuez un achat test et, lorsque vous revenez sur votre site, vous verrez quelles sont les variables figurant sur votre URL.

22
T.Todua

Partager ceci car j'ai récemment rencontré des problèmes semblable à ce fil

Pendant longtemps, mon script a bien fonctionné (formulaire de paiement de base) et a également renvoyé les variables POST sur ma page success.php et les données IPN sous forme de variables POST. Cependant, récemment, j'ai remarqué que la page de retour (success.php) ne recevait plus de POST vars. J'ai testé dans Sandbox et je vis et je suis presque sûr que Paypal a changé quelque chose!

Notify_url reçoit toujours les données IPN correctes me permettant de mettre à jour la base de données, mais je n'ai pas été en mesure d'afficher un message de réussite sur ma page d'URL de renvoi (success.php).

Bien que j'aie essayé de nombreuses combinaisons pour activer et désactiver les options dans les préférences de paiement du site Paypal et dans l'IPN, j'ai dû apporter quelques modifications à mon script pour pouvoir toujours traiter un message. J'ai accompli cela en activant PDT et retour automatique, après avoir suivi cet excellent guide .

Maintenant tout fonctionne bien, mais le seul problème est que l'URL de retour contient toutes les variables PDT, ce qui est moche!

Vous pouvez également trouver ceci utile

4
Sol

Je pense que l’idée de régler les valeurs de retour automatique comme décrit ci-dessus par Kevin est un peu étrange!

Supposons, par exemple, que plusieurs sites Web utilisent le même compte Paypal pour gérer vos paiements, ou qu'un même site comporte plusieurs sections qui effectuent différentes tâches d'achat et exigent des adresses de retour différentes lors du paiement. est terminé. Si je mets un bouton sur ma page comme décrit ci-dessus dans la section "Exemple de formulaire utilisant PHP pour les paiements directs", vous pouvez voir qu'il y a une ligne:

input type="hidden" name="return" value="https://www.yoursite.com/checkout_complete.php"

où vous définissez la valeur de retour individuelle. Pourquoi doit-il être défini de manière générale, également dans la section des profils?!?!

De plus, comme vous ne pouvez définir qu'une seule valeur dans la section Profil, cela signifie (autant que je sache) que vous ne pouvez pas utiliser le renvoi automatique sur un site comportant plusieurs actions.

Commentaires s'il vous plaît ??

3
Tim Makins

sur la page de paiement, recherchez l'élément de formulaire masqué 'cancel_return':

définissez la valeur de l'élément de formulaire cancel_return sur l'URL vers laquelle vous souhaitez retourner:

1
Rahul Shinde