2010-04-07 11 views
5

मैं पेपैल पर डेटा पोस्ट करने के लिए एक फॉर्म लिख रहा हूं, और यह ठीक काम करता है, मैं छिपे हुए फ़ील्ड के साथ फॉर्म बना देता हूं और उसके बाद सबमिट बटन होता है जो सबकुछ पेपैल को सबमिट करता है।ऑटो एक फॉर्म सबमिट कर रहा है (curl)

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

मैं इसके लिए जावास्क्रिप्ट का उपयोग नहीं करना चाहता हूं।

इस समय मेरे विधि cURL, वापस वर्तमान पृष्ठ से फ़ॉर्म पोस्ट उपयोग कर रहा है, मैं तो जाँच $ _POST डेटा, गाड़ी की स्थिति को अद्यतन करने की तरह मेरे अन्य आदेशों करना के लिए, और फिर एक कर्ल आदेश बनाते हैं, और पेपैल में फॉर्म डेटा पोस्ट करें। अब, यह सफलतापूर्वक पोस्ट हो जाता है, लेकिन ब्राउज़र पेपैल पर नहीं जाता है।

पहले मैं सिर्फ एक स्ट्रिंग में परिणाम retirieving गया था और तब इसे बाहर गूंज और मैं देख सकता था कि पोस्ट सफल रहा पर है, तो मैं 1 इस संभालने दिया जाएगा ब्राउज़र paypal के लिए रवाना जाना CURLOPT_FOLLOWLOCATION सेट लेकिन यह does not, ऐसा लगता है कि पेपैल से कुछ सामान लेना और इसे मेरे पेज पर रखना है।

इस के लिए सही चीज का उपयोग कर रहा है? और यदि हां, तो मैं इस समस्या को कैसे प्राप्त करूं? मैं इसके लिए जावास्क्रिप्ट से दूर रहना चाहता हूं क्योंकि जावास्क्रिप्ट सक्षम उपयोगकर्ताओं के साथ ही उनके कार्ट को अद्यतन किया जाएगा।

कर्ल के लिए उपयोग करने वाला कोड नीचे है, post_data एक सरणी है जिसे मैंने बनाया है और फिर key_ valuering में key-value जोड़े को पढ़ा है।

//Set cURL Options 
curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 
curl_setopt($curl_connection, CURLOPT_USERAGENT, 
    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($curl_connection, CURLOPT_MAXREDIRS, 20); 

//Set Data to be Posted 
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 

//Execute Request 
curl_exec($curl_connection); 

उत्तर

2

शायद एक हैडर बयान

<?php 
header ("Location: https://www.paypal.com/"); 

यह अगर ब्राउज़र paypal के लिए किसी भी राज्य (सत्र) की जानकारी में उत्तीर्ण होना निर्भर करता है काम कर सकते हैं के साथ कर्ल गठबंधन करने के लिए प्रयास करें। यह सत्र जानकारी आपके कर्ल कॉल में एकत्र की जाती है, लेकिन दुर्भाग्यवश ब्राउज़र पर इसे पास करने का कोई तरीका नहीं है। तो अगर आपको राज्य को बनाए रखने की जरूरत है, तो यह काम नहीं करेगा।

कर्ल सर्वर की तरफ काम करता है। यह आपके ब्राउज़र को प्रभावित नहीं करेगा। CURLOPT_FOLLOWLOCATION बस कर्ल को यह मानने के लिए निर्देश देता है कि उदाहरण के लिए पेपैल इसे ऊपर वर्णित जैसा हैडर जैसा भेजता है। ब्राउज़र को कुछ करने के लिए निर्देश देने का एकमात्र तरीका है ऊपर दिए गए HTTP शीर्षलेख या आपके HTML प्रतिक्रिया में किसी प्रकार के मेटा टैग के साथ प्रतिक्रिया देना।

<META HTTP-EQUIV="refresh" CONTENT="10;URL=https://www.paypal.com/"> 

एक विकल्प के रूप में, paypal एक रीडायरेक्ट समारोह है कि, जब लेन-देन समाप्त हो गया है, वापस अपने सर्वर पर रीडायरेक्ट करेगा प्रदान नहीं करता है। यदि ऐसा है तो इस कॉलबैक के दौरान कार्ड स्थिति बदल दें और पूरे कर्ल प्रक्रिया को छोड़ दें?

+0

धन्यवाद, मुझे उम्मीद थी कि मुझे पेपैल से कॉलबैक में ऐसा नहीं करना पड़ेगा, मैं कार्ट की स्थिति निर्धारित करना चाहता था क्योंकि यह पेपैल पर जाता है और जब वह वापस आता है तो सटीक प्रगति का ट्रैक रख सकता है और मदद कर सकता है किसी भी त्रुटि को ठीक करने के साथ, बीमार कुछ http शीर्षलेख सेट करने का प्रयास करें और देखें, लेकिन मुझे इसे कॉलबैक में करना होगा। मैंने अभी माना है कि एक फॉर्म स्वत: सबमिट करना और कार्रवाई का पालन करना आसान होगा। – cast01

+0

मुझे लगता है कि आप अभी भी उन उपयोगकर्ताओं के लिए कर सकते हैं जिनमें जावास्क्रिप्ट सक्षम है।उन लोगों के लिए जिनके पास जावास्क्रिप्ट सक्षम नहीं है केवल कॉलबैक का उपयोग किया जाता है, लेकिन उन (बहुमत) जिनके लिए जावास्क्रिप्ट सक्षम है, आप अजाक्स कॉल में 'ऑफ-टू-पेपैल' ध्वज सेट कर सकते हैं और 'पूर्ण' सेट कर सकते हैं। कॉलबैक में ध्वज। –

1

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

+0

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

+0

फिर फ़ॉर्म को स्वतः सबमिट करने के लिए आपको जावास्क्रिप्ट की एक पंक्ति की आवश्यकता होगी। अन्यथा, आपका सर्वर रीडायरेक्ट नहीं कर सकता है और पेपैल को एक ही फॉर्म में एक फॉर्म सबमिट कर सकता है। – zaf

संबंधित मुद्दे