PayPal PHP Rest SDK买家地址PPOpenIdAddress

时间:2013-11-13 02:58:12

标签: php paypal paypal-sandbox

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

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

如果我从作用域中删除了地址字段,那么一切都运行顺畅。

添加地址前的范围:

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

不确定哪里出错

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;
        }
    }
}