Introduction aux appels d’API d’exécution
Les API d’exécution ou buyside sont utilisées pour créer, mettre à jour et enregistrer des configurations.
CPQ Les API sont divisées en deux catégories : les API d’exécution et les API d’administration. Dans cet article, nous présentons les API d’exécution.
Les API d’exécution sont utilisées pour créer, lire, mettre à jour et supprimer des configurations et sont les mêmes que celles utilisées dans le configurateur de l’utilisateur CPQ final. Elles sont également communément appelées API « buyside ».
Tous les appels d’API suivent ce format d’URL de base : https://<votrelocataire>.<secteur>.logik.io/api/. Dans cette URL, yourTenant représente votre nom de locataire répertorié CPQ unique, et le secteur est le secteur dans lequel se trouve votre CPQ environnement.
Si vous êtes un utilisateur de Salesforce, vous pouvez trouver votre URL de locataire en cliquant sur Configurer dans votre compte Salesforce. Dans la zone Recherche rapide, recherchez ou cliquez sur Paramètres personnalisés, puis cliquez sur Gérer. L’URL de votre locataire s’affichera.
Tous les appels d’API d’exécution nécessitent une authentification par jeton de porteur à l’aide d’un jeton unique disponible dans le client d’exécution. Ils nécessitent également que l’URL d’origine configurée dans le client d’exécution apparaisse dans l’en-tête de la demande.
Pour vous authentifier, collectez le jeton de porteur et l’URL d’origine à partir d’Admin CPQ → Utilities → du client d’exécution. Pour chaque appel d’API dans un Postman, ajoutez l’en-tête suivant :
Key: Origin
Value: <yourOrigin>
Dans l’onglet Autorisation de Postman ou de votre outil API, sélectionnez Jeton de porteur, puis saisissez le jeton unique que vous avez copié à partir de l’administrateur CPQ .
Appels API d’exécution de base
- L’appel de configuration initial démarre le processus de configuration en transmettant l’ID du produit configurable et renvoie un UUID de configuration pour une utilisation ultérieure.
Exemple (cURL) :
curl -X POST https://<yourTenant>.<sector>.logik.io/api/ \ -H "Authorization: Bearer <yourBearerToken>" \ -H "Origin: <yourOrigin>" \ -H "Content-Type: application/json" \ -d '{ "sessionContext": { "stateful": true }, "partnerData": { "product": { "configuredProductId": "{{configProductId}}", } }, "fields": [] }'Exemple (réponse) :
{ "configurationId": "{uuid}"Vous utilisez également cet appel d’API pour la reconfiguration, en fournissant un UUID de configuration précédemment enregistré dans le corps POST.
Exemple de reconfiguration (cURL) :
curl -X POST https://<yourTenant>.<sector>.logik.io/api/ \ -H "Authorization: Bearer <yourBearerToken>" \ -H "Origin: <yourOrigin>" \ -H "Content-Type: application/json" \ -d '{ "sessionContext": { "stateful": true }, "partnerData": { "product": { "configuredProductId": "{{configProductId}}", "configurationAttributes": { "LGK__ConfigurationId__c": "{{uuid}}" } } }, "fields": [] }' - L’appel de configuration de mise à jour met à jour une configuration existante en transmettant l’UUID de configuration et les valeurs de champ souhaitées, et renvoie tous les champs possibles et leurs valeurs.
Exemple (cURL) :
curl -X PATCH https://<yourTenant>.<sector>.logik.io/api/{uuid} \ -H "Authorization: Bearer <yourBearerToken>" \ -H "Origin: <yourOrigin>" \ -H "Content-Type: application/json" \ -d '{ "fields": { "color": "blue", "size": "large" } }'Exemple (réponse) :
{ "fields": { "color": "blue", "size": "large", "price": "$100" } } - L’appel get BOM transmet l’UUID de configuration et récupère la nomenclature (BOM) pour la configuration. Renvoie la nomenclature actuelle de la configuration.
Exemple (cURL) :
curl -X GET https://<yourTenant>.<sector>.logik.io/api/{uuid}/bom \ -H "Authorization: Bearer <yourBearerToken>" \ -H "Origin: <yourOrigin>"Exemple (réponse) :
{ "bom": [ { "item": "componentA", "quantity": 2 }, { "item": "componentB", "quantity": 1 } ] } - L’appel d’enregistrement enregistre la configuration dans CPQ. Cela garantit que l’UUID de configuration pourra être utilisé et reconfiguré à l’avenir.
Ce processus remplit de manière asynchrone nos objets personnalisés, nos ensembles de données de champ de configuration et nos éléments de ligne de configuration dans Salesforce.
Exemple (cURL) :
curl --location --request PATCH 'https://mpanigrahi-demo.demo01.logik.io/api/6d0ef6fd-4c88-44f3-a296-b03421c369c6' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Origin: https://mpanigrahi-demo.demo01.logik.io' \ --header 'Authorization: <<RUNTIME TOKEN>>' \ --header 'Cookie: LGKSESSION=NDA5OWJmNmEtNDhhOS00YTc4LTk3ODktZTg0OGYyOGIwMjZk' \ --data '{"fields":[{"variableName":"name_d1","value":"megha","dataType":"text"}],"responseState":{"setPagination":{"collections":{"pageSize":10,"pageNumber":0},"fields":{"pageSize":10,"pageNumber":0},"componentTypes":{"pageSize":10,"pageNumber":0}},"defaultPagination":{"pageSize":10,"pageNumber":0},"searchValues":{}}}'Pour en savoir plus sur l’exemple de code, consultez la documentation de référence complète de l’API :
Exemple JSON
info:
_postman_id: e8370e58-ff12-4662-adac-3e35052b59ba name: Sample Runtime Calls
schema: https://schema.getpostman.com/json/collection/v2.1.0/collection.json item:
name: 'Logik: Initial Configure' event:
listen: test script:
exec:
"var jsonData = JSON.parse(responseBody);\r"
pm.collectionVariables.set("configId", jsonData.uuid); type: text/javascript
request: auth:
type: bearer bearer:
- key: token
value: '{{logikAccessToken}}' type: string
method: POST header:
key: content-type value: application/json type: text
key: Origin
value: '{{logikOriginHeader}}' type: text
body:
mode: raw
raw: " {\r\n \"sessionContext\": {\r\n \"stateful\": true\r\n },\r\n \"partnerData\": {\r\n \"product options:
raw:
language: json
url:
raw: '{{logik}}' host:
- '{{logik}}' response: []
name: 'Logik: Update Configuration' request:
auth:
type: bearer bearer:
key: token
value: '{{logikAccessToken}}' type: string
method: PATCH header:
key: content-type value: application/json type: text
key: Origin
value: '{{logikOriginHeader}}' type: text
body:
mode: raw
raw: "{\r\n \"fields\": [\r\n {\"variableName\":\"juBool1\",\"value\":\"True\"},\r\n {\"variableName\":\"juBool2\",\"value options:
raw:
language: json
url:
raw: '{{logik}}{{configId}}' host:
- '{{logik}}{{configId}}' response: []
name: '(Optional): Logik: Retrieve BOM' request:
auth:
type: bearer bearer:
key: token
value: '{{logikAccessToken}}' type: string
method: GET header:
key: content-type value: application/json type: text
key: Origin
value: '{{logikOriginHeader}}' type: text
url:
raw: '{{logik}}{{configId}}/bom' host:
'{{logik}}{{configId}}' path:
bom response: []
name: 'Logik: Save' event:
listen: test script:
exec:
"var jsonData = JSON.parse(responseBody);\r"
"pm.collectionVariables.set(\"logikTotal\", jsonData.total);\r"
pm.collectionVariables.set("logikLineItems", jsonData.products); type: text/javascript
request: auth:
type: bearer bearer:
- key: token
value: '{{logikAccessToken}}' type: string
method: PATCH header:
key: content-type value: application/json type: text
key: Origin
value: '{{logikOriginHeader}}' type: text
body:
mode: raw
raw: "{\r\n \"fields\": []\r\n}" options:
raw:
language: json
url:
raw: '{{logik}}{{configId}}?save=true' host:
'{{logik}}{{configId}}' query:
key: save value: 'true'
response: []
name: '(Optional): Logik: Reconfigure' event:
listen: test script:
exec:
"var jsonData = JSON.parse(responseBody);\r"
pm.collectionVariables.set("configId", jsonData.uuid); type: text/javascript
request: auth:
type: bearer bearer:
- key: token
value: '{{logikAccessToken}}' type: string
method: POST header:
key: Origin
value: '{{logikOriginHeader}}' type: default
key: Authorization
value: Bearer Armqrz8jv-1C05mcWmcrDnXZlV9bbOTmGg type: default
disabled: true body:
mode: raw
raw: "{\r\n \"sessionContext\": {\r\n \"stateful\": true\r\n },\r\n \"partnerData\": {\r\n \"product\": {\r\n \"configuredProductId\" options:
raw:
language: json
url:
raw: '{{logik}}' host:
- '{{logik}}' response: []
Pour plus d’informations sur CPQ les API, consultez la présentation suivante en huit diapositives :