php soap curl multiparted запрос для запроса с MTOM

385
24 ноября 2017, 08:00

Есть один SOAP-запрос. В него надо вложить attachment с помощью MTOM\xop, делается это с помощью сообщения в таком виде:

… другие транспортные заголовки ... 
Content-Type: multipart/related; boundary=MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812;
type="application/xop+xml"; start="
<0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>"; start-info="text/xml"; charset=UTF-8
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: application/xop+xml; charset=UTF-8; type="text/xml";
content-transfer-encoding: binary
content-id:<0.urn:uuid:0FE43E4D025F0BF3DC11582467646813@apache.org>
<?xml version="1.0" encoding="UTF-8"?>
   <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
      <soapenv:Header/>
      <soapenv:Body>
         <sendImage xmlns="http://org/apache/axis2/jaxws/sample/mtom">
            <input>
            <imageData><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org"/></imageData>
            </input>
         </sendImage>
      </soapenv:Body>
   </soapenv:Envelope>


--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812
content-type: text/plain
content-transfer-encoding: binary
content-id: 
         <1.urn:uuid:0FE43E4D025F0BF3DC11582467646811@apache.org>
… двоичные данные …
--MIMEBoundaryurn_uuid_0FE43E4D025F0BF3DC11582467646812--

Сам запрос я создаю подобным кодом:

$headers = array(
            "Content-type: text/xml;charset=\"utf-8\"",
            "Accept: text/xml",
            "Cache-Control: no-cache",
            "Pragma: no-cache",
            "SOAPAction: \"urn:SendRequest\"",
            "Content-length: ".strlen($xml),
        );
        $xml = 'Сюда подставляется корректная ХМЛка'
        $soap_do = curl_init();
        curl_setopt($soap_do, CURLOPT_URL,            'http://smev3-n0.test.gosuslugi.ru:7500/smev/v1.1/ws' );
        curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($soap_do, CURLOPT_TIMEOUT,        10);
        curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
        curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($soap_do, CURLOPT_POST,           true );
        curl_setopt($soap_do, CURLOPT_POSTFIELDS,    $xml);
        curl_setopt($soap_do, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($soap_do, CURLOPT_USERPWD, '' . ":" . '');
        $result = curl_exec($soap_do);
        $err = curl_error($soap_do);

Внимательные читатели могут заметьить что эт овсе тот же многострадальный СМЭВ3. Что добавляет сложности так как это работа с гос. софтом. Вообще данный запрос проходит хорошо и правильно. Но вот к нему надо прикрутить аттач. Всякие модули на пыху и левые библиотеки крайне нежелательны, особенно именно модули. Так как не факт что заказчик пропустит добавление левого софта. Т.е. никаких Wo\WSF, и BeSimple. Очень желательно решение которое просто позволит создать мультипарт запрос и отправить его. Слать в теле в бейз64 тоже не вариант (в даном случае это так и делается но часть запросов в СМЭВ3 возможны только в виде аттача с МТОМ).

READ ALSO
Помогите перенести строки в массиве на новую строку в phpword

Помогите перенести строки в массиве на новую строку в phpword

Добрый день! Помогите перенести строки в phpword, 3 дня уже маюсь с этим вопросом Класс для переноса строки $survey_activity_1->addTextBreak(); Варианты в \r \n и прочим...

215
auto Update web site from bitbucket

auto Update web site from bitbucket

мы хотим обновлять сайт через битбакет

181
PHP oтправить json методом POST

PHP oтправить json методом POST

Есть url сервера, логин и парольКак сделать с помощью curl? Не могу разобраться

201
PHP, функция sleep, нагрузка на процессор

PHP, функция sleep, нагрузка на процессор

Вопрос простой: если программа должна выполнять операцию раз в сутки например, то нужно применить функцию sleep:

247