10
我需要一个将NVP正确解析为PHP数组的函数。我一直在使用贝宝提供的代码,但是它在名称旁边指定字符串长度时不起作用。在PHP中解析PayPal NVP的最佳方式是什么?
这是我到目前为止。
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) 结果应该是数组('note'=>'aaaaa','stuff'=> 2) – 2010-03-31 17:29:16
否。结果不应该是'array('note'=>'aaaaa','stuff'=> 2)' 。因为你有“note = aaaaa&stuff = 2”。我的回答没有错。我使用我发送的代码在PHP中建立了一个paypal支付网关集成。它每月处理数千笔交易就好了。 – Josh 2010-03-31 19:19:27
字符串长度不应该在字符串旁边指定。这不是PayPal NVP的工作原理。阅读他们的手册。 “请求和响应是URL编码的”https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_NVPAPIOverview – Josh 2010-03-31 19:22:05