This fork was created to make up for the lack of XMLRPC bundled with PHP 8.
Ripoo is a PHP7 XML-RPC client handler for Odoo. Forked from robroypt/odoo-client, itself using darkaonline/ripcord, Ripoo is a PSR-compliance edition of ripcord, the library used in example in the Odoo External API documentation for PHP.
This library is on GitHub.
This library should work with all versions of Odoo, at least between 8.0 and [14.0][9], Community & Enterprise Editions. I personnaly tested it only with 11.0 but their API is the same.
It can be used in all PHP frameworks, like Symfony, Laravel or Magento2.
If you find any incompatibilities, please create an issue or submit a pull request.
- Verified that this works with WordPress and Odoo 14.
See CHANGELOG.md
composer require Sage-Goddess/odoo-ripcord-8
- To update all your libraries included in your composer.json
composer update
- But if you want to update JUST this library :
composer update Sage-Goddess/odoo-ripcord-8
Add --with-dependencies
to also update others libraries used by this one.
- Instantiate a new client via instance itself :
use Ripoo\OdooClient;
$host = 'example.odoo.com:8080';
$db = 'example-database';
$user = 'user@email.com';
$password = 'yourpassword';
$client = new OdooClient($host, $db, $user, $password);
- Or you can instantiate new client via ClientFactory, to centralize configuration use good Design Patterns .
Basic sample for Magento2 :
class RipooClientProvider
{
private $clientFactory;
private $client;
private $scopeConfig;
function __construct(
\Ripoo\OdooClientFactory $clientFactory,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
) {
$this->clientFactory = $clientFactory;
$this->scopeConfig = $scopeConfig;
}
public function createClient() : \Ripoo\OdooClient
{
// TODO secure injections
$odooUrl = $this->scopeConfig->getValue('my/settings/odoo_url');
$odooDb = $this->scopeConfig->getValue('my/settings/odoo_database');
$odooUser = $this->scopeConfig->getValue('my/settings/odoo_user');
$odooPwd = $this->scopeConfig->getValue('my/settings/odoo_pwd');
$this->client = $this->clientFactory->create(
$host,
$odooDb,
$odooUser,
$odooPwd
);
return $this->client;
}
public function getClient() : \Ripoo\OdooClient
{
// You can force nenewing a Client based on createdAt
if (!$this->client) {
$this->client = $this->createClient();
}
return $this->client;
}
}
For the client to work you have to exclude the http://
and /xmlrpc/2
parts in the url. If you want to use another Odoo API, put it in the optional 5th parameter of constructor.
Getting version information:
$client->version();
There is no login/authenticate method. The client does authentication for you, that is why the credentials are passed as constructor arguments.
Search for records:
$criteria = [
['customer', '=', true],
];
$offset = 0;
$limit = 10;
$client->search('res.partner', $criteria, $offset, $limit);
Search and count records.
$criteria = [
['customer', '=', true],
];
$client->search_count('res.partner', $criteria);
Reading records:
$ids = $client->search('res.partner', [['customer', '=', true]], 0, 10);
$fields = ['name', 'email', 'customer'];
$customers = $client->read('res.partner', $ids, $fields);
Search and Read records:
$criteria = [
['customer', '=', true],
];
$fields = ['name', 'email', 'customer'];
$customers = $client->search_read('res.partner', $criteria, $fields, 10);
Creating records:
$data = [
'name' => 'John Doe',
'email' => 'foo@bar.com',
];
$id = $client->create('res.partner', $data);
Updating records:
// change email address of user with current email address foo@bar.com
$ids = $client->search('res.partner', [['email', '=', 'foo@bar.com']], 0, 1);
$client->write('res.partner', $ids, ['email' => 'baz@quux.com']);
// 'uncustomer' the first 10 customers
$ids = $client->search('res.partner', [['customer', '=', true]], 0, 10);
$client->write('res.partner', $ids, ['customer' => false]);
Deleting records:
$ids = $client->search('res.partner', [['email', '=', 'baz@quuz.com']], 0, 1);
$client->unlink('res.partner', $ids);
- Model
ir.models
will return a list of reachable models. - You can also use
erppeek
:
sudo pip install -U erppeek
erppeek --server=http://odoo.example.com -d your_db -u admin -p password
your_db >>> models()
MIT License. Copyright (c) 2022 Thomas Bondois with updates by Leo Fisher. See LICENSE file.