Je crée un service Web utilisant des méthodes de savon natif de PHP5. Tout s'est bien passé jusqu'à ce que j'essaye de gérer l'authentification à l'aide d'en-têtes de savon.
Je pouvais facilement trouver comment ajouter le nom d'utilisateur / mot de passe aux en-têtes de savon, côté client fort>: p> $myclient = new SoapClient($wsdl, $options);
$login = new SOAPHeader($wsdl, 'email', 'mylogin');
$password = new SOAPHeader($wsdl, 'password', 'mypassword');
$headers = array($login, $password);
$myclient->__setSOAPHeaders($headers);
4 Réponses :
SOAPCLIENT utilise le nom d'utilisateur et le mot de passe pour implémenter l'authentification HTTP. L'authentification de base et de la Digest est la prise en charge ( Voir la source ) p>
Pour plus d'informations sur la mise en œuvre d'une authentification HTTP dans PHP sur le côté serveur, voir Ce manuel Page . P>
Si vous ne souhaitez pas utiliser l'authentification HTTP, voir Cet utilisateur -Contrié échantillon sur la page manuelle de Soapserver qui montre comment vous pourriez passer des informations d'identification dans un en-tête d'utilisateur. P>
J'essaie d'attraper des en-têtes à l'aide de la bibliothèque de savon, donc sans authentification HTTP. Et j'ai essayé l'échantillon de contribué par l'utilisateur que vous avez mentionné, mais cela ne semble que fonctionner lorsque je suis pas i> à l'aide d'une définition de la WSDL. Peut-être que je dois définir les en-têtes dans la WSDL, je vais continuer à chercher. Merci pour votre contribution Tho.
Oui, vous devez définir les en-têtes dans le fichier WSDL.
J'ai eu une excellente réponse de Osarogabriel. blogspot.com/2014/04/... . Vérifiez-le, il explique très clairement comment faire cela.
Vous pouvez essayer de lire des données post brutes. en $ xml Vous aurez toute la demande XML de SOAP. p> SOPAPERVER ne contient pas de méthodes pour lire les en-têtes de savon . P> -
EDIT: L'exemple de contribution du manuel ne semble pas fonctionner, la méthode de manutention d'en-tête ne s'appelle jamais p> p>
Vous devez utiliser une version actuelle de PHP. Avec PHP 5.2.4, j'ai eu le même problème, mais avec 5.2.17 ou 5.3.8, le rappel de la manipulation des en-têtes de savon (décrit dans la samle apportée par l'utilisateur sur php.net) est appelé et tout fonctionne assez bien. P >
Avec une version PHP moderne, il est pas em> nécessaire pour ajouter quelque chose à la WSDL car les en-têtes font partie de la spécification de l'enveloppe SOAP. L'exemple de l'exemple de l'utilisateur cité par Paul Dixon ne fonctionne pas tout simplement parce que l'en-tête n'est pas usertoken em> strong> comme écrit dans le commentaire, l'en-tête est sécurité em> strong>, c'est donc le Nom La méthode de la classe devrait avoir. Ensuite, vous obtenez un bel objet STDCLASCASS avec une propriété d'objet STDCLass Usertanks qui possède un nom d'utilisateur et un mot de passe comme propriétés. P> code d'exemple (à insérer dans une classe PHP qui implémente le service SOAP: P> public function Security( $header ){
$this->Authenticated = true; // This should be the result of an authenticating method
$this->Username = $header->UsernameToken->Username;
$this->Password = $header->UsernameToken->Password;
}