मुझे एक ऐसा फ़ंक्शन चाहिए जो 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;
}
यह फ़ंक्शन अधिकांश समय काम करता है।
यह गलत है पर parse_str के बाद से "नोट [6] = aaaaa सामान = 2" सरणी में परिणाम होगा ('टिप्पणी' => सरणी (5 => 'aaaaa'), 'सामान' => 2) परिणाम सरणी होना चाहिए ('नोट' => 'aaaaa', 'stuff' => 2) –
नहीं। परिणाम 'सरणी' ('नोट' => 'aaaaa', 'stuff' => 2 'नहीं होना चाहिए' । इसके लिए आपके पास "नोट = aaaaa और stuff = 2" होगा। मेरा जवाब गलत नहीं है। मैंने भेजे गए कोड का उपयोग करके PHP में पेपैल भुगतान गेटवे एकीकरण बनाया है। यह एक महीने में हजारों लेनदेन को ठीक करता है। – Josh
स्ट्रिंग लंबाई उस स्ट्रिंग के बगल में निर्दिष्ट नहीं की जानी चाहिए। ऐसा नहीं है कि पेपैल एनवीपी कैसे काम करता है। उनके मैनुअल पढ़ें। "अनुरोध और प्रतिक्रिया यूआरएल-एन्कोडेड हैं" https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_NVPAPIOverview – Josh