0

我一直在使用 PHP Rest SDK,我已经能够登录/注销并收集所有可能的用户信息,但是如果我将范围更改为包含“地址”,或者只是将数组留空,因此它默认为 sdks 默认值,我收到以下错误:

致命错误:在 /Users/ /Sites/ /framework.**.dev/private/modules/paypal/vendor/paypal/sdk-core-php/lib/PayPal/Common/PPModel.php 中找不到类“PPOpenIdAddress”第 51 行

如果我从范围中删除地址字段,然后一切运行顺利。

添加地址前的范围:

public function createLogin(){
    try {
        $_array = array('openid', 'email', 'profile', 'phone', 'https://uri.paypal.com/services/paypalattributes', 'https://uri.paypal.com/services/expresscheckout');
        return PPOpenIdSession::getAuthorizationUrl(PAYPALURL, $_array, $this->_clientid,  $this->getApiContext());
    } catch (PayPal\Exception\PPConnectionException $_exception) {
        $this->_errormsg = $_exception->getMessage();
        $this->_errordata = $_exception->getData();

        return false;
    }
}

添加地址后的作用域:

public function createLogin(){
    try {
        $_array = array('openid', 'email', 'profile', 'address', 'phone', 'https://uri.paypal.com/services/paypalattributes', 'https://uri.paypal.com/services/expresscheckout');
        return PPOpenIdSession::getAuthorizationUrl(PAYPALURL, $_array, $this->_clientid,  $this->getApiContext());
    } catch (PayPal\Exception\PPConnectionException $_exception) {
        $this->_errormsg = $_exception->getMessage();
        $this->_errordata = $_exception->getData();

        return false;
    }
}

不知道出了什么问题

4

2 回答 2

2

找到了解决方案。似乎这里实现的反射使用 PHPDOC 来检索类名。getAddress()对我来说,在 PPOpenIdUserinfo.php中找到 getter 方法就足够了。我将其更改@return PPOpenIdAddress@return PayPal\Auth\Openid\PPOpenIdAddress, (我基本上在类旁边添加了命名空间)。我希望 PayPal api 的一些专家可以证实这一点。

于 2014-02-22T19:04:43.933 回答
0

将第 45 行 PayPal\Common\PPModel.php 上的函数替换为下面的函数。

public function fromArray($arr) {

    foreach($arr as $k => $v) {
        if(is_array($v)) {
            $clazz = PPReflectionUtil::getPropertyClass(get_class($this), $k);


            if($clazz == 'PPOpenIdAddress'){
                $clazz = 'PayPal\Auth\Openid\PPOpenIdAddress';
            }
            if(PPArrayUtil::isAssocArray($v)) {
                $o = new $clazz();
                $o->fromArray($v);
                $this->__set($k, $o);
            } else {
                $arr =  array();        
                foreach($v as $nk => $nv) {
                    if(is_array($nv)) {
                        $o = new $clazz();
                        $o->fromArray($nv);
                        $arr[$nk] = $o;
                    } else {
                        $arr[$nk] = $nv;
                    }
                }
                $this->__set($k, $arr);
            } 
        }else {
            $this->$k = $v;
        }
    }
}
于 2014-06-23T18:31:33.587 回答