PayPal PHP Rest SDK 买家地址 PPOpenIdAddress



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

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

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

添加地址前的范围:

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 (PayPalExceptionPPConnectionException $_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 (PayPalExceptionPPConnectionException $_exception) {
        $this->_errormsg = $_exception->getMessage();
        $this->_errordata = $_exception->getData();
        return false;
    }
}

不确定出了什么问题

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

替换

第 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 = 'PayPalAuthOpenidPPOpenIdAddress';
            }
            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;
        }
    }
}

最新更新