我一直在使用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;
}
}
不确定哪里出错
答案 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;
}
}
}