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

Mik*_*rov 10 php paypal-nvp

我需要一个能够正确解析NVP到PHP数组的函数.我一直在使用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;
}
Run Code Online (Sandbox Code Playgroud)

此功能大部分时间都有效.

Jos*_*osh 15

最好的方法是parse_str函数.它会将URLencoded字符串解析为PHP数组.

所以你的代码看起来像:

private function parseNVP($nvpstr)
{
  $paypalResponse = array();
  parse_str($nvpstr,$paypalResponse);
  return $paypalResponse;
}
Run Code Online (Sandbox Code Playgroud)

  • 不.结果不应该是`array('note'=>'aaaaa','stuff'=> 2)`.因为你有"note = aaaaa&stuff = 2".我的回答并不正确.我使用我发送的代码在PHP中构建了一个paypal支付网关集成.它每月处理成千上万的交易就好了. (4认同)
  • 不应在字符串旁边指定字符串长度.这不是PayPal NVP的工作原理.阅读他们的手册."请求和响应是URL编码的"https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_NVPAPIOverview (2认同)
  • note [6] = aaaaa&stuff = 2的结果应该是数组('note'=>'aaaaa','stuff'=> 2).你使用的是99%的时间.手册很棒,但有时它们与代码不匹配.我知道PayPal有时会发送指定长度的NVP这一事实通常发生在客户在PayPal页面上输入注释时. (2认同)
  • 多年来我一直在使用生产中提供的代码,没有任何问题...... (2认同)