मैं अपनी वेब साइट पर एक साधारण लेनदेन बनाना चाहता हूं जहां व्यक्ति के लेन-देन पूरा होने के बाद, मैं पेपैल को उपयोगकर्ता को अपनी साइट पर किसी स्थान पर जाने के लिए रीडायरेक्ट करना चाहता हूं और मैं चाहता हूं कि पेपैल मुझे प्रदान करे विवरण के साथ मैं PHP को इसका विश्लेषण करने के लिए उपयोग कर सकता हूं और उन्हें अपनी खरीद के लिंक को ईमेल कर सकता हूं। मुझे यकीन नहीं है कि notify_url क्या करता है? धन्यवादलेनदेन के बाद पेपैल से जानकारी प्राप्त करें
उत्तर
पेपैल इस तरह काम करता है:
आप एक "खरीदें" बटन के साथ एक रूप है। जब इसे क्लिक किया जाता है, तो यह पेपैल को जानकारी (उत्पाद, मूल्य, आपका खाता नाम इत्यादि) भेजता है।
खरीदार तब भुगतान करने के लिए सहमत होता है जब लेनदेन पूरा हो जाता है, पेपैल आपके यूआरएल को सूचित करने के लिए "आईपीएन" (तत्काल भुगतान अधिसूचना) भेजता है - यह आपके सर्वर को प्रक्रिया के लिए उस यूआरएल में पोस्ट डेटा भेजता है। आप पेपैल से यह पूछने के लिए जवाब देते हैं कि क्या उन्होंने POST डेटा भेजा है (एक प्रेरक के बजाए) और यदि वे जवाब देते हैं कि यह वास्तविक लेनदेन है, तो आप उत्पाद को ग्राहक को छोड़ सकते हैं। ध्यान दें कि यह सब पृष्ठभूमि में होता है जबकि आपका खरीदार अभी भी पेपैल वेबसाइट पर "पर" है।
अंतिम वैकल्पिक चरण है, जो कि पेपैल खरीदार को आपकी वेबसाइट पर लौटाता है। इस मामले में, वे खरीदार को आपके "रिटर्न" यूआरएल पर वापस भेजते हैं, और वे लेनदेन डेटा को दोबारा पास कर सकते हैं (वे इस पीडीटी को कॉल करते हैं)। और यदि आप एक वैध लेनदेन है और उस बिंदु पर एक डाउनलोड आदि प्रदान करते हैं तो आप फिर से पेपैल से जांच सकते हैं।
सबसे मुश्किल बात यह है कि कोई भी बताता है कि खरीदार आपके अधिसूचना यूआरएल पर रीडायरेक्ट नहीं होता है। यानी आपकी वेबसाइट के अधिसूचना यूआरएल में "विज़िटर" पेपैल है, खरीदार नहीं है, इसलिए यह आपके खरीदार के सत्र के हिस्से के रूप में नहीं होता है। यदि आप इस प्रक्रिया के तीन हिस्सों में एक सत्र जारी रखना चाहते हैं, तो आपको अपने फॉर्म में खरीदार को ट्रैक करने का साधन बनाना होगा, और "कस्टम" नामक फॉर्म के क्षेत्र में पेपैल को पास करना होगा। यह डेटा आपको आईपीएन और पीडीटी डेटा में वापस भेज दिया गया है, और आप इसे मूल उपयोगकर्ता सत्र के साथ कनेक्शन को दोबारा स्थापित करने के लिए उपयोग कर सकते हैं।
आपको वास्तव में आईपीएन और पीडीटी दोनों को लागू करने की आवश्यकता है - यदि आईपीएन ईमेल विफल रहता है तो आपके पास बैकअप के रूप में पीडीटी है। और यदि उपयोगकर्ता आपके पीडीटी पृष्ठ पर रीडायरेक्ट किए जाने से पहले अपने वेब ब्राउज़र को बंद कर देता है, तो आपने बैकअप के रूप में एक आईपीएन ईमेल भेजा है।
आईपीएन और पीडीटी पर खोजें और आपको बहुत सारी जानकारी मिल जाएगी। PayPal में पूर्ण प्रलेखन और उदाहरण स्क्रिप्ट भी हैं।
सूचित यूआरएल स्क्रिप्ट है कि इस तरह के रूप में पेपैल से दिए गए डेटा, बचाता है करने के लिए नेतृत्व करना चाहिए:
/** Fetch order from PayPal (IPN reply)
* @return int received ID of inserted row if received correctly, 0 otherwise
*/
function FetchOrder()
{
$transactionID=$_POST["txn_id"];
$item=$_POST["item_name"];
$amount=$_POST["mc_gross"];
$currency=$_POST["mc_currency"];
$datefields=explode(" ",$_POST["payment_date"]);
$time=$datefields[0];
$date=str_replace(",","",$datefields[2])." ".$datefields[1]." ".$datefields[3];
$timestamp=strtotime($date." ".$time);
$status=$_POST["payment_status"];
$firstname=$_POST["first_name"];
$lastname=$_POST["last_name"];
$email=$_POST["payer_email"];
$custom=$_POST["option_selection1"];
if ($transactionID AND $amount)
{
// query to save data
return $this->insertID;
}
else
{
return 0;
}
}
तुम भी बाद में एक सत्यापित करने के लिए चुन सकते हैं:
/** Verify PayPal order (IPN)
* PayPal returns VERIFIED or INVALID on request
* @return bool verified 1 if verified, 0 if invalid
*/
function VerifyOrder()
{
$_POST["cmd"]="_notify-validate";
$ch=curl_init();
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_USERAGENT,"your agent - replace");
curl_setopt($ch,CURLOPT_URL,"https://www.paypal.com/cgi-bin/webscr");
curl_setopt($ch,CURLOPT_POST, 1);
foreach ($_POST as $key=>$value)
{
$string.="&".$key."=".urlencode(stripslashes($value));
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $string);
$result=curl_exec($ch);
if ($result=="VERIFIED") return 1;
else return 0;
}
$tx=$_REQUEST['tx'];
$paypal_url='https://www.paypal.com/cgi-bin/webscr?cmd=_notify-synch&tx='.$tx.'&at=token here';
$curl = curl_init($paypal_url);
$data = array(
"cmd" => "_notify-synch",
"tx" => $tx,
"at" => "token here"
);
$data_string = json_encode($data);
curl_setopt ($curl, CURLOPT_HEADER, 0);
curl_setopt ($curl, CURLOPT_POST, 1);
curl_setopt ($curl, CURLOPT_POSTFIELDS, $data_string);
curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 1);
$headers = array (
'Content-Type: application/x-www-form-urlencoded',
'Host: www.paypal.com',
'Connection: close'
);
curl_setopt ($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt ($curl, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($curl);
$lines = explode("\n", $response);
$keyarray = array();
if (strcmp ($lines[0], "SUCCESS") == 0) {
for ($i=1; $i<count($lines);$i++){
list($key,$val) = explode("=", $lines[$i]);
$keyarray[urldecode($key)] = urldecode($val);
}
$first_name=$keyarray['first_name'];
$last_name=$keyarray['last_name'];
$payment_status=$keyarray['payment_status'];
$business=$keyarray['business'];
$payer_email=$keyarray['payer_email'];
$payment_gross=$keyarray['payment_gross'];
$mc_currency=$keyarray['mc_currency'];
}
पीडीटी प्रतिक्रिया को पार्स करते समय मैं parse_str का उपयोग कर रहा हूं। यूआरएल इनकोडिंग यह आवेदन आप भी दूसरा पैरामीटर ($ this-> विवरण बाहर छोड़ सकते हैं पर निर्भर करता है इस
$result = curl_exec($ch);
//replace the breaks with '&'
$r_string = str_replace("\n", "&", $result);
//parse the response into a key->value array
parse_str($r_string, $this->details);
if(!isset($this->details['SUCCESS'])){
//the "SUCCESS" or "FAIL" response is the first key
return FALSE;
}
else{
//the values of the response are now in an array
return TRUE;
}
तरह ampersands- साथ पंक्ति विराम की जगह का मामला है के बाद से प्रतिक्रिया का मुख्य भाग है) और मान वैश्विक चर के रूप में सेट हैं।
- 1. पेपैल लेनदेन के लिए प्रत्यक्ष वेब यूआरएल
- 2. पेपैल
- 3. पेपैल एमईसीएल लेनदेन की समस्या
- 4. एक बार में एकाधिक पेपैल लेनदेन
- 5. पैकेज नाम से आवेदन जानकारी प्राप्त करें
- 6. libopcodes से निर्देश जानकारी कैसे प्राप्त करें?
- 7. पेपैल एपीआई क्रेडेंशियल्स कैसे प्राप्त करें?
- 8. क्विकटाइम वीडियो जानकारी प्राप्त करें
- 9. मुझे पेपैल सैंडबॉक्स के लिए एप्लिकेशन आईडी कैसे प्राप्त करें?
- 10. सिग्नलआर: ऐप पूल रीसायकल के बाद ग्राहक जानकारी को पुनः प्राप्त करने के लिए कैसे करें
- 11. लेनदेन के बाद कॉलबैक सेट अप
- 12. उपयोगकर्ता से अधिक जानकारी प्राप्त करें - वसंत सुरक्षा
- 13. बुकिंग के बाद जानकारी प्राप्त करें (cURL, iFrame ...?) बाहरी वेबसाइट पर
- 14. लेनदेन का उपयोग कैसे करें (लेनदेन शुरू करें, लेनदेन करें)?
- 15. थ्रेड जानकारी से मॉड्यूल नाम प्राप्त करना
- 16. पेपैल पुनरावर्ती भुगतान
- 17. पायथन का उपयोग कर फेसबुक से जानकारी कैसे प्राप्त करें?
- 18. एक ही संख्या से कई जानकारी प्राप्त करें?
- 19. गिट क्ली: उपयोगकर्ता नाम से उपयोगकर्ता जानकारी प्राप्त करें
- 20. प्ले करें! फ्रेमवर्क भुगतान हैंडलिंग (ईकामर्स/पेपैल)
- 21. जानकारी प्राप्त करें जहां एक GitHub रेपो से
- 22. जानकारी के लिए एक्सकोड कैसे प्राप्त करें Info.plist फ़ाइल
- 23. सर्वर पर हार्डवेयर जानकारी प्राप्त करें
- 24. एंड्रॉइड संपर्क पिकर से संपर्क जानकारी प्राप्त करें
- 25. पेपैल आईपीएन अद्वितीय पहचानकर्ता
- 26. पायथन: 'फ्रेम' ऑब्जेक्ट से कक्षा की जानकारी कैसे प्राप्त करें?
- 27. वेबसाइट आगंतुकों से सभी ग्राहक जानकारी कैसे प्राप्त करें?
- 28. django टेम्पलेट्स में उपयोगकर्ता जानकारी प्राप्त करें
- 29. कक्षा और रनटाइम जानकारी कैसे प्राप्त करें?
- 30. .NET में प्रिंटर जानकारी कैसे प्राप्त करें?
शायद मैं गलतफहमी कर रहा हूं, लेकिन मैंने सोचा कि यह या तो है या।मैंने सोचा कि आप या तो अपने व्यापारी प्रोफाइल, या आईपीएन पर पीडीटी कर सकते हैं, लेकिन दोनों नहीं। क्या आप मुझे दिखा सकते हैं कि एक ही समय में पीडीटी और आईपीएन दोनों को कैसे सेटअप किया जाए? – Volomike
@ वोलोमाइक: पिछले दो पैराग्राफ पढ़ें [यहां (पेपैल)] (https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNIntro) और अन्य SO उत्तर जैसे [यह एक] (http://stackoverflow.com/questions/2836779/paypal-ipn-vs-pdt) –
@ जेसनविल्लियम्स लिंक टूटा हुआ लगता है। –