PHP SoapClient demande
Je suis en train d'envoyer une requête SOAP à un service de newsletter à l'aide de cette WSDL.
Voici mon PHP:
$client = new SoapClient($wsdl_url, array(
'login' => 'myusername',
'password' => 'mypassword',
'trace' => true
));
$client->AddSubscriber(
new SoapParam('MyFirstName', 'FirstName'),
new SoapParam('MyLastName', 'LastName'),
new SoapParam('[email protected]', 'Email')
);
Je suis l'exception:
End element 'Body' from namespace 'schemas.xmlsoap.org/soap/envelope/' expected. Found element 'LastName' from namespace ''. Line 2, position 156.
Voici ce que le service attend pour AddSubscriber:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<AuthHeader xmlns="admin.ekeryx.com">
<Username>string</Username>
<Password>string</Password>
<AccountID>string</AccountID>
</AuthHeader>
</soap:Header>
<soap:Body>
<AddSubscriber xmlns="admin.ekeryx.com">
<subscriber>
<ID>string</ID>
<FirstName>string</FirstName>
<LastName>string</LastName>
<Email>string</Email>
</subscriber>
<overwritable>boolean</overwritable>
</AddSubscriber>
</soap:Body>
</soap:Envelope>
Voici ce qui est d'être envoyées:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="tempuri.org/">
<SOAP-ENV:Body>
<ns1:AddSubscriber/>
<LastName>MyLastName</LastName>
<Email>[email protected]</Email>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Je ne suis pas très familier avec le SAVON, et j'ai été chercher de la documentation dans tous les sens, mais je n'arrive pas à trouver une très bonne référence pour ce que je suis en train de faire.
Toute orientation serait très apprécié!
Grâce. Pourriez-vous me donner un exemple? Je suis en train de regarder l'exemple sur le PHP du site qui indique:
<?php
class SOAPStruct {
function SOAPStruct($s, $i, $f)
{
$this->varString = $s;
$this->varInt = $i;
$this->varFloat = $f;
}
}
$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
'uri' => "http://test-uri/"));
$struct = new SOAPStruct('arg', 34, 325.325);
$soapstruct = new SoapVar($struct, SOAP_ENC_OBJECT, "SOAPStruct", "http://soapinterop.org/xsd");
$client->echoStruct(new SoapParam($soapstruct, "inputStruct"));
?>
Vous dites que je dois créer un Abonné de la classe PHP, affecter tous les vars $this->FirstName = $first_name
, etc... et puis le mettre dans un SoapVar avec le codage SOAP_ENC_OBJECT
? Comment puis-je mieux représenter l'abonné structure?
OriginalL'auteur | 2009-11-24
Vous devez vous connecter pour publier un commentaire.
Il y a deux Params abonné et overwriteable
De sorte que vous besoin de faire un peu plus complexe de la construction en utilisant SoapVar pour représenter la subsrciber structure.
http://www.php.net/manual/en/soapvar.soapvar.php
Devrait ressembler à quelque chose comme cela, je pense, bien que vous souhaitez vérifier le XSD contre le Soap:Body produit...
$type devrait être le type dans le fichier XSD/WSDL defeinition de l'api et $xsd est l'URI du fichier XSD.
Je pense que cela devrait le faire mais j'ai seulement utilisé natives de PHP libs une fois pour EBay (c'était un cauchemar haha) et qui a presque 2 ans donc je suis un peu rouillé.
OriginalL'auteur prodigitalson
Je suis tombé sur ce alors que la recherche d'une semblable réponse moi-même. Je crois que le problème que vous rencontrez est que le code suivant va passer le login et le mot de passe dans l'en-tête HTTP de ne pas l'en-tête SOAP
Je crois que c'est ce que vous êtes à la recherche pour
OriginalL'auteur mikedhart