无法使用 PHP 7 XML-RPC 访问 Odoo External API - 拒绝访问,未捕获致命错误 Ripcord_TransportException
Cannot access to Odoo External API using PHP 7 XML-RPC - Access Denied, Fatal error Uncaught Ripcord_TransportException
我想在我的网站上使用 Odoo 的外部 API,使用 PHP 7.
就像我的 httpdocs 中 Odoo's documentation, I've placed the Ripcord library 中所说的那样。
我也在我的服务器上激活了XML RPC扩展,OpenSSL已经激活,网站甚至secured(地址栏中有锁图标)。
我想在购买许可证之前使用 Odoo 演示试用版 进行测试。因此,在我的 PHP 代码中,我放置了与我用来连接 my Odoo demo account.
相同的 username/password
1°) 但我得到 faultCode
和 faultString
(拒绝访问)
$url = 'https://lgb-test.odoo.com'; // Odoo Demo Trial
$db = 'lgb-test';
$username = 'johndoe@mywebsiteexample.com'; // Same Email as the one to connect to https://lgb-test.odoo.com/web/login
$password = 'mypasswordexample'; // Same Password as the one to connect to https://lgb-test.odoo.com/web/login
require_once('ripcord/ripcord.php');
$common = ripcord::client($url.'/xmlrpc/2/common');
$uid = $common->authenticate($db, $username, $password, array());
echo('UID:');
var_dump($uid);
echo('<br/>');
$models = ripcord::client("$url/xmlrpc/2/object");
$partners = $models->execute_kw(
$db,
$uid,
$password,
'res.partner',
'search',
array(
array(
array('is_company', '=', true)
)
)
);
echo('RESULT:<br/>');
foreach ($partners as $partner) {
echo 'partner=['.$partner.']<br/>';
}
echo('VAR_DUMP:<br/>');
var_dump($partners);
输出:
UID:bool(false)
RESULT:
partner=[3]
partner=[Access Denied]
VAR_DUMP:
array(2) { ["faultCode"]=> int(3) ["faultString"]=> string(13) "Access Denied" }
2°) 当调用start()
方法时,我得到Fatal error: Uncaught Ripcord_TransportException: Could not access
require_once('ripcord/ripcord.php');
$info = ripcord::client('https://lgb-test.odoo.com/start/')->start();
echo 'hello';
输出:
Fatal error: Uncaught Ripcord_TransportException: Could not access https://lgb-test.odoo.com/start/ in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php:488 Stack trace: #0 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php(228): Ripcord_Transport_Stream->post('https://lgb-tes...', '<?xml version="...') #1 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/index.php(10): Ripcord_Client->__call('start', Array) #2 {main} thrown in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php on line 488
(可能有类似的帖子,但有点模糊:
.
)
所以,我仍然不知道真正的问题是什么。
有什么想法吗?
1°) 在寻找解决方案一段时间后,我最终决定购买一些模块,而不是使用 Odoo Demo帐号。
所以,我刚刚更改了新数据库的凭据,并且 为特定 URL 打开了 8069 端口。它奏效了:)
代码:
$url = 'https://thedatabasename.odoo.com'; // Edited here. Opening the 8069 port was the last step to make it work :)
$db = 'thedatabasename'; // Edited here
$username = 'usernameofthataccount'; // Edited here
$password = 'passwordofthataccount'; // Edited here
require_once('ripcord/ripcord.php');
$common = ripcord::client($url.'/xmlrpc/2/common');
$uid = $common->authenticate($db, $username, $password, array());
echo('UID:');
var_dump($uid);
echo('<br/>');
$models = ripcord::client("$url/xmlrpc/2/object");
$partners = $models->execute_kw(
$db,
$uid,
$password,
'res.partner',
'search',
array(
array(
array('is_company', '=', true)
)
)
);
echo('RESULT:<br/>');
foreach ($partners as $partner) {
echo 'partner=['.$partner.']<br/>';
}
echo('VAR_DUMP:<br/>');
var_dump($partners);
输出:
UID:int(2)
RESULT:
partner=[568]
partner=[570]
partner=[293]
partner=[378]
partner=[526]
VAR_DUMP:
array(193) { [0]=> int(568) [1]=> int(570) [2]=> int(293) [3]=> int(378) [4]=> int(526)}
2°) start( ) 方法 将无法工作 URL虽然
所以,我不确定 start( ) 方法是否适用于模拟账户以外的其他东西。
此外,Odoo 的支持告诉我不要在脚本中包含 URL 的“/start”部分。但是,无论有没有“/start”部分,它都不起作用。
代码:
require_once('ripcord/ripcord.php');
$info = ripcord::client('https://thedatabasename.odoo.com/start')->start(); // Even using the specific IP, this is ot working in my case
echo 'hello';
输出:
Fatal error: Uncaught Ripcord_TransportException: Could not access http://102.16.10.74:8069/start/ in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php:488 Stack trace: #0 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php(228): Ripcord_Transport_Stream->post('http://102.16.1...', '<?xml version="...') #1 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/index.php(11): Ripcord_Client->__call('start', Array) #2 {main} thrown in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php on line 488
我的结论是:
Odoo DEMO 对我不起作用,即使我按照此处的说明进行操作也是如此:
编辑:
1°) a/ 当我们手动安装时,我们可以得到一个 IP 地址(url 就像“http://xxx.xxx.xxx.xxx”)我们的 odoo 服务器到我们选择的不同主机服务器上。
1°) b/ 但是如果odoo服务器安装在Odoo的官方网站上(url就像“https://thedatabasename.odoo.com” ),我们没有 IP 地址。我设法打开 8069 端口 通过向我网站的网络主机支持 请求它。
因此,为了简单起见,我将“http://xxx.xxx.xxx.xxx”编辑为“https://thedatabasename.odoo.com”,对于 1°) b / :
$url = 'https://thedatabasename.odoo.com';
$db = 'thedatabasename';
我想在我的网站上使用 Odoo 的外部 API,使用 PHP 7.
就像我的 httpdocs 中 Odoo's documentation, I've placed the Ripcord library 中所说的那样。 我也在我的服务器上激活了XML RPC扩展,OpenSSL已经激活,网站甚至secured(地址栏中有锁图标)。
我想在购买许可证之前使用 Odoo 演示试用版 进行测试。因此,在我的 PHP 代码中,我放置了与我用来连接 my Odoo demo account.
相同的username/password
1°) 但我得到 faultCode
和 faultString
(拒绝访问)
$url = 'https://lgb-test.odoo.com'; // Odoo Demo Trial
$db = 'lgb-test';
$username = 'johndoe@mywebsiteexample.com'; // Same Email as the one to connect to https://lgb-test.odoo.com/web/login
$password = 'mypasswordexample'; // Same Password as the one to connect to https://lgb-test.odoo.com/web/login
require_once('ripcord/ripcord.php');
$common = ripcord::client($url.'/xmlrpc/2/common');
$uid = $common->authenticate($db, $username, $password, array());
echo('UID:');
var_dump($uid);
echo('<br/>');
$models = ripcord::client("$url/xmlrpc/2/object");
$partners = $models->execute_kw(
$db,
$uid,
$password,
'res.partner',
'search',
array(
array(
array('is_company', '=', true)
)
)
);
echo('RESULT:<br/>');
foreach ($partners as $partner) {
echo 'partner=['.$partner.']<br/>';
}
echo('VAR_DUMP:<br/>');
var_dump($partners);
输出:
UID:bool(false)
RESULT:
partner=[3]
partner=[Access Denied]
VAR_DUMP:
array(2) { ["faultCode"]=> int(3) ["faultString"]=> string(13) "Access Denied" }
2°) 当调用start()
方法时,我得到Fatal error: Uncaught Ripcord_TransportException: Could not access
require_once('ripcord/ripcord.php');
$info = ripcord::client('https://lgb-test.odoo.com/start/')->start();
echo 'hello';
输出:
Fatal error: Uncaught Ripcord_TransportException: Could not access https://lgb-test.odoo.com/start/ in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php:488 Stack trace: #0 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php(228): Ripcord_Transport_Stream->post('https://lgb-tes...', '<?xml version="...') #1 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/index.php(10): Ripcord_Client->__call('start', Array) #2 {main} thrown in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php on line 488
(可能有类似的帖子,但有点模糊:
所以,我仍然不知道真正的问题是什么。
有什么想法吗?
1°) 在寻找解决方案一段时间后,我最终决定购买一些模块,而不是使用 Odoo Demo帐号。
所以,我刚刚更改了新数据库的凭据,并且 为特定 URL 打开了 8069 端口。它奏效了:)
代码:
$url = 'https://thedatabasename.odoo.com'; // Edited here. Opening the 8069 port was the last step to make it work :)
$db = 'thedatabasename'; // Edited here
$username = 'usernameofthataccount'; // Edited here
$password = 'passwordofthataccount'; // Edited here
require_once('ripcord/ripcord.php');
$common = ripcord::client($url.'/xmlrpc/2/common');
$uid = $common->authenticate($db, $username, $password, array());
echo('UID:');
var_dump($uid);
echo('<br/>');
$models = ripcord::client("$url/xmlrpc/2/object");
$partners = $models->execute_kw(
$db,
$uid,
$password,
'res.partner',
'search',
array(
array(
array('is_company', '=', true)
)
)
);
echo('RESULT:<br/>');
foreach ($partners as $partner) {
echo 'partner=['.$partner.']<br/>';
}
echo('VAR_DUMP:<br/>');
var_dump($partners);
输出:
UID:int(2)
RESULT:
partner=[568]
partner=[570]
partner=[293]
partner=[378]
partner=[526]
VAR_DUMP:
array(193) { [0]=> int(568) [1]=> int(570) [2]=> int(293) [3]=> int(378) [4]=> int(526)}
2°) start( ) 方法 将无法工作 URL虽然
所以,我不确定 start( ) 方法是否适用于模拟账户以外的其他东西。
此外,Odoo 的支持告诉我不要在脚本中包含 URL 的“/start”部分。但是,无论有没有“/start”部分,它都不起作用。
代码:
require_once('ripcord/ripcord.php');
$info = ripcord::client('https://thedatabasename.odoo.com/start')->start(); // Even using the specific IP, this is ot working in my case
echo 'hello';
输出:
Fatal error: Uncaught Ripcord_TransportException: Could not access http://102.16.10.74:8069/start/ in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php:488 Stack trace: #0 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php(228): Ripcord_Transport_Stream->post('http://102.16.1...', '<?xml version="...') #1 /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/index.php(11): Ripcord_Client->__call('start', Array) #2 {main} thrown in /var/www/vhosts/mywebsiteexample.com/preprod.mywebsiteexample.com/ripcord/ripcord_client.php on line 488
我的结论是:
Odoo DEMO 对我不起作用,即使我按照此处的说明进行操作也是如此:
编辑:
1°) a/ 当我们手动安装时,我们可以得到一个 IP 地址(url 就像“http://xxx.xxx.xxx.xxx”)我们的 odoo 服务器到我们选择的不同主机服务器上。
1°) b/ 但是如果odoo服务器安装在Odoo的官方网站上(url就像“https://thedatabasename.odoo.com” ),我们没有 IP 地址。我设法打开 8069 端口 通过向我网站的网络主机支持 请求它。
因此,为了简单起见,我将“http://xxx.xxx.xxx.xxx”编辑为“https://thedatabasename.odoo.com”,对于 1°) b / :
$url = 'https://thedatabasename.odoo.com';
$db = 'thedatabasename';