在PHP中解析Paypal NVP的最佳方法是什么?

在PHP中解析Paypal NVP的最佳方法是什么?,php,paypal-nvp,Php,Paypal Nvp,我需要一个函数,将正确解析到PHP数组NVP。我一直在使用paypal提供的代码,但在名称旁边指定字符串长度时,它不起作用 这是我到目前为止所拥有的 private function parseNVP($nvpstr) { $intial=0; $nvpArray = array(); while(strlen($nvpstr)) { //postion of Key $keypos= strpos($nvpstr,'=');

我需要一个函数,将正确解析到PHP数组NVP。我一直在使用paypal提供的代码,但在名称旁边指定字符串长度时,它不起作用

这是我到目前为止所拥有的

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;
}
专用函数parseNVP($nvpstr)
{
$initial=0;
$nvpArray=array();
while(strlen($nvpstr))
{
//钥匙位置
$keypos=strpos($nvpstr,'=');
//价值定位
$valuepos=strpos($nvpstr,’&')?strpos($nvpstr,’&'):strlen($nvpstr);
/*获取键和值并存储在关联数组中*/
$keyval=substr($nvpstr,$intial,$keypos);
$vallength=$valuepos-$keypos-1;
//检查是否明确指定了长度
如果($braketpos=strpos($keyval,['))
{
//覆盖值长度
$vallength=substr($keyval,$braketpos+1,strlen($keyval)-$braketpos-2);
//从键名中去掉括号
$keyval=substr($keyval,0,$braketpos);
}
$valval=substr($nvpstr,$keypos+1,$vallength);
//解码响应
if(isValidXMLString(“.urldecode($valval)。”)
$nvpArray[urldecode($keyval)]=urldecode($valval);
$nvpstr=substr($nvpstr,$keypos+$vallength+2,strlen($nvpstr));
}
返回$nvpArray;
}
此函数大部分时间都可以使用。

最好的方法是使用此函数。它将URL编码的字符串解析为PHP数组

因此,您的代码如下所示:

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

通过谷歌搜索,我发现:

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;
}


我没有这段代码,也没有测试过它,所以请小心使用。

这是不正确的,因为对“note[6]=aaaaaaa stuff=2”进行语法分析将导致数组('note'=>array(5=>aaaaaaa'),'stuff'=>2)结果应该是数组('note'=>aaaaaaa','stuff'=>2)否。结果不应该是
array('note'=>aaaaaaaaaaaaa','stuff'=>2)
。因此,你应该选择“note=aaaaaaa&stuff=2”。我的答案没有错。我用我发送的代码在PHP中构建了一个paypal支付网关集成。它每月处理数千笔交易。字符串长度不应该在字符串旁边指定。paypal NVP不是这样工作的。阅读他们的手册。“请求和响应是URL编码的”note[6]=aaaaaaa&stuff=2的结果应该是数组('note'=>aaaaaaa','stuff'=>2)。你所使用的99%的时间都有效。手册很好,但有时与代码不匹配。我知道PayPal有时会发送指定长度的NVP,通常发生在客户在PayPal页面上输入注释时。我多年来一直在使用生产中提供的代码,没有任何问题。。。