2013-02-12 82 views
16

पर ब्राउज़र को रीडायरेक्ट करें। मैं ऐसी साइट विकसित कर रहा हूं जहां ग्राहकों के पास पेपैल भुगतान मानक सहित कई भुगतान विकल्प हैं। जब से मैं ग्राहक के बारे में डेटा भी पर्याप्त मात्रा में इकट्ठा कर रहा हूँ, मैं पेपैल के सर्वर पर उपयोगकर्ता भेजने से पहले अपने सर्वर पर संसाधित करना चाहते हैं। एक विकल्प, एक एकल स्ट्रिंग में डेटा को श्रेणीबद्ध custom क्षेत्र के लिए स्ट्रिंग असाइन करें, और उसके बाद IPN जवाब में यह कार्रवाई करने के लिए है, लेकिन मैं यह एक बहुत ही असजीला समाधान हो पाते हैं। इसके बजाय, उपयोगकर्ता डेटा एकत्र करने के बाद, मैं मानक HTML पेपैल फ़ॉर्म सबमिट करने के लिए curl का उपयोग करने का प्रयास कर रहा हूं। चेकआउट प्रक्रिया को पूरा करने के लिए मैं उपयोगकर्ता को पेपैल पर कैसे रीडायरेक्ट कर सकता हूं?कर्ल के माध्यम से फॉर्म सबमिट करें और पेपैल

// Process PayPal payment 
    if ($method == 'PayPal') { 

    // Prepare POST data 
    $query = array(); 
    $query['notify_url'] = 'http://example.com/ipn'; 
    $query['cmd'] = '_cart'; 
    $query['upload'] = '1'; 
    $query['business'] = '[email protected]'; 
    $query['address_override'] = '1'; 
    $query['first_name'] = $first_name; 
    $query['last_name'] = $last_name; 
    $query['email'] = $email; 
    $query['address1'] = $ship_to_address; 
    $query['city'] = $ship_to_city; 
    $query['state'] = $ship_to_state; 
    $query['zip'] = $ship_to_zip; 
    $query['item_name_'.$i] = $item['description']; 
    $query['quantity_'.$i] = $item['quantity']; 
    $query['amount_'.$i] = $item['info']['price']; 

    // Prepare query string 
    $query_string = ''; 
    foreach ($query as $key=>$value) { 
     $query_string .= $key.'='.urlencode($value).'&'; 
    } 
    $query_string = rtrim($query_string, '&'); 

    // Open connection 
    $ch = curl_init(); 

    //set the url, number of POST vars, POST data 
    curl_setopt($ch,CURLOPT_URL, 'https://www.paypal.com/cgi-bin/webscr'); 
    curl_setopt($ch,CURLOPT_POST, count($query)); 
    curl_setopt($ch,CURLOPT_POSTFIELDS, $query_string); 

    // Execute post 
    $result = curl_exec($ch); 

    // Close connection 
    curl_close($ch); 
    } 
+0

curl_exec के बाद $ परिणाम क्या होता है? – Drahcir

+0

@Gerve: मैंने एक print_r किया है और मुझे बस गड़बड़ हो रही है: '<ÿÿ1' –

उत्तर

38

चेतावनी: इस उत्तर में सुरक्षा घाटा है। ग्राहक के माध्यम से संवेदनशील डेटा (जैसे आइटम और मूल्य के रूप में) पासिंग ग्राहक लेन-देन को संशोधित करने की अनुमति देता है। अर्थात। आइटम बदलें, या कीमत बदलें। how to implement IPN पर पेपैल दस्तावेज़ देखें।

आपको उपयोगकर्ता को php header फ़ंक्शन के साथ रीडायरेक्ट करना चाहिए और पोस्ट को पोस्ट न करें के रूप में भेजें।

// Process PayPal payment 
if ($method == 'PayPal') { 

    // Prepare GET data 
    $query = array(); 
    $query['notify_url'] = 'http://jackeyes.com/ipn'; 
    $query['cmd'] = '_cart'; 
    $query['upload'] = '1'; 
    $query['business'] = '[email protected]'; 
    $query['address_override'] = '1'; 
    $query['first_name'] = $first_name; 
    $query['last_name'] = $last_name; 
    $query['email'] = $email; 
    $query['address1'] = $ship_to_address; 
    $query['city'] = $ship_to_city; 
    $query['state'] = $ship_to_state; 
    $query['zip'] = $ship_to_zip; 
    $query['item_name_'.$i] = $item['description']; 
    $query['quantity_'.$i] = $item['quantity']; 
    $query['amount_'.$i] = $item['info']['price']; 

    // Prepare query string 
    $query_string = http_build_query($query); 

    header('Location: https://www.paypal.com/cgi-bin/webscr?' . $query_string); 
} 
+0

मैं तुमसे प्यार करता हूँ! बेशक समाधान curl का उपयोग नहीं करना है! लेकिन आप कैसे जानते थे कि चर प्राप्त करेंगे? क्या वेब एपीआई को स्वीकार करना आम बात है? –

+1

मैंने बहुत समय पहले पेपैल एपीआई का इस्तेमाल किया था, बस याद किया कि मैंने यह कैसे किया। खुशी है कि यह – Drahcir

+0

काम किया है आपका ज्ञान साझा करने के लिए धन्यवाद। –

1

कर्लिंग कर यह बैकएंड पक्ष में अंत कॉल को समाप्त कर देगा, यह फ्रंटेंड व्यवहार पर प्रतिबिंबित नहीं होगा।

आपको छिपे हुए फ़ील्ड और जावास्क्रिप्ट के साथ एक फॉर्म बनाना होगा ताकि फॉर्म लोड होने के बाद ऑटो सबमिट हो सके।

4

पेपैल और बैक पर सभी डेटा पोस्ट करने की कोशिश करने के बजाय, आपको डेटा को अपने सर्वर पर रखना चाहिए और केवल एक पहचान टोकन भेजना चाहिए। पेपैल (उपयोगकर्ता के ब्राउज़र के माध्यम से) को भेजे जाने वाले किसी भी डेटा को अवरुद्ध और संशोधित किया जा सकता है। यह एक गंभीर सुरक्षा खतरे है।

यदि आप केवल टोकन भेजते हैं तो छेड़छाड़ करने का कोई अवसर नहीं है।

पेपैल स्पेक पढ़ें, इसमें इन चीजों को लागू करने के तरीके पर दिशानिर्देश हैं।

आप आईपीएन या कुछ समान पोस्ट प्रोसेसिंग का उपयोग करना चाहिए क्योंकि पेपैल अकेला है जो जानता है कि भुगतान वास्तव में किया गया था या नहीं। नहीं विश्वास किसी भी डेटा आप उपयोगकर्ता से मिलता है।

+0

असल में, मैं वही कर रहा हूं जो पेपैल करने का सुझाव देता है: https://www.x.com/developers/paypal/documentation- उपकरण/paypal-भुगतान की मानक/एकीकरण-गाइड/cart_upload। मैं बस अपने सर्वर पर कुछ डेटा रखने में आसान बनाने के लिए इसे कर्ल में करने की कोशिश कर रहा हूं। मेरे मामले में, मुझे परवाह नहीं है कि भुगतान हो रहा है या नहीं - मैं अभी भी ग्राहक की जानकारी एकत्र करना चाहता हूं। –

+0

यह कोई मतलब नहीं है। क्या आप उपयोगकर्ता को अपने पेपैल प्रमाण-पत्रों के लिए पूछने जा रहे हैं, और उनकी ओर से भुगतान करते हैं? यह पूरी तरह से अस्वीकार्य है। आपको पेपैल से अनुरोध नहीं करना चाहिए, उपयोगकर्ता को चाहिए, और उसके बाद पेपैल आपको संपर्क करेगा। – Halcyon

+2

आप पेपैल भुगतान मानक का उपयोग करते हैं, उपयोगकर्ता केवल पेपैल की वेबसाइट पर भेज रहा है। वे अपने प्रमाण पत्र स्वयं दर्ज करते हैं। इस फ़ॉर्म की एकमात्र चीज शॉपिंग कार्ट जानकारी के साथ भेजती है। मुझे लगता है कि आप उन्नत एकीकरण विधियों के साथ भ्रमित हो रहे हैं, जिनका मैं यहां उपयोग नहीं कर रहा हूं। –