2008-09-19 11 views
5

को अग्रेषित उपयोगकर्ता मैं एक PHP अनुप्रयोग है कि में लिंक पर काम कर रहा हूँ। क्रेडिट कार्ड प्रसंस्करण कंपनी से "3 डी सुरक्षित" अनुरोधों को संभालने के लिए, मुझे उपयोगकर्ता को एक अलग वेबसाइट पर अग्रेषित करने की आवश्यकता है, जो पोस्ट किए गए फॉर्म की नकल कर रहा है। मैं cURL पुस्तकालयों का उपयोग करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि एक समस्या आई है। मेरा कोड निम्न है:पीएचपी :: अनुकरण <form method = "पोस्ट">, पेज

<?php 
$ch = curl_init(); 
// Set the URL 
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/'); 
// Perform a POST 
curl_setopt($ch, CURLOPT_POST, 1); 
// If not set, curl prints output to the browser 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
// Set the "form fields" 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
$output = curl_exec($ch); 
curl_close($ch); 
?> 

यह सब यूआरएल की सामग्री को पकड़ लेता है, और उपयोगकर्ता को कहीं भी आगे नहीं भेजता है। मैंने गूगलिंग की कोशिश की है और जितना संभव हो उतना पढ़ रहा हूं, लेकिन यह पता नहीं लगा सकता कि मैं क्या खो रहा हूं। कोई विचार? मैं एक HTML फॉर्म बनाना नहीं चाहता हूं जो स्वयं से स्वतः सबमिट कर लेता है अगर मैं इससे बच सकता हूं।

किसी भी मदद :-)

उत्तर

2

3 डी सुरक्षित एपीआई आप पृष्ठभूमि में अनुरोध करने के लिए अनुमति नहीं है के लिए धन्यवाद। आपको उपयोगकर्ता को 3 डी सुरक्षित साइट पर अग्रेषित करने की आवश्यकता है। अपने फॉर्म को स्वचालित रूप से सबमिट करने के लिए जावास्क्रिप्ट का उपयोग करें। यहां बताया गया है हमारे प्रदाता पता चलता है:

<html> 
    <head> 
     <title>Processing your request...</title> 
    </head> 
    <body OnLoad="OnLoadEvent();"> 
     <form name="downloadForm" action="<%=RedirURL%>" method="POST"> 
      <noscript> 
       <br> 
       <br> 
       <div align="center"> 
        <h1>Processing your 3-D Secure Transaction</h1> 
        <h2>JavaScript is currently disabled or is not supported by your browser.</h2><BR> 
        <h3>Please click Submit to continue the processing of your 3-D Secure transaction.</h3><BR> 
        <input type="submit" value="Submit"> 
       </div> 
      </noscript> 
      <input type="hidden" name="PaReq" value="<%=PAREQ%>"> 
      <input type="hidden" name="MD" value="<%=TransactionID%>"> 
      <input type="hidden" name="TermUrl" value="<%=TermUrl%>"> 
     </form> 
     <SCRIPT LANGUAGE="Javascript"> 
      <!-- 
      function OnLoadEvent() { 
       document.downloadForm.submit(); 
      } 
      //--> 
     </SCRIPT> 
    </body> 
</html> 
0

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

0

एक और पेज PHP में आप एक header("Location: http://example.com/newpage"); भेज सकते हैं के लिए एक उपयोगकर्ता अनुप्रेषित करने के लिए। हालांकि, दुर्भाग्यवश आपके प्रोग्राम पुनर्निर्देशन के लिए सभी POST चर को हटाया जाना चाहिए (सुरक्षा कारणों से)। यदि आप उपयोगकर्ता के ब्राउज़र को किसी भिन्न URL पर POST अनुरोध भेजने का कारण बनना चाहते हैं, तो आपको एक फॉर्म बनाना होगा जो स्वयं सबमिट करता है। :(

0

मैं बहुत बल्कि, cURL की तरह पर्दे के पीछे कुछ का उपयोग करेंगे के रूप में मैं अपने उपयोगकर्ताओं गारंटी नहीं दे सकते जेएस सक्षम होगा, और एक रूप को प्रदर्शित करने का कारण बनता है कुछ अन्य समस्याओं मैं नहीं बल्कि बचने चाहते हैं। यह मेरी योजना बी है हालांकि ;-)

+0

आप 3 डी सुरक्षित "दृश्यों के पीछे" नहीं कर सकते हैं, क्योंकि उपयोगकर्ता को अग्रेषित करने की आवश्यकता है। ऊपर उल्लिखित समाधान यह करने का सबसे अच्छा तरीका है, कम से कम यही है कि हमारे भुगतान प्रदाता सोचते हैं। – neu242

0

आप जबकि अपनी पोस्ट चर संरक्षण नई वेब साइट पर रीडायरेक्ट करने fsockopen उपयोग कर सकते हैं()। इस here को पूरा करने के तरीके पर एक अच्छा ट्यूटोरियल है।

मामले में है कि वेब साइट इंटरनेट राक्षस द्वारा खाया जाता है, मैं नकल की और समारोह चिपकाया लेकिन मैं संदर्भ के लिए मूल वेब साइट देखने का सुझाव देते है।

function sendToHost($host,$method,$path,$data,$useragent=0) 
{ 
    // Supply a default method of GET if the one passed was empty 
    if (empty($method)) { 
     $method = 'GET'; 
    } 
    $method = strtoupper($method); 
    $fp = fsockopen($host, 80); 
    if ($method == 'GET') { 
     $path .= '?' . $data; 
    } 
    fputs($fp, "$method $path HTTP/1.1\r\n"); 
    fputs($fp, "Host: $host\r\n"); 
    fputs($fp,"Content-type: application/x-www-form- urlencoded\r\n"); 
    fputs($fp, "Content-length: " . strlen($data) . "\r\n"); 
    if ($useragent) { 
     fputs($fp, "User-Agent: MSIE\r\n"); 
    } 
    fputs($fp, "Connection: close\r\n\r\n"); 
    if ($method == 'POST') { 
     fputs($fp, $data); 
    } 

    while (!feof($fp)) { 
     $buf .= fgets($fp,128); 
    } 
    fclose($fp); 
    return $buf; 
} 
0

आह, अगर मैं गलत समझा गया है क्या cURL करता है, मुझे लगता है कि मैं के साथ जे एस ऑटो सबमिट करें जो HTML प्रपत्र के लिए समझौता करेंगे। मेरे लिए थोड़ा और काम करता है, लेकिन अगर यह एकमात्र तरीका है, तो मुझे इसे करना होगा।

सभी मदद के लिए धन्यवाद।

0

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

हां, 3 डीसीक्योर इत्यादि, एकीकृत करने के लिए काफी परेशान हैं, लेकिन वे वास्तविक सुरक्षा बढ़ावा प्रदान करते हैं - इसका उद्देश्य इसका उद्देश्य है।

0

शायद मुझे कुछ याद आ रहा है; ऐसा लगता है कि आप उपयोगकर्ता के डेटा को प्राप्त करने का प्रयास कर रहे हैं, इसे भुगतान प्रोसेसर में curl के माध्यम से अग्रेषित करें, और उसके बाद उपयोगकर्ता को कहीं भी रीडायरेक्ट करें। सही?

यदि हां, तो तुम सब करने की जरूरत है तो बस अपने कोड के अंत में इस डाल दिया है:

हैडर ("स्थान: http://www.yoursite.com/yoururl");

हालांकि, इसके लिए काम करने के लिए, स्क्रिप्ट क्लाइंट को कुछ भी नहीं भेज सकती है जबकि यह प्रसंस्करण हो रही है; इसका मतलब है कि स्क्रिप्ट को टेम्पलेट के बीच में निष्पादित नहीं किया जाना चाहिए, और दूसरा गॉचा खोलने वाले टैग से पहले फ़ाइल की शुरुआत में व्हाइटस्पेस है।

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

यह जेएस-मुक्त समाधान के लिए काम करना चाहिए।

+0

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

0

मैं पूरी तरह गलत हो सकता हूं लेकिन ऐसा लगता है जैसे आप प्रॉक्सी पैटर्न के समान कुछ करने की कोशिश कर रहे हैं।

मैंने अन्य साइटों के लिए समान पैटर्न लागू किए हैं जिनके साथ मैंने काम किया है और इसे सही होने के लिए थोड़ा सा टंकण करने की आवश्यकता है।

मैं RETURN_TRANSFER को TRUE पर सेट करता हूं ताकि आप पुनर्प्राप्त प्रतिक्रिया का विश्लेषण कर सकें और इसके आधार पर एप्लिकेशन स्तर क्रियाएं कर सकें।

http://en.wikipedia.org/wiki/Proxy_pattern

गुड लक।

0

मुझे भेजने के लिए sendToHost() फ़ंक्शन बहुत उपयोगी पाया गया है, लेकिन स्रोत में एक टाइपो है जो डीबग करने में कुछ समय लगाता है: सामग्री-प्रकार शीर्षलेख मान में 'form-' और 'urlencoded' के बीच एक स्थान होता है - चाहिए 'एप्लिकेशन/एक्स-www-form-urlencoded'

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