Есть один 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 возможны только в виде аттача с МТОМ).
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день! Помогите перенести строки в phpword, 3 дня уже маюсь с этим вопросом Класс для переноса строки $survey_activity_1->addTextBreak(); Варианты в \r \n и прочим...
Есть url сервера, логин и парольКак сделать с помощью curl? Не могу разобраться
Вопрос простой: если программа должна выполнять операцию раз в сутки например, то нужно применить функцию sleep: