2010-03-25 13 views
10

मुझे एक ऐसा फ़ंक्शन चाहिए जो PHP एरे में एनवीपी को सही ढंग से पार्स करेगा। मैं पेपैल द्वारा प्रदान किए गए कोड का उपयोग कर रहा हूं लेकिन यह तब काम नहीं करता जब स्ट्रिंग लम्बाई नाम के बगल में निर्दिष्ट की गई थी।PHP में पेपैल एनवीपी का विश्लेषण करने का सबसे अच्छा तरीका क्या है?

यहां मेरे पास अभी तक है।

private function parseNVP($nvpstr) 
{ 
    $intial=0; 
    $nvpArray = array(); 

    while(strlen($nvpstr)) 
    { 
     //postion of Key 
     $keypos= strpos($nvpstr,'='); 
     //position of value 
     $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr); 

     /*getting the Key and Value values and storing in a Associative Array*/ 
     $keyval=substr($nvpstr,$intial,$keypos); 
     $vallength=$valuepos-$keypos-1; 
     // check if the length is explicitly specified 
     if($braketpos = strpos($keyval,'[')) 
     { 
      // override value length 
      $vallength = substr($keyval,$braketpos+1,strlen($keyval)-$braketpos-2); 
      // get rid of brackets from key name 
      $keyval = substr($keyval,0,$braketpos); 
     } 
     $valval=substr($nvpstr,$keypos+1,$vallength); 
     //decoding the respose 
     if (isValidXMLString("<".urldecode($keyval).">".urldecode($valval)."</".urldecode($keyval).">")) 
      $nvpArray[urldecode($keyval)] =urldecode($valval); 
     $nvpstr=substr($nvpstr,$keypos+$vallength+2,strlen($nvpstr)); 
    } 
    return $nvpArray; 
} 

यह फ़ंक्शन अधिकांश समय काम करता है।

उत्तर

15

सबसे अच्छा तरीका parse_str फ़ंक्शन है। यह एक यूआरएलकोडेड स्ट्रिंग को एक PHP सरणी में पार्स करेगा।

तो अपने कोड लगेगा जैसे:

private function parseNVP($nvpstr) 
{ 
    $paypalResponse = array(); 
    parse_str($nvpstr,$paypalResponse); 
    return $paypalResponse; 
} 
+0

यह गलत है पर parse_str के बाद से "नोट [6] = aaaaa सामान = 2" सरणी में परिणाम होगा ('टिप्पणी' => सरणी (5 => 'aaaaa'), 'सामान' => 2) परिणाम सरणी होना चाहिए ('नोट' => 'aaaaa', 'stuff' => 2) –

+4

नहीं। परिणाम 'सरणी' ('नोट' => 'aaaaa', 'stuff' => 2 'नहीं होना चाहिए' । इसके लिए आपके पास "नोट = aaaaa और stuff = 2" होगा। मेरा जवाब गलत नहीं है। मैंने भेजे गए कोड का उपयोग करके PHP में पेपैल भुगतान गेटवे एकीकरण बनाया है। यह एक महीने में हजारों लेनदेन को ठीक करता है। – Josh

+2

स्ट्रिंग लंबाई उस स्ट्रिंग के बगल में निर्दिष्ट नहीं की जानी चाहिए। ऐसा नहीं है कि पेपैल एनवीपी कैसे काम करता है। उनके मैनुअल पढ़ें। "अनुरोध और प्रतिक्रिया यूआरएल-एन्कोडेड हैं" https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_NVPAPIOverview – Josh

0

एक बहुत मैं इस पाया है Googling:

function deformatNVP($nvpstr) { 

    $intial=0; 
    $nvpArray = array(); 


    while(strlen($nvpstr)){ 
     //postion of Key 
     $keypos= strpos($nvpstr,'='); 
     //position of value 
     $valuepos = strpos($nvpstr,'&') ? strpos($nvpstr,'&'): strlen($nvpstr); 

     /*getting the Key and Value values and storing in a Associative Array*/ 
     $keyval=substr($nvpstr,$intial,$keypos); 
     $valval=substr($nvpstr,$keypos+1,$valuepos-$keypos-1); 
     //decoding the respose 
     $nvpArray[urldecode($keyval)] =urldecode($valval); 
     $nvpstr=substr($nvpstr,$valuepos+1,strlen($nvpstr)); 
    } 
    return $nvpArray; 
} 

Source

मेरे पास इस कोड का स्वामित्व नहीं है और मैंने इसका परीक्षण नहीं किया है, इसलिए इसे देखभाल के साथ उपयोग करें।

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

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