Web services Soap et xml
Posté : 04 mai 2015, 14:50
Bonjour, a tous
Je suis face a un problème depuis quelques jours
J'utilise un web service je dois lui envoyer une requête soap afin que celui-ci me retourne un xml avec un lien de téléchargement d'un fichier pdf
Cependant avec le code que j'ai écrit l'url du lien de téléchargement s'affiche mais il se retrouve dans __getLastResponse, parmis des erreurs.
Si je supprime les lignes
Le lien ne s'affiche plus
Et j'ai cette erreur qui s'affiche tout le temps
code de mon client
Alors j'ai essayé de passer du xml dans mon code :
Et maintenant j'ai cette erreur :
message: SOAP-ERROR: Encoding: object has no 'productCode' property
Je suis face a un problème depuis quelques jours
J'utilise un web service je dois lui envoyer une requête soap afin que celui-ci me retourne un xml avec un lien de téléchargement d'un fichier pdf
Cependant avec le code que j'ai écrit l'url du lien de téléchargement s'affiche mais il se retrouve dans __getLastResponse, parmis des erreurs.
Si je supprime les lignes
Code : Tout sélectionner
} catch (SoapFault $exception) {
echo '<br>erreur, trace: '.$exception->getTraceAsString();
echo '<br>message: '. $exception->getMessage();
// Affiche ce qui est reçu..
echo $client->__getLastResponse();
die ();
}Le lien ne s'affiche plus
Et j'ai cette erreur qui s'affiche tout le temps
Code : Tout sélectionner
erreur, trace: #0 C:\wamp\www\etiquette2.php(41): SoapClient->__call('generateLabel', Array) #1 C:\wamp\www\etiquette2.php(41): SoapClient->generateLabel(Array) #2 {main}
message: looks like we got no XML document-code de mon client
Code : Tout sélectionner
<?php
include('dump.php');
// première étape : désactiver le cache lors de la phase de test
ini_set('soap.wsdl_cache_enabled', '0');
//On doit passer le fichier WSDL du Service en paramètre de l'objet SoapClient
$wsdlPath = 'https://ws.colissimo.fr/sls-ws/SlsServiceWS?wsdl';
try {
$client = new SoapClient($wsdlPath, array('trace' => true, 'exceptions' => true));
// bloc format attendu par generateLabel - PDF_A4_300dpi
$format = array('outputPrintingType' => 'PDF_A4_300dpi');
// Liste des sous-blocs attendues par Letter - Retour Colissimo - International CORI
$service = array('productCode' => 'CORE', 'depositDate' => '2015-12-23');
$parcel = array('weight' => '1.0' );
// bloc : coordonnées de l'expediteur
$addressexp = array('lastName' => 'nom', 'firstName' => 'prenom', 'line2' => ' 1 rue du bellay', 'countryCode' => 'FR', 'city' => 'ville', 'zipCode' => '95000');
// bloc : coordonnées du destinataire
$addressdest = array('companyName' => 'Compan', 'lastName' => 'nom', 'firstName' => 'prenom','line2' => '4 rue de la paix', 'countryCode' => 'FR', 'city' => 'Paris', 'zipCode' => '000');
$senders = array('address' => $addressexp);
$addressee = array('addresseeParcelRef' => '12345', 'codeBarForReference' => 'true', 'serviceInfo' => 'service info', 'address' => $addressdest);
$letter = array('service' => $service , 'parcel' => $parcel, 'sender' => $senders , 'addressee' => $addressee);
$pars = array('contractNumber' => 'XXXXX', 'password' => 'XXXXX', outputFormat' => $format, 'letter' => $letter);
$response = $client->generateLabel(array('generateLabelRequest' => $pars));
} catch (SoapFault $exception) {
echo '<br>erreur, trace: '.$exception->getTraceAsString();
echo '<br>message: '. $exception->getMessage();
// Affiche ce qui est reçu..
echo $client->__getLastResponse();
die ();
}
?>Alors j'ai essayé de passer du xml dans mon code :
Code : Tout sélectionner
<?php
//On passe le fichier WSDL du service en paramètre de l'objet SoapClient
$wsdlPath = 'https://ws.colissimo.fr/sls-ws/SlsServiceWS?wsdl';
try {
$client = new SoapClient($wsdlPath, array('trace' => true, 'exceptions' => true));
// bloc format attendu par generateLabel - PDF_A4_300dpi
// $format = array('outputPrintingType' => 'PDF_A4_300dpi');
$xml = new XmlWriter();
$xml->openMemory();
$xml->startDocument('1.0', 'UTF-8');
$xml->startElement('letter');
$xml->startElement('service');
$xml->writeElement('productCode', 'CORE');
$xml->writeElement('depositDate', '2015-12-23');
$xml->endElement();
$xml->startElement('parcel');
$xml->writeElement('weight', '1.0');
$xml->endElement();
$xml->startElement('sender');
$xml->writeElement('lastName', 'nom');
$xml->writeElement('firstName', 'prenom');
$xml->writeElement('line2', '1 rue du bellay');
$xml->writeElement('countryCode', 'FR');
$xml->writeElement('city', 'ville');
$xml->writeElement('zipCode', '95000');
$xml->endElement();
$xml->startElement('addressee');
$xml->writeElement('adresseeParcelRef', '12345');
$xml->writeElement('codeBarForReference', 'true');
$xml->writeElement('serviceInfo', 'courrier');
$xml->startElement('address');
$xml->writeElement('companyName', 'entreprise');
$xml->writeElement('lastName', 'dupont');
$xml->writeElement('firstName', 'jean');
$xml->writeElement('line2', ''4 rue de la paix');
$xml->writeElement('countryCode', 'FR');
$xml->writeElement('city', 'paris');
$xml->writeElement('zipCode', '75000');
$xml->endElement();
$xml->endElement();
$xml->endElement();
// bloc format attendu par generateLabel - PDF_A4_300dpi
$format = array('outputPrintingType' => 'PDF_A4_300dpi');
$letter = array('service' => $xml , 'parcel' => $xml, 'sender' => $xml , 'addressee' => $xml);
$pars = array('contractNumber' => 'XXXXX', 'password' => 'XXXXX', 'outputFormat' => $format, 'letter' => $letter);
$response = $client->generateLabel(array('generateLabelRequest' => $pars));
} catch (SoapFault $exception) {
echo '<br>erreur, trace: '.$exception->getTraceAsString();
echo '<br>message: '. $exception->getMessage();
// Affiche ce qui est reçu..
echo $client->__getLastResponse();
die ();
}
?>Et maintenant j'ai cette erreur :
message: SOAP-ERROR: Encoding: object has no 'productCode' property