В настоящее время я пытаюсь отправить запрос на мыло в веб-сервис от la poste
Вот что я вижу из их документации:
WSDL: https://ws.colissimo.fr/sls-ws/SlsServiceWS?wsdl
Мне интересна функция generateLabel.
Вотпример, приведенный в документации:
XML отправлено:
<generateLabelRequest>
<contractNumber>XXXX</contractNumber>
<password>XXXX</password>
<outputFormat>
<x>0</x>
<y>0</y>
<outputPrintingType>PDF_A4_300dpi</outputPrintingType>
<returnType />
</outputFormat>
<letter>
<service>
<productCode>A2P</productCode>
<depositDate>2015-12-23</depositDate>
<mailBoxPicking>false</mailBoxPicking>
<transportationAmount>1040</transportationAmount>
<totalAmount>1222</totalAmount>
<orderNumber>123456</orderNumber>
<commercialName>MONSITE.COM</commercialName>
<returnTypeChoice>2</returnTypeChoice>
</service>
<parcel>
<weight>1</weight>
<nonMachinable>false</nonMachinable>
<instructions>REMETTREAUGARDIEN</instructions>
<pickupLocationId>005737</pickupLocationId>
</parcel>
<customsDeclarations>
<includeCustomsDeclarations>1</includeCustomsDeclarations>
<contents>
<article>
<description>desc</description>
<quantity>1</quantity>
<weight>1</weight>
<value>12</value>
<hsCode>0102</hsCode>
<originCountry>FR</originCountry>
</article>
<category>
<value>2</value>
</category>
</contents>
</customsDeclarations>
<sender>
<senderParcelRef>refsenderXXX</senderParcelRef>
<address>
<companyName>sendercompany</companyName>
<lastName>dupont</lastName>
<firstName>fred</firstName>
<line0>etage</line0>
<line1>entrée</line1>
<line2>ligneprincipale</line2>
<line3>lieudit</line3>
<countryCode>FR</countryCode>
<city>paris</city>
<zipCode>75007</zipCode>
<phoneNumber>0123456789</phoneNumber>
<mobileNumber>0677777777</mobileNumber>
<doorCode1>12ZZ2</doorCode1>
<doorCode2>121FD</doorCode2>
<email>yy@ksite.fr</email>
<intercom>99009</intercom>
<language>FR</language>
</address>
</sender>
<addressee>
<addresseeParcelRef>12345</addresseeParcelRef>
<codeBarForReference>false</codeBarForReference>
<serviceInfo>serviceinfo</serviceInfo>
<promotionCode />
<address>
<companyName>compdest</companyName>
<lastName>martin</lastName>
<firstName>alain</firstName>
<line0>etage</line0>
<line1>entree</line1>
<line2>adresse</line2>
<line3>lieudit</line3>
<countryCode>FR</countryCode>
<city>paris</city>
<zipCode>75060</zipCode>
<phoneNumber>0133223345</phoneNumber>
<mobileNumber>0623456789</mobileNumber>
<doorCode1>3454</doorCode1>
<doorCode2>ZA22</doorCode2>
<email>dest@gg.fr</email>
<intercom>324RR</intercom>
<language>FR</language>
</address>
</addressee>
</letter>
</generateLabelRequest>
Согласно документации, этот запрос должен работать, но я получаю только ошибки.Я делаю тесты на PHP, а также с Почтальоном.
PHP:
<code>$url = 'https://ws.colissimo.fr/sls-ws/SlsServiceWS?wsdl';
$json = '{
"contractNumber": "XXXX",
"password": "XXXX",
"outputFormat": {
"x": "0",
"y": "0",
"outputPrintingType": "PDF_A4_300dpi",
"returnType": []
},
"letter": {
"service": {
"productCode": "CORE",
"depositDate": "2018-12-23"
},
"parcel": {
"weight": "0.1"
},
"sender": {
"senderParcelRef": "refsenderXXX",
"address": {
"companyName": "sendercompany",
"lastName": "dupont",
"firstName": "fred",
"line0": "etage",
"line1": "entrée",
"line2": "ligneprincipale",
"line3": "lieudit",
"countryCode": "FR",
"city": "paris",
"zipCode": "75007",
"phoneNumber": "0123456789",
"mobileNumber": "0677777777",
"doorCode1": "12ZZ2",
"doorCode2": "121FD",
"email": "yy@ksite.fr",
"intercom": "99009",
"language": "FR"
}
},
"addressee": {
"addresseeParcelRef": "12345",
"codeBarForReference": "false",
"serviceInfo": "serviceinfo",
"promotionCode": [],
"address": {
"companyName": "compdest",
"lastName": "martin",
"firstName": "alain",
"line0": "etage",
"line1": "entree",
"line2": "adresse",
"line3": "lieudit",
"countryCode": "FR",
"city": "paris",
"zipCode": "75060",
"phoneNumber": "0133223345",
"mobileNumber": "0623456789",
"doorCode1": "3454",
"doorCode2": "ZA22",
"email": "dest@gg.fr",
"intercom": "324RR",
"language": "FR"
}
}
}
}';
$result = $client->__soapCall("generateLabel", json_decode($json, true));
echo "<pre>".print_r($result, true)."
";
Я пропустил некоторые поля, которые не требуются. Я продолжаю получать этоошибка в PHP Fault occurred while processing
, и с Почтальоном, когда я пытаюсь отправить этот XML, я получаю этот ответ: No namespace on "generateLabel" element. You must send a SOAP request
РЕДАКТИРОВАТЬ: Решено, как @Pouch:
Вот мое решение, не очень чистое, так как я не использую мыльный клиент PHP, но оно работает (я получаю сгенерированный URL-адрес PDF-файла Laposte):
<?php
function sendXmlOverPost($url, $xml) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
function getBonRetour($contractNumber, $password){
$data = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sls="http://sls.ws.coliposte.fr">
<soapenv:Header/>
<soapenv:Body>
<sls:generateLabel>
<!--Optional:-->
<generateLabelRequest>
<contractNumber>'.$contractNumber.'</contractNumber>
<password>'.$password.'</password>
<outputFormat>
<outputPrintingType>PDF_A4_300dpi</outputPrintingType>
</outputFormat>
<letter>
<service>
<productCode>CORE</productCode>
<depositDate>2018-12-23</depositDate>
</service>
<parcel>
<weight>1</weight>
</parcel>
<sender>
<address><companyName>ESSAI ENTREPRISE</companyName><lastName>NOM ENTREPRISE</lastName><firstName>DUPONT</firstName><line0>etage</line0><line1>entrée</line1><line2>ligneprincipale</line2><line3>lieudit</line3><countryCode>FR</countryCode><city>VILLE</city><zipCode>00000</zipCode><phoneNumber>0123456789</phoneNumber><mobileNumber>0677777777</mobileNumber><doorCode1>12ZZ2</doorCode1><doorCode2>121FD</doorCode2><email>mail@mail.fr</email><intercom>99009</intercom><language>FR</language></address>
</sender>
<addressee><codeBarForReference>false</codeBarForReference><serviceInfo>serviceinfo</serviceInfo><promotionCode></promotionCode><address><companyName>compdest</companyName><lastName>martin</lastName><firstName>alain</firstName><line0>etage</line0><line1>entree</line1><line2>adresse</line2><line3>lieudit</line3><countryCode>FR</countryCode><city>paris</city><zipCode>75060</zipCode><phoneNumber>0133223345</phoneNumber><mobileNumber>0623456789</mobileNumber><doorCode1>3454</doorCode1><doorCode2>ZA22</doorCode2><email>dest@gg.fr</email><intercom>324RR</intercom><language>FR</language></address></addressee>
</letter>
</generateLabelRequest>
</sls:generateLabel>
</soapenv:Body>
</soapenv:Envelope>';
$rs = sendXmlOverPost("https://ws.colissimo.fr/sls-ws/SlsServiceWS?wsdl", $data);
preg_match('~<pdfUrl>([^{]*)</pdfUrl>~i', $rs, $link);
$link[1] = str_replace("amp;", "", $link[1]);
return $link[1];
}
print_r(getBonRetour("CONTRACT_NUMBER", "PASSWORD"));
?>