Comment récupérer vos contacts dans Odoo ?

BizzCardz offre l’opportunité d’exporter tous vos contacts. Ainsi, vous pourrez aisément les importer dans vos applications tierces. Nous allons aborder dans cet article le cas d’Odoo. Nous signalons que cet article s’adresse spécifiquement aux développeurs car il s’agit d’interaction entre deux plateforme en passant par des API. Nous utiliserons dans cet article le langage PHP.

La communication avec cette partie de l’API Odoo se fait via le protocole XML-RPC. Cela suppose que vous devez disposer de ce protocole dans le langage utilisé. Dans le cas de PHP, ce protocole n’est pas activé par défaut. Il faudra alors suivre la documentation officielle de PHP pour rendre fonctionnel ce support : https://www.php.net/manual/fr/book.xmlrpc.php.

Pour commencer, nous allons d’abord nous connecter à notre espace Admin BizzCardz à cette adresse : https://admin.bizzcardv2-last-eu.hidora.com/fr pour obtenir une clé API. Si vous avez déjà une clé API, vous n’êtes pas concerné par cette étape. Dans le cas contraire, cliquez sur le lien Paramètres/Import et export.

Sur la page de l’export et import, cliquez sur le bouton + Générer une nouvelle clé API. Dans le formulaire qui s’affiche, renseignez le nom de la clé API et cliquez sur le bouton Générer la clé. 

Une fois enregistré, vous avez un message de succès et la valeur de votre clé API. Attention! cette valeur ne sera affichée qu’une seule fois donc, veuillez à cette étape sauvegarder votre clé quelque part.

Nous allons maintenant récupérer nos contacts BizzCardz


$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://admin.bizzcardv2-last-eu.hidora.com/fr/api/vcard/export/",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_COOKIE => "Path=%2F",
  CURLOPT_HTTPHEADER => [
    "Accept: application/json",
    "Authorization: Api-Key jsk28faE.hbbdV02aVN0lBI+GB09urlBJIOM36LJ9",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  print_r($response);
}

Si tout se passe bien, BizzCardz nous renvoie un jeu de résultats en format json qui peut se présenter comme suit :

{
  "count": 3,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 1,
      "first_name": "Vincent",
      "last_name": "MOULE",
      "company_position": "Directeur",
      "email": "vincent@monsite.com",
      "phone_number": "+32 (0) 60 30 80 50",
      "linkedin": "",
      "hobbies": "",
      "education": "",
      "company_name": "Ma société",
      "company_activity_type": "Informatique",
      "company_website": "https://www.monsite.com/",
      "company_postal_address": "8, rue Pierre-Paul Duménil",
      "company_postal_code": "7000",
      "company_city": "Mons",
      "company_country": "BE",
      "company_email": "contact@monsite.com",
      "company_phone_number": "+32 60 30 80 50",
      "scan_picture": null,
      "scan_notes": null,
      "scan_vocal_note": null,
      "meta_scanned_at": "",
      "meta_scanned_by": "",
      "meta_scan_type": ""
    },
    {
      "id": 2,
      "first_name": "Phylippe",
      "last_name": "Yoss",
      "company_position": "manager",
      "email": "phylippe@monsite.com",
      "phone_number": "+32 (0) 70 40 70 30",
      "linkedin": "",
      "hobbies": "",
      "education": "",
      "company_name": "Ma société",
      "company_activity_type": "Informatique",
      "company_website": "https://www.monsite.com/",
      "company_postal_address": "8, rue Pierre-Paul Duménil",
      "company_postal_code": "7000",
      "company_city": "Mons",
      "company_country": "BE",
      "company_email": "contact@monsite.com",
      "company_phone_number": "+32 (0) 70 40 70 30",
      "scan_picture": null,
      "scan_notes": null,
      "scan_vocal_note": null,
      "meta_scanned_at": "",
      "meta_scanned_by": "",
      "meta_scan_type": ""
    },
    {
      "id": 2,
      "first_name": "Judith",
      "last_name": "Vampour",
      "company_position": "Gérante",
      "email": "judith@monsite.com",
      "phone_number": "+32 (0) 60 60 70 50",
      "linkedin": "",
      "hobbies": "",
      "education": "",
      "company_name": "Ma société",
      "company_activity_type": "Informatique",
      "company_website": "https://www.monsite.com/",
      "company_postal_address": "8, rue Pierre-Paul Duménil",
      "company_postal_code": "7000",
      "company_city": "Mons",
      "company_country": "BE",
      "company_email": "contact@monsite.com",
      "company_phone_number": "+32 (0) 60 60 70 50",
      "scan_picture": null,
      "scan_notes": null,
      "scan_vocal_note": null,
      "meta_scanned_at": "",
      "meta_scanned_by": "",
      "meta_scan_type": ""
    }
  ]
}

Ce qui nous intéresse, ce sont les contacts donc la clé results. Aussi, comme les enregistrements sont créés à l’aide d’un tableau au niveau d’Odoo, nous allons convertir dans un premier temps le jeu de résultats en tableau et prendre juste les contacts.

Ensuite, nous devons bien matcher les champs. En effet, au niveau d’Odoo, le nom du contact est représenté par le champ name alors qu’au niveau de BizzCardz, il s’agit de 2 champs à savoir first_name (prénom) et last_name (nom). Nous allons donc concaténer les deux champs pour avoir le name. Un nouveau tableau sera donc formé pour être conforme aux champs d’Odoo.

Ainsi, dans notre code PHP ci-dessous, nous allons remplacé la ligne 29 par celle-ci :

$tab = json_decode($response, TRUE);
$resultats = $tab['results'];

$tabOdoo = [];
foreach($resultats as $resultat){
    $tabOdoo[] = ['name' => $resultat['first_name'].' '.$resultat['last_name'], 'email' => $resultat['email']];
}

Maintenant que nous avons notre tableau Odoo ($tabOdoo), nous allons ajouter les contacts via l’API Odoo. Le code ci-dessous :

$url = 'https://monsite.odoo.com'; //URL de votre compte Odoo
$url_auth = $url . '/xmlrpc/2/common'; //URL pour l'authentification
$url_exec = $url . '/xmlrpc/2/object'; //URL pour exécuter un model par exemple

$db = 'monsite'; //Base de données
$username = 'identifiant@monsite.com'; //l'email de connexion à votre compte Odoo
$password = '123c9f88f562e67b8524k9b6sxcf189020524m69'; //Une clé API remplaçant le mot de passe

// Class Ripcord recommandé par odoo : https://github.com/poef/ripcord
require_once('ripcord.php');

// Authentification de l'utilisateur
$common = ripcord::client($url_auth);
$uid = $common->authenticate($db, $username, $password, array());

//Ajout des contacts
$models = ripcord::client($url_exec);

foreach($tabOdoo as $contactOdoo){
  $models->execute_kw($db, $uid, $password, 'res.partner', 'create', array($contactOdoo));
}
BizzCardz Team
AboutBizzCardz Team