Créer un appel SOAP en utilisant PHP avec un corps XML
Je suis en train d'appeler une méthode de SAVON à l'aide de PHP.
Voici le code que j'ai:
$data = array('Acquirer' =>
array(
'Id' => 'MyId',
'UserId' => 'MyUserId',
'Password' => 'MyPassword'
));
$method = 'Echo';
$client = new SoapClient(NULL,
array('location' => 'https://example.com/ExampleWebServiceDL/services/ExampleHandler',
'uri' => 'http://example.com/wsdl', 'trace' => 1));
$result = $client->$method($data);
Voici la demande qu'il crée:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com/wsdl" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:Echo>
<param0 xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">Acquirer</key>
<value xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">Id</key>
<value xsi:type="xsd:string">mcp</value>
</item>
<item>
<key xsi:type="xsd:string">UserId</key>
<value xsi:type="xsd:string">tst001</value>
</item>
<item>
<key xsi:type="xsd:string">Password</key>
<value xsi:type="xsd:string">test</value>
</item>
</value>
</item>
</param0>
</ns1:Echo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Et voici ce que j'ai voulez la demande pour ressembler à:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.com/wsdl" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<Echo>
<Acquirer>
<Id>MyId</Id>
<UserId>MyUserId</UserId>
<Password>MyPassword</Password>
</Acquirer>
</Echo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
source d'informationauteur greggles
Vous devez vous connecter pour publier un commentaire.
Il ya un couple de méthodes pour résoudre ce problème. Le moins hackiest et presque ce que vous voulez:
Cela vous arrive le code XML suivant:
Qui est presque exactement ce que vous voulez, sauf pour l'espace de noms sur le nom de la méthode. Je ne sais pas si c'est un problème. Si oui, vous pouvez pirater encore plus loin. Vous pourriez mettre le
<Echo>
balise dans la chaîne XML par la main et ont la SoapClient pas définir la méthode en ajoutant'style' => SOAP_DOCUMENT,
au tableau d'options comme ceci:Cette résultats dans la suite de demande XML:
Enfin, si vous voulez jouer avec SoapVar et SoapParam objets, vous pouvez trouver une bonne référence dans ce commentaire dans le manuel PHP: http://www.php.net/manual/en/soapvar.soapvar.php#104065. Si vous obtenez ce travail, s'il vous plaît laissez-moi savoir, j'ai lamentablement échoué.
Tout d'abord, vous devez spécifier que vous souhaitez utiliser Document Littéral style:
Ensuite, vous avez besoin pour transformer vos données en un SoapVar; j'ai écrit une simple transformation de la fonction:
Ensuite, vous appliquez cette fonction de transformation sur vos données:
Enfin, vous appelez le service à la transmission des Données de paramètre: