如何解决无法使用 PHP 7 XML-RPC 访问 Odoo 外部 API - 访问被拒绝,致命错误未捕获 Ripcord_TransportException
我想在我的网站上使用 Odoo 的外部 API,使用 PHP 7。
就像 Odoo's documentation 中所说的那样,我已将 Ripcord library 放在我的 httpdocs 中。 我还在我的服务器上激活了 XML RPC 扩展,OpenSSL 已经激活,网站甚至安全(有锁图标地址栏)。
我想在购买许可证之前使用 Odoo Demo Trial 来测试一下。因此,在我的 PHP 代码中,我使用了与用于连接到 my Odoo demo account 的 username/password
相同的 faultCode
。
1°) 但我得到 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,'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" }
输出:
start()
2°) 当调用 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}}
(也许有类似的帖子,但有点模糊:
How to use PHP7 Ripcord library to get Odoo data? .
Odoo + Ripcord PHP XMLRPC library: "Could not access https://demo.odoo.com/start" )
所以,我仍然不知道真正的问题是什么。
有什么想法吗?
解决方法
1°) 寻找解决方案一段时间后,我最终决定购买一些模块,而不是使用 Odoo 演示帐户。
因此,我只是更改了新数据库的凭据,并且为该特定 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,'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/ 当我们手动将 odoo 服务器安装到不同的主机上时,我们可以获得一个 IP 地址(url 类似于“http://xxx.xxx.xxx.xxx”)我们选择的服务器。
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';
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。