Utilisation de connexions externes avec prise en charge OAuth

  • Rversion finale: Australia
  • Mis à jour 12 mars 2026
  • 3 minutes de lecture
  • Les connexions externes permettent aux enrichissements de récupérer des données à partir de systèmes tiers afin d’améliorer les configurations. Lorsque la sécurité nécessite OAuth, vous pouvez configurer une négociation OAuth à l’aide des informations d’identification du client pour vous authentifier et accéder aux API externes. Cette approche garantit un échange de données sécurisé pour des tâches telles que les mises à jour des prix ou le renseignement d’attributs pendant la configuration.

    Les enrichissements sont des scripts qui s’exécutent en dehors du moteur de règles et affectent les configurations dans CPQ. Il existe cinq types d’enrichissements qui peuvent être activés dans un CPQ environnement :

    • Lors de la configuration/reconfiguration
    • Sur réponse BOM
    • Validation
    • Tarifs d’extension de la liste déroulante
    • Sur demande

    Les connexions externes obtiennent les données d’une configuration à partir d’un CPQ élément extérieur CPQ. Les connexions externes ne peuvent être appelées qu’à partir d’un enrichissement.

    Parfois, une connexion externe nécessite une négociation OAuth pour des raisons de sécurité. Par exemple, vous devrez peut-être renseigner un champ ou un script d’enrichissement avec des données provenant d’une application tierce, telles que la tarification ou d’autres attributs.

    Pour définir une connexion externe OAuth, procédez comme suit :

    1. Définissez la connexion externe en visitant Admin > Utilitaires > connexions externes.

      Interface utilisateur des connexions externes

    2. Définissez votre jeton d’authentification.
      • Si la connexion externe appelle une API ouverte, aucun jeton d’authentification n’est nécessaire.
      • Si la connexion externe est Salesforce, CPQ s’occupe du jeton d’authentification pour vous.
      • Si l’authentification prend en charge un jeton de porteur, insérez le jeton de porteur fourni par le service externe à des fins d’authentification.
      • Si l’authentification nécessite une authentification OAuth :
        1. Sélectionner OAuth : flux des informations d’identification du client
        2. Insérer l’ID client
        3. Insérer le secret client
        4. Insérer le champ d’URL du jeton

        Entrées OAuth requises :

        Tableau 1. Entrées OAuth requises
        Champ Type Description Validations
        ID client (obligatoire) varchar (illimité) Contient l’ID client créé avec CPQ le serveur d’autorisation Non vide
        Secret client (obligatoire) varchar (illimité)

        Contient une référence tokenisée au secret client

        La valeur réelle est stockée dans le magasin secret GCP, sauf dans les environnements de développement, où la valeur est stockée directement

        Non vide
        URL de jeton (obligatoire) varchar (illimité)

        URL du serveur d’autorisation avec lequel échanger l’ID/le secret client contre un jeton

        Non vide
        Champ d’application (facultatif) varchar (illimité) Facultatif : peut être utilisé pour spécifier les champs d’application envoyés avec la demande de jeton Aucun
    3. Spécifiez les paramètres qui doivent être transmis au serveur de destination dans l’entrée Chemin d’accès.

      Les variables de paramètre peuvent être utilisées pour définir dynamiquement le chemin d’accès. Un exemple de chemin est /v4/latest/{{inputVariable}}, où {{inputVariable}} est la section du chemin qui est utilisée comme variable de paramètre.

      Si un chemin d’accès utilise une variable de paramètre, utilisez encodeURIComponent() dans votre script d’enrichissement lorsque vous définissez la variable. Pour obtenir un exemple, consultez le code suivant.

      let inputs = {"inputVariable":encodeURIComponent(cfgRequest.baseCurrency.value)};
      let results = External.exchangeRatesAPI(inputs);
      var resultsMap = results.body.rates;

      La ligne 1 définit la variable, en faisant référence à la variable de paramètre de notre connexion externe « inputVariable ». Un CPQ champ qui stocke les données souhaitées est encapsulé dans encodeURIComponent et termine le chemin inputVariable.

      Les lignes 2 et 3 déclenchent ensuite la connexion externe exchangeRatesAPI à l’aide de l’entrée définie. Un scripting supplémentaire est nécessaire pour affiner l’appel afin de récupérer les données souhaitées et de définir un champ, le cas échéant.

      Une limite de délai d’expiration est nécessaire. Nous suggérons 500 millisecondes comme point de départ. Si vous constatez que la connexion externe dépasse régulièrement cette limite, vous pouvez augmenter cette valeur. Toutefois, cela peut ralentir les performances de la configuration de l’utilisateur final.

      Le script d’enrichissement suivant utilise une connexion externe. Cet enrichissement de nomenclature interroge une API powerPricing avec des données client. Une fois la date de tarif spécifique au client récupérée à partir du service, l’enrichissement ajuste la tarification des enregistrements ProductList existants.

      var powerInputs = {"membershipCode":cfg.eCMembershipCode, "icp":cfg.eCICPNumber}; let powerResponse = External.powerPricing(powerInputs);
      
      let dailyCharge = 0; let ratesArr = [];
      
      if(powerResponse.status == 200) {
      
      for(var record of powerResponse.body) { if(record.chargeType == cfg.expectedUsage) {
      
      dailyCharge = record.dailyCharges; ratesArr = record.rates;
      
      }
      
      }
      
      for(var prod of ProductList) { if(prod.id=="electricBillEstimator") {
      
      let addedPrice = dailyCharge * cfg.serviceDurationInDays; prod.price = addedPrice;
      
      }
      
      if(prod.id=="Standard Rate" || prod.id=="Low Rate") { prod.price = dailyCharge;
      
      }
      
      }
      
      for(var rateVal of ratesArr) {
      
      ProductList.id = "Additional Charge Per KWH: " + rateVal.name; ProductList.quantity = 1;
      ductList.bomType="Manufacturing"; ProductList.orderNumber = 2;
      
      ProductList.price = rateVal.rate; ProductList.notes = rateVal.measure;
      ductList.parentProduct="electricBillEstimator"; ProductList.next();
      
      }
      
      }
      
      return ProductList;