recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment fournir les exigences en matière de politique/extension de l'API SOAP dans le client SOAP

<p>Je dois me connecter à une API Soap... J'ai utilisé l'API Soap plusieurs fois maintenant, mais comme 99 % des API sont au repos maintenant, je ne les ai pas utilisées depuis plusieurs années</p> ; <p>Lorsque j'appelle l'API à l'aide du client Soap, j'obtiens </p> <pre class="brush:php;toolbar:false;">SOAP-ERROR : analyse WSDL : extension WSDL requise inconnue 'http://schemas.xmlsoap.org/ws/2004/09/policy'</ pré> <p>Ainsi, lorsque j'ouvre l'adresse wsdl dans le navigateur (login/mot de passe protégé), je peux voir ces lignes dans la sortie XML</p> <pre class="brush:php;toolbar:false;"><wsdl:definitions xmlns:p1="urn:haixin:all2crm" xmlns:wsp="http://schemas.xmlsoap.org/ ws/2004/09/policy" "http://schemas.xmlsoap.org/wsdl/" name="SI_USBPC_REQUEST" targetNamespace="urn:haixin:all2crm"> <wsdl:documentation/> <wsp:UsingPolicy wsdl:required="true"/> <wsp:Politique wsu:Id="OP_SI_USBPC_REQUEST"/></pre> <p>Où je l'ai</p> <pre class="brush:php;toolbar:false;"><wsp:Policy> <wsp:PolicyReference URI="#OP_SI_USBPC_REQUEST"/> </wsp:Politique></pre> <p>Lorsque je recherche cette erreur, je ne trouve qu'une seule ressource sur l'ensemble d'Internet où la réponse est de désactiver l'exigence de stratégie, qui est : <code><wsp:UsingPolicy wsdl:required="false "/> </code> mais je ne possède pas l'API, donc lorsque je recherche le nom de la stratégie <code>OP_SI_USBPC_REQUEST</code> il n'y a pas de problème, je n'obtiens aucun résultat, donc je suppose ceci est défini par le propriétaire de l'API. Certains noms personnalisés</p> <p>Ma question est donc la suivante : dois-je établir la politique et la joindre à la demande du client Soap ? Quel est le lien entre la stratégie et les extensions, car j'obtiens une erreur d'extension manquante, mais si je désactive l'exigence de stratégie, elle disparaît </p> <p>Y a-t-il un endroit où je peux télécharger l'extension ? Quel est le format... dois-je les ajouter à la demande du client Soap ? </p> <p>Ou est-ce quelque chose qui devrait être installé sur le serveur ? Si j'ajoute l'extension d'une manière ou d'une autre, l'erreur disparaîtra-t-elle parce que j'ai ajouté le nom d'utilisateur/mot de passe à l'appel de l'API, ou est-ce juste la première étape et je devrais ensuite gérer les exigences de la politique ?</p> <p>Au fait, j'utilise php pour appeler l'API, voici mon code</p> <pre class="brush:php;toolbar:false;">$options = [ 'login' => 'mlogin', 'mot de passe' => 'mon mot de passe', ]; $client = new SoapClient("http://domain:port/dir/wsdl/?p=sa/92130e1ffa97338ba2d1fc026567031d" , $options );</pre> <p>Si je télécharge le fichier XML, désactive l'exigence d'un fichier local et utilise cette adresse de fichier dans le client Soap, puis-je utiliser ce fichier pour communiquer avec l'API ? (Je crois comprendre que le XML ne contient aucune donnée réelle, c'est juste l'interface/définition du client Soap et je ne peux pas utiliser de fichier local pour parler à l'API en ligne, ou peut-être que je me trompe ?) < ;/p>
P粉511896716P粉511896716455 Il y a quelques jours587

répondre à tous(1)je répondrai

  • P粉916553895

    P粉9165538952023-08-30 11:31:46

    Le message "Extension WSDL requise inconnue" signifie que SoapClient a trouvé un élément en externe wsdl:required 属性设置为 true pour l'espace de noms WSDL (Comme vous pouvez le voir ici).

    Donc, pour éviter cette erreur, une solution consiste à remplacer wsdl:required 属性设置为 false.

    Il est tout à fait possible de télécharger un fichier WSDL, de le modifier et d'utiliser une copie locale. Assurez-vous simplement d'utiliser Chemin absolu, comme indiqué ici.

    À propos, « politique » dans ce contexte fait référence à la spécification WS-Policy.

    répondre
    0
  • Annulerrépondre