Répondu

Aide à l'utilisation de l'API


Badge

Bonjour,

 

J’essaye désespérément de connecter notre CRM avec PennyLane via votre API.

 

Mon but:

  • Avoir les même clients sur le CRM que sur PennyLane.
  • Créer des factures grâce aux devis émis depuis mon CRM.
  • Voir l’avancé des paiements disponible sur PennyLane depuis mon CRM.

 

J’ai l’habitude d’utiliser les API en programmation mais je dois avouer que la votre est particulièrement capricieuse.

Problèmes :

  • Il m’est impossible de faire une requête depuis le front (via fetch ou axios en JS) à cause des CORS-POLICY. Je dois implémenter un middleware pour toutes mes requêtes, ce qui est long. Je peux comprendre qu’ils s’agissent d’un impératif de sécurité, mais cela n’est absolument pas avancé dans la documentation, et vous donnez même des exemples de code possible en JavaScript, qui ne marche du coup pas.
  • [Rencontré pour la création d’un custumer] J’utilise l’exemple de la documentation pour créer mon middleware en PHP (voir photo)
  • J’envoie via Javascript, à mon middleware mon objet Custumer formaté avec JSON.stringify() qui ressemble à ce dernier: 
    • "{\"customer\":{\"customer_type\":\"company\",\"name\":\"CYNO PRO\",\"address\":\"6 Rue Industrielle\",\"postal_code\":\"67310\",\"city\":\"Wasselonne\",\"country_alpha2\":\"FR\",\"recipient\":\"Fabrice Braun\",\"source_id\":1930,\"emails\":[\"accueil.mag.67@cyno-pro.com\"],\"payment_conditions\":\"custom\"}}"

    • (Soit l’exact même format que nécéssaire pour requêtes en PHP cURL)

  •  Pourtant, j’obtiens la réponse suivante:
    • "{\"message\":\"{\\\"customer_type\\\"=>\\\"company\\\", \\\"emails\\\"=>[\\\"accueil.mag.67@cyno-pro.com\\\"], \\\"name\\\"=>\\\"CYNO PRO\\\", \\\"payment_conditions\\\"=>\\\"custom\\\", \\\"source_id\\\"=>1930, \\\"postal_code\\\"=>\\\"67310\\\", \\\"recipient\\\"=>\\\"Fabrice Braun\\\", \\\"notes\\\"=>\\\"Keleve (1000€ Keleve) – Plus grande boutique bouffe/objet animaux de France. Juste échange par mail. Entretenir la relation commerciale (14/04)\\\", \\\"city\\\"=>\\\"Wasselonne\\\", \\\"address\\\"=>\\\"6 Rue Industrielle\\\", \\\"country_alpha2\\\"=>\\\"FR\\\", \\\"delivery_address\\\"=>\\\"\\\", \\\"phone\\\"=>\\\"\\\"} isn't one of in #/paths/~1api~1external~1v1~1customers/post/requestBody/content/application~1json/schema/properties/customer\"}"

 

L’objet customer semble bon car sinon j’ai une erreur plus conventionnel.

J’avoue arrivé au bout de toutes les idées possible de formatage de mon objet Customer. Et j’avou aussi être particulièrement perplexe de certains choix que vous avez faits pour votre API (pourquoi devoir utiliser JSON.stringify pour envoyer un objet ?)

 

Je suis à l’écoute de tout retour et vous remercie pour le temps que vous prendrez à me lire.

 

Très cordialement,

 

Tristan.

icon

Meilleure réponse par ALEXANDRE LEBHAR 27 September 2022, 15:24

Afficher l'original

2 commentaires

Bonjour, j’ai l’impression que l’objet devrait être envoyé directement en JSON (on voit dans le retour que les caractères spéciaux sont échappés 2 fois). Pouvez-vous réessayer en enlevant `.stringify()` ?

Badge

Bonjour Edouard et merci pour votre retour,

 

Au final il faut bien envoyer un objet JSON sous forme de string (en tout cas via mon MiddleWare PHP), format on ne peut plus surprenant. 

J’ai obtenue cette erreur (….isn't one of in #/paths/~1api~1external~1v1~1customers/post/requestBody/content/application~1json/schema/properties/customer\")  parce que mon source_id était sous forme de int et non de string. Une grossière erreur de ma part, qui aurait pu être résolue rapidement avec une réponse appropriée de l’API.

 

En outre, pour les personnes intéressées, il est également possible de contourner les CORS-POLICY en utilisant un middleWare déjà parfaitement construit: la documentation de PennyLane (pennylane.readme.io) ! 

Faille de sécurité, ou solution envisagé par PennyLane - sans pour autant être abordé dans la documention, quoi qu’il en soit, j’en profite :)

 

En espérant pouvoir aider les personnes se posant les mêmes questions.

 

Bien cordialement,

 

Réponse