我一直在使用 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;
}
}
}