запрос мыла php colissimo - PullRequest
0 голосов
/ 21 мая 2018

В настоящее время я пытаюсь отправить запрос на мыло в веб-сервис от 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"));


?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...