Paramétrer L'URL de retour PayPal et le faire retourner automatiquement?

il S'agit d'une question de suivi à: PHP: façon facile de commencer PayPal check-out?

donc, mon problème est que je spécifie l'url de retour. Cependant, après avoir payé avec PayPal, je me retrouve à un écran qui dit:

Vous venez de terminer votre paiement. XXXX, vous venez de terminer votre paiement. Votre code D'identification de transaction pour ce paiement est: XXXXXXXXXXXXX.

nous enverrons une confirmation adresse électronique XX@XXXX.com. Cette transaction apparaîtra sur votre relevé comme 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éfinit la variable" return
  • définit la variable" rm "à: 2 (qui selon le guide = " le navigateur de l'acheteur est redirigé vers L'URL de retour en utilisant la méthode de POST, et toutes les variables de paiement sont inclus ")

en fait, voici tout mon formulaire:

<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
  <input type="hidden" value="_xclick" name="cmd">
  <input type="hidden" value="onlinestore@thegreekmerchant.com" 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 en arrière automatiquement? Sinon, comment puis-je obtenir le résultat du paiement sur mon site afin que je puisse mettre à jour la base de données? Qu'est-ce que IPN?

120
demandé sur Community 2011-10-04 07:11:16

6 réponses

vous devez activer le retour automatique dans votre compte PayPal, sinon il ignorera le champ return .

dans la documentation (Mise à jour pour tenir compte de la nouvelle présentation):

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

  1. connectez-vous à votre compte PayPal au https://www.paypal.com . La page Aperçu de mon dossier apparaît.
  2. cliquez sur le profil sous-table. La page de résumé du profil apparaît.
  3. cliquez sur le lien Mes outils de vente dans la colonne de gauche.
  4. sous la section Vente en ligne, cliquez sur le lien de mise à jour dans la rangée pour les préférences de site web. La page des préférences de paiement du site Web apparaît
  5. sous retour automatique pour les paiements du site web, cliquez sur le bouton "on radio" pour activer Auto Retourner.
  6. dans L'URL de retour champ, Entrez L'URL à laquelle vous voulez que vos payeurs redirigés après ils achèvent leurs paiements. Remarque: PayPal vérifie L'URL de retour que vous entrez. Si L'URL n'est pas correctement formatée ou ne peut pas être validé, PayPal ne sera pas activer Auto Return.
  7. Faites défiler jusqu'au bas de la page et cliquez sur le bouton Enregistrer.

IPN est pour la notification instantanée de paiement. Il vous donnera plus fiables et utiles d'informations que ce que vous obtenez de retour 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 est que vous passez un paramètre notify_url avec la requête, et configurer une page qui traite et valide IPN notifications, et PayPal enverra des demandes à cette page pour vous aviser lorsque les paiements / remboursements/etc. traverser. Cette page IPN handler serait alors le bon endroit pour mettre à jour la base de données afin de marquer les commandes comme ayant été payées.

184
répondu Kevin Stricker 2014-01-06 16:22:16

Exemple de formulaire à l'aide de 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="you@youremail.com">

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

veuillez passer par les champs notify_url, return, cancel_return

exemple de code pour la gestion des ipn (my_ipn.php) qui est demandé par paypal après paiement.

pour plus d'informations sur la création d'un IPN, veuillez vous référer au lien ce lien .

<?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("you@youremail.com", "IPN interaction not verified", "$req", "From: you@youremail.com");
    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 != "you@youremail.com") {
//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("you@youremail.com", "NORMAL IPN RESULT YAY MONEY!", $req, "From: you@youremail.com");
?>

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

pour plus de renseignements, veuillez consulter les liens suivants:

espère que ce vous aide..:)

40
répondu Prashanth Pratapagiri 2012-10-05 06:40:03

d'une façon que 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 de retour de la méthode ;

2 signifie (post)

Qu'après les achats de l'utilisateur et retourne à l'url de votre site, puis que l'url obtient le POST paramètres ainsi que

p. S. si vous utilisez php, essayez d'insérer var_dump($_POST); dans votre url de retour(script),puis faites un achat test et lorsque vous revenez sur votre site, vous verrez quelles variables sont disponibles sur votre url.

20
répondu solution fix 2015-06-12 22:47:48

je pense que l'idée de définir les valeurs de retour automatique comme décrit ci-dessus par Kevin est un peu étrange!

dire, par exemple, que vous avez un certain nombre de sites Web qui utilisent le même compte PayPal pour gérer vos paiements, ou dire que vous avez un certain nombre de sections dans un site web qui effectuent différentes tâches d'achat, et exigent différentes adresses de retour lorsque le paiement est terminé. Si je mets un bouton sur ma page comme décrit ci-dessus dans le " modèle de formulaire en utilisant PHP pour la section des 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 fixé de manière générale, dans la section Profil aussi?!?!

aussi, parce que vous ne pouvez définir qu'une seule valeur dans la section Profil, cela signifie (AFAIK) que vous ne pouvez pas utiliser le retour automatique sur un site avec plusieurs actions.

commentaires s'il vous plaît??

2
répondu Tim Makins 2015-08-06 10:57:18

partager ce que j'ai récemment rencontré des problèmes similaire à ce fil de discussion

pendant longtemps, mon script a bien fonctionné (formulaire de paiement de base) et a retourné les variables POST à mon succès.la page php et les données IPN comme variables POST aussi. Cependant, dernièrement, j'ai remarqué la page de retour (succès.php) ne recevait plus de postvars. J'ai testé dans le bac à sable et en direct et je suis assez sûr PayPal ont changé quelque chose !

le 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 succès sur mon URL de retour (succès.php) de la page.

bien que j'ai essayé de nombreuses combinaisons pour activer et désactiver les options dans les préférences de paiement du site Web PayPal et IPN, j'ai dû faire quelques changements à mon script pour m'assurer que je peux toujours traiter un message. J'ai accompli ceci en allumant PDT et Auto Return, après avoir suivi ceci excellent guide .

maintenant tout fonctionne bien, mais le seul problème est L'URL de retour contient toutes les variables PDT qui est laid!

vous pouvez aussi trouver cette utile

2
répondu Sol 2017-08-31 01:07:35

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

définit la valeur de l'élément cancel_return form à L'URL à laquelle vous souhaitez retourner:

1
répondu Rahul Shinde 2014-11-20 05:22:34