पेपल रिटर्न यूआरएल सेट करना और इसे ऑटो रिटर्न बनाना?


127

यह एक अनुवर्ती सवाल है: PHP: पेपाल चेकआउट शुरू करने का आसान तरीका?

इसलिए, मेरी समस्या यह है कि मैं रिटर्न यूआरएल को निर्दिष्ट कर रहा हूं। हालाँकि, PayPal के साथ भुगतान करने के बाद, मैं आ स्क्रीन पर कहता हूं कि:

आपने अभी-अभी अपना भुगतान पूरा किया है। XXXX, आपने अभी-अभी अपना भुगतान पूरा किया है। इस भुगतान के लिए आपकी लेनदेन आईडी है: XXXXXXXXXXXXX।

हम XX@XXXX.com को एक पुष्टिकरण ईमेल भेजेंगे। यह लेन-देन आपके बयान पर PAYPAL के रूप में दिखाई देगा।

Go to PayPal account overview

मुझे इसकी आवश्यकता है कि यह स्क्रीन न दिखाएं और सीधे रिटर्न URL पर जाएं। मेरे पास है:

  • "वापसी" चर सेट करें
  • "Rm" वैरिएबल को: 2 पर सेट करें (जो कि गाइड के अनुसार = " खरीदार का ब्राउज़र POST विधि का उपयोग करके रिटर्न URL पर पुनर्निर्देशित किया गया है, और सभी भुगतान चर शामिल हैं ")

वास्तव में, यहाँ मेरा पूरा रूप है:

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

किसी भी विचार कैसे मैं इसे स्वचालित रूप से वापस जाने के लिए प्राप्त कर सकता हूं? वैकल्पिक रूप से, मुझे अपनी वेबसाइट पर भुगतान का परिणाम कैसे मिलेगा ताकि मैं डेटाबेस को अपडेट कर सकूं? IPN क्या है?


कृपया ध्यान दें, कि आपके कस्टम रिटर्न पैरामीटर में होस्ट्स आपके पेपाल खाते में कॉन्फ़िगर किए गए समान होने चाहिए।
एंड्रियास

जवाबों:


199

आपको अपने पेपाल खाते में ऑटो रिटर्न को सक्षम करना होगा, अन्यथा यह returnफ़ील्ड को अनदेखा कर देगा ।

प्रलेखन से (नए लेआउट जनवरी 2019 को प्रतिबिंबित करने के लिए अद्यतन):

ऑटो रिटर्न को डिफ़ॉल्ट रूप से बंद कर दिया जाता है। ऑटो रिटर्न चालू करने के लिए:

  1. Https://www.paypal.com या https://www.sandbox.paypal.com पर अपने पेपैल खाते में लॉग इन करें । मेरा खाता अवलोकन पृष्ठ प्रकट होता है।
  2. गियर आइकन टॉप राइट पर क्लिक करें। प्रोफ़ाइल सारांश पृष्ठ दिखाई देता है।
  3. बाएं कॉलम में माई सेलिंग प्रेफरेंस लिंक पर क्लिक करें।
  4. विक्रय ऑनलाइन अनुभाग के तहत, वेबसाइट प्राथमिकता के लिए पंक्ति में अद्यतन लिंक पर क्लिक करें। वेबसाइट भुगतान प्राथमिकताएं पृष्ठ प्रकट होता है
  5. वेबसाइट भुगतान के लिए ऑटो रिटर्न के तहत, ऑटो रिटर्न को सक्षम करने के लिए रेडियो बटन पर क्लिक करें।
  6. वापसी URL फ़ील्ड में, वह URL दर्ज करें जिसमें आप अपने भुगतानकर्ताओं को उनके भुगतान पूरा करने के बाद पुनर्निर्देशित करना चाहते हैं। नोट: पेपल आपके द्वारा दर्ज किए गए रिटर्न URL की जाँच करता है। यदि URL ठीक से फ़ॉर्मेट नहीं किया गया है या मान्य नहीं किया जा सकता है, तो PayPal Auto Return को सक्रिय नहीं करेगा।
  7. पृष्ठ के नीचे स्क्रॉल करें, और सहेजें बटन पर क्लिक करें।

आईपीएन तत्काल भुगतान अधिसूचना के लिए है। यह आपको ऑटो-रिटर्न से जो मिलेगा उससे अधिक विश्वसनीय / उपयोगी जानकारी देगा।

IPN के लिए दस्तावेज़ीकरण यहां है: https://www.x.com/sites/default/files/ipnguide.pdf

IPN के लिए ऑनलाइन दस्तावेज़: https://developer.paypal.com/docs/classic/ipn/gs_IPN/

सामान्य प्रक्रिया यह है कि आप notify_urlअनुरोध के साथ एक पैरामीटर पास करते हैं, और एक पृष्ठ सेट करते हैं जो IPN सूचनाओं को संभालता है और मान्य करता है, और पेपाल उस पृष्ठ पर आपको अनुरोध भेजेगा जब भुगतान / वापसी / आदि। के माध्यम से जाना। उस IPN हैंडलर पृष्ठ को भुगतान करने के आदेशों को चिह्नित करने के लिए डेटाबेस को अपडेट करने के लिए सही जगह होगी।


2
यहाँ एक नज़र है paypal.com/cgi-bin/webscr?cmd=p/mer/…
डेवलपर

5
पेपैल के नए वेब साइट लेआउट के साथ, यह अब बिल्कुल सटीक नहीं है। चरण 3) पर क्लिक करें My Selling Tools चरण 4) क्लिक करें Website Preferencesके तहतSelling Online
Webnet

2
पेपाल द्वारा आदेश को सही ढंग से नियंत्रित करने के लिए आईपीएन का उपयोग किया जाना चाहिए, हालांकि, आपको अभी भी सफलता के बारे में अपने उपयोगकर्ता को दिखाने के लिए रिटर्न यूआरएल की आवश्यकता है। इसलिए कई बार उपयोगकर्ता आपके द्वारा भेजे गए ईमेल को प्राप्त नहीं करते हैं, इसलिए यह अच्छा है यदि वे उत्पाद (डाउनलोड आदि) को तुरंत प्राप्त कर सकते हैं।
पीसीयूनाइट

1
@ केविन स्ट्रिकर हम 2 अलग-अलग साइटों के लिए url कैसे लौटा सकते हैं? जैसे यदि मैं 2 वेबसाइट के लिए एक पेपाल खाते का उपयोग करता हूं, लेकिन मैं आपके चरणों का उपयोग करके केवल एक यूआरएल को रिटर्न यूआरएल के रूप में जोड़ सकता हूं। मैं कैसे 2 साइटों के लिए उपयोग कर सकते हैं?
गौरव

4
यह बिल्कुल सटीक नहीं है कि "आपको अपने पेपैल खाते में ऑटो रिटर्न को सक्षम करना होगा, अन्यथा यह returnक्षेत्र की उपेक्षा करेगा ।" returnआपके द्वारा चेकआउट के लिए पास किए गए किसी भी URL पैरामीटर को सम्मानित किया जाएगा और विक्रेता के पेपल अकाउंट प्रोफाइल में कॉन्फ़िगर किए गए किसी भी ऑटो रिटर्न URL (या उसके अभाव) को ओवरराइड किया जाएगा, लेकिन अगर उनके पास ऑटो रिटर्न सक्षम नहीं है, तो खरीदार को मैन्युअल रूप से अतीत पर क्लिक करना होगा। चेकआउट का अंत स्वचालित रूप से रीडायरेक्ट किए जाने के बजाय उस URL पर पुनर्निर्देशित किया जाना है।
सबगॉथियस 20

42

प्रत्यक्ष भुगतान के लिए PHP का उपयोग कर नमूना फॉर्म।

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

कृपया Inform_url, रिटर्न, Cancel_return फ़ील्ड के माध्यम से जाएँ

आईपीएन (my_ipn.php) से निपटने के लिए नमूना कोड जिसे भुगतान के बाद पेपाल द्वारा अनुरोध किया गया है।

IPN बनाने के बारे में अधिक जानकारी के लिए, कृपया इस लिंक को देखें ।

<?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");
?>

नीचे दी गई छवि आपको पेपैल प्रक्रिया को समझने में मदद करेगी। पेपैल प्रक्रिया प्रवाह

आगे पढ़ने के लिए निम्न लिंक देखें;

उम्मीद है कि यह आपकी मदद करता है .. :)


1
किसी को पता है कि यह आज भी पेपैल एपीआई के साथ मान्य है? मैं देखता हूं कि प्रश्न 2 वर्ष पुराना है।
मैट वैलैंडर

1
खरीदार को तत्काल लेन-देन प्रतिक्रिया प्रदान करने के लिए 'वापसी' और 'कैंसिल_रेटर्न' यूआरएल का उपयोग किया जाता है, और उसके बाद पीडीटी चर का उपयोग कर सकते हैं। हालाँकि, PP केवल एक बार उनके साथ प्रयास करता है, इसलिए उन्हें महत्वपूर्ण ऑर्डर पूर्ति के लिए भरोसा नहीं किया जा सकता है (कहते हैं कि खरीदार भुगतान के बाद ब्राउज़र बंद कर देता है, लेकिन अभी भी पीपी पर)। उसके लिए, आप विश्वसनीय IPN प्रक्रिया के साथ, 'Inform_url' के माध्यम से, न्यूनतम पर 'पूर्ण' स्थिति को संसाधित करते हुए (मान लें कि कुछ और विफल है, शायद मैन्युअल बातचीत की आवश्यकता है) के साथ इसे वापस करना चाहते हैं। आपके पीडीटी और आईपीएन सर्वर प्रोसेसिंग को यह सुनिश्चित करना होगा कि ऑर्डर केवल एक बार भरा जाए।
पतंजलि

मुझे विश्वास है कि चीजें बदल गई हैं और पेपैल सफलता है। अब केवल GET चर के साथ काम करता है। यहां देखें: stackoverflow.com/questions/45671366/…
सोल

23

एक तरह से मैंने पाया है:

इस फ़ील्ड को अपने जनरेट किए गए फ़ॉर्म कोड में सम्मिलित करने का प्रयास करें:

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

आरएम का अर्थ है वापसी विधि ;

2 का मतलब (पद)

उपयोगकर्ता द्वारा खरीदे जाने के बाद और अपनी साइट url पर वापस जाने के बाद, उस url को POST पैरामीटर भी मिलते हैं

ps यदि php का उपयोग var_dump($_POST);करते हैं, तो अपनी वापसी url (स्क्रिप्ट) में सम्मिलित करने का प्रयास करें , फिर एक परीक्षण खरीदारी करें और जब आप अपनी साइट पर वापस लौटेंगे तो आप देखेंगे कि आपके url पर कौन से चर मिल रहे हैं।


क्या आपने वास्तव में इसका उपयोग किया था?
साइमन गिब्स

यह बहुत अच्छा था। जब तक पेमेंट में ट्रांसफर डेटा ट्रांसफर को बंद नहीं किया जाता है, तब तक आपको सभी पोस्ट सेटिंग्स को रिटर्न यूआरएल पर भेज दिया जाता है।
JulianJ

4

इसे साझा करने के रूप में मैंने हाल ही में इस धागे के समान मुद्दों का सामना किया है

लंबे समय तक, मेरी स्क्रिप्ट ने अच्छी तरह से काम किया (मूल भुगतान फ़ॉर्म) और POST चर को मेरी सफलता के लिए वापस कर दिया। पृष्ठ और IPN डेटा को POST चर भी कहा। हालाँकि, हाल ही में, मैंने पाया कि रिटर्न पेज (सफ़लता। एफपी) अब कोई पोस्ट वेरिएंट प्राप्त नहीं कर रहा था। मैंने सैंडबॉक्स में परीक्षण किया और जीवित हूं और मुझे पूरा यकीन है कि पेपैल ने कुछ बदल दिया है!

Inform_url अभी भी सही IPN डेटा प्राप्त करता है जो मुझे DB को अपडेट करने की अनुमति देता है, लेकिन मैं अपने रिटर्न URL (सफलता.php) पृष्ठ पर एक सफलता संदेश प्रदर्शित करने में सक्षम नहीं हूं।

पेपल वेबसाइट भुगतान वरीयताओं और IPN में विकल्पों को स्विच करने के लिए कई संयोजनों की कोशिश करने के बावजूद, मुझे यह सुनिश्चित करने के लिए अपनी स्क्रिप्ट में कुछ बदलाव करने होंगे कि मैं अभी भी एक संदेश संसाधित कर सकता हूं। मैंने इस उत्कृष्ट मार्गदर्शिका का पालन करने के बाद पीडीटी और ऑटो रिटर्न को चालू करके इसे पूरा किया है ।

अब यह सब ठीक काम करता है, लेकिन एकमात्र मुद्दा रिटर्न यूआरएल है जिसमें सभी पीडीटी चर हैं जो बदसूरत है!

आपको यह मददगार भी लग सकता है


3

मुझे लगता है कि केविन द्वारा ऊपर वर्णित ऑटो रिटर्न मूल्यों को स्थापित करने का विचार थोड़ा अजीब है!

उदाहरण के लिए, कहें कि आपके पास कई वेबसाइटें हैं जो आपके भुगतानों को संभालने के लिए एक ही PayPal खाते का उपयोग करती हैं, या यह कहें कि आपके पास एक वेबसाइट में कई अनुभाग हैं, जो अलग-अलग क्रय कार्य करते हैं, और भुगतान के समय अलग-अलग रिटर्न पते की आवश्यकता होती है पूरा हो गया है। यदि मैं अपने पृष्ठ पर एक बटन लगाता हूं, जैसा कि 'प्रत्यक्ष भुगतान के लिए PHP का उपयोग कर नमूना' अनुभाग में ऊपर वर्णित है, तो आप देख सकते हैं कि वहां एक पंक्ति है:

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

जहाँ आप व्यक्तिगत वापसी मूल्य निर्धारित करते हैं। प्रोफाइल अनुभाग में भी इसे आम तौर पर क्यों सेट किया जाना है?!?!

इसके अलावा, क्योंकि आप केवल प्रोफ़ाइल अनुभाग में एक मान सेट कर सकते हैं, इसका मतलब (AFAIK) है कि आप कई क्रियाओं वाली साइट पर ऑटो रिटर्न का उपयोग नहीं कर सकते हैं।

टिप्पणियाँ कृपया ??


3
प्रत्येक पैरामीटर के लिए
पेपल कॉन्फिगर

1
हाँ, DropHit ने जो कहा, वह सिर्फ डिफ़ॉल्ट ऑटो रिटर्न वैल्यू है, अगर आप इसे एक पैरामीटर के रूप में पास करना भूल जाते हैं। यदि आप इसे एक पैरामीटर के रूप में पास करते हैं तो यह आपकी प्रत्येक वेबसाइट के लिए आपके रिटर्न यूआरएल का उपयोग करेगा।
हामिश

क्या यह मदद करता है? codeseekah.com/2012/02/11/…
हामिश

@DropHit क्या पीडीटी अभी भी प्रति-बटन ओवरराइड returnमूल्यों के साथ काम करता है ? इसलिए मेरे पास अलग-अलग रिटर्न पेज हो सकते हैं जो अभी भी सभी पीडीटी डेटा प्राप्त करेंगे?
दाई

देर से जवाब के लिए क्षमा करें - मुझे यकीन नहीं है कि यह काम करेगा लेकिन मेरी वर्तमान एकीकरण अभी भी अपेक्षित रूप से चल रही है, हालांकि यह गारंटी नहीं देता है कि आपका उपयोग मामला मेरे जैसा काम करेगा
DropHit

1

चेकआउट पृष्ठ पर, 'Cancel_return' छिपे हुए फ़ॉर्म तत्व को देखें:

आप जिस URL पर वापस लौटना चाहते हैं, उसके लिए Cancel_return फॉर्म एलिमेंट का मान सेट करें:


दरअसल, fails कैंसिल रिटर्न ’का उपयोग केवल तब किया जाता है जब लेनदेन विफल हो जाता है। आप सफलतापूर्वक पूर्ण किए गए लेनदेन को संभालने के लिए एक 'वापसी' URL भी प्रदान करते हैं, अन्यथा उनके लिए डिफ़ॉल्ट URL का उपयोग किया जाएगा।
पतंजलि

ऐसा नहीं है जब लेनदेन विफल हो जाता है, बल्कि, जब खरीदार "ऑर्डर को पूरा करने के लिए छोड़ने के लिए चेकआउट के दौरान" रद्द करें और [व्यापारी नाम पर वापस लौटें] पर क्लिक करता है।
सबगोथियस 21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.