2010-03-16 4 views
7

Il y a beaucoup de questions sur PHP et SOAP. Mais je ne trouve pas de réponse sur ma situation.PHP ET SOAP. Changer l'enveloppe

Donc. J'utilise PHP SoapClient et WSDL pour cela. Objet envoie ceci:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.site.com"><SOAP-ENV:Body> 

Mais je dois ceci:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body> 

question. Comment je peux le faire avec la classe PHP standard SoapClient?

Merci.

+0

Je pense que cela signifie que votre WSDL est incorrect? Avez-vous créé le morceau de serveur SOAP également? – Clutch

+0

Non, WSDL est correct, car une autre bibliothèque (contrôle ActiveX pour C#) fonctionne bien et envoie un véritable espace de noms. Je ne peux pas changer le serveur SOAP. J'ai besoin de l'utiliser pour accéder aux fonctions de service. – Oleg

+0

Si vous pensez que cela cause un problème de communication avec votre service SOAP, cela peut être une hypothèse incorrecte. Votre erreur peut être liée à des propriétés manquantes dans votre message, comme cela m'est récemment arrivé. – bytespider

Répondre

5

je recherche réponse php.net

<?php 
class MSSoapClient extends SoapClient { 

    function __doRequest($request, $location, $action, $version) { 
     $namespace = "http://tempuri.com"; 

     $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1); 
     $request = preg_replace('/<ns1:(\w+)/', '<$1', $request); 
     $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request); 

     // parent call 
     return parent::__doRequest($request, $location, $action, $version); 
    } 
} 

$client = new MSSoapClient(...); 
?> 

Ce changement de code Envelope demande. Et besoin de serveur ASP SOAP.