Почта России предоставляет возможность через API получить информацию о почтовом отправлении.
Как из Response получить массив объектов используя php?
Пример ответа:
$arr = json_decode( json_encode( $request ), true );
08 окт. 2022, в 05:08
50000 руб. /за проект
13 сент. 2022, в 22:17
5000 руб. /за проект
08 окт. 2022, в 01:17
20000 руб. /за проект
Прочитав статью Клиент для SOAP API Почты России на Python и воодушевленный подвигом ребят, а также располагая свободным временем, решено было сделать тоже самое. Но на. NET, так как Visual Studio более адаптивна к веб-сервисам с описанием в wsdl.
Как работает
Для получения информации по списку почтовых трекеров (trackid_list)
Подключаем Web Reference
Создадим проект UnitTest:
Добавим с помощью встроенных средств обертку на сервис vfc. russianpost
Стоит отметить, что добавлять нужно именно WebReference. С ServiceReference возникает проблема в приведении типов, так что, вероятно, сам сервис не поддерживает более новый формат.
После добавления у вас появится появится доступ к классу UnitTestProject_ruPost. ruPost. ItemDataService, а также в файл app. config будет добавлены настройки доступа к веб сервису.
Класс обертка RussianPostAgent
Напишем для этого тест:
Заключение
В заключении хотелось бы отметить, что данная статья носит исключительно ознакомительный характер, про то как возможно реализовать доступ к сервису почты России с использованием. NET, так как ещё раз повторюсь, у меня нет официального доступа к сервису.
Всем, у кого есть замечания и предложения по доработке, прошу на git.
В следующей статье мы поговорим, о реализации аналогичного асинхронного решения, но без обращения к веб-сервису почты России и с использованием antigate.
В процессе работы над текущими проектами возникла ситуация когда «вдруг» перестал парситься сайт трекингов Почты России. В интернетах даже немного побурлили по поводу «ужасной» новой защиты и т. В тех же интернетах всплыла тогда информация, что у Почты России имеется-таки API. Не совсем человеческий (т. по протоколу SOAP) но какой-никакой существует и кто-то им даже, якобы, пользуется. Я сообщил шефу, шеф написал письмо на Почту России (электронное, на удивление) и оказалось — да. Всё это действительно есть и вроде бы даже работает. Видимо создали сервис ещё тогда.
Под катом будет линк на рабочий класс клиента (на python) к API Почты России и немного подробностей работы с ним.
Для кого
Итак, вы отслеживаете множество отправлений и конечно справились с текущей проблемой парсинга страницы выдачи трекинга сайта Почты России (далее «почты») но логично предполагаете, что поползновение это было не последнее и в следующий раз может быть хуже. Что же делать? Как обезопасить будущее своего сервиса/компании?
Вы уже догадались, но я скажу вслух — Нужно подключиться к API!
Как получить доступ
в доме который построил Джек
подписать руководителем и проштамповать печатью вашей конторы и заслать, в виде скана, взад.
Как работать
Вот и пришло время перейти в атаку. Форкаете/клонируете:
git://github. com/qnub/ru-post-soap-client. git
Настраиваете (или не настраиваете см. readme). И понеслась
from time import sleep
from client import RuPostClient
client = RuPostClient()
tickets = client. make_ticket(all_my_track_numbers)
sleep(900)
track_statuses = client. get_tracks(tickets. keys())
Ну или типа того — дальше по тому же readme.
Нюансы
Согласно регламенту запросы данных по одному и тому же тикету можно делать не чаще одного раза в 15 минут и не ранее чем через 15 минут после его создания.
Спасибы
Спасибо шефу, что разрешил поделиться с вами этим кодом. Сама технология отработана за его счёт, ну а выделил её в класс я уже за свой.
За последние 24 часа нас посетил 9601 программист и 982 робота. Сейчас ищут 267 программистов.
- SoapClient
- Команда форума
МодераторПовторю еще раз, там в тексте по ссылки написал способ как найти готовые php скрипты. Подсказка github.Добавлено спустя 8 минут 41 секунду:
В гугле поищи по словам: russianpost php github - С нами с:
21 июл 2015Сообщения:
1Симпатии:
0А расчет стоимости доставки через SOAP можно для Почты России сделать? Есть ли примеры реализации на php?
Веб Сервис Почты России
Я
Кто нибудь работал с веб сервисом почты россии? как с ним работать? как хоть что то от туда вытащить? кому интересно могу дать док где типо всё это описывается.
а сколько платишь и где ТЗ?
я ни кого не нанамаю!!! док отправил
Тыб хоть чонить описал, какое там апи (wsdl или чтото ещё), приблизительно цель свою изложить (что получать хочешь через апи).
Да уж чот в ихней wsdl концы с концами не найти, свойства все каки-ето пустые. Тут без документации не как походу
alexei366 документация есть
выложи там на айфолдер или куды ещё, пусть все посмотрят, а то так каждому высылать.
Ну чо есть ШИ отправления и ИС-потребителя?
(7) а тут я ошибался, сам не с того конца смотреть начал*
Походу автор сам во всём разобрался
Ни черта я не разобрался!!!
есть обработка
Процедура КнопкаВыполнитьНажатие(Кнопка)
что дальше надо делать чтобы хоть что то от туда вытащить?
(14) два дня процедуру писал?
нет конечно, просто более приоритетнее были задачи, этим не занимался.
(16) ну теперь соединяйся в веб-сервисом и по документации тащи нужные данные
я не особо вкурил как это сделать
Функция WSСервисЕврокарInit(ТекСервисEurocar) Экспорт
Если ТекСервисEurocar = Тогда
Попытка
АдресВебСервиса = Константы. WS_АдресMainСервиса. Получить();
Пользователь = Константы. WS_Eurocar_Login. Получить();
Пароль = Константы. WS_Eurocar_Password. Получить();
Определения = Новый WSОпределения(АдресВебСервиса + “”, Пользователь, Пароль);
ТекСервисEurocar=Новый WSПрокси(Определения, “”, “”, “”);
ТекСервисEurocar. Пользователь = Пользователь;
ТекСервисEurocar. Пароль = Пароль;
Возврат ;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Иначе
Возврат ;
КонецЕсли;
КонецФункции
а потом вызываешь
Пакет = СервисEurocar. GetCarInfoList(СОКРЛП(КодКузова));
Если Пакет = Неопределено Тогда
Возврат;
КонецЕсли;
(19) щас будет
Поле объекта не обнаружено:
Константы. WS_АдресMainСервиса
песок прав, куча неопределеных переменных
да все там определено
у меня нет констант
не могу вкурить что мне надо передать в метод
Разобрался я во всём, вот только остался такой вопрос, какое значение мне нужно ввести в элемент “MessageType” параметра”OperationHistoryRequest”. В описание сказано что “MessageType” – Содержит имя ИС-потребителя данных (Ис – информационная система), а на схеме сказано что тип INT, отладка показывает тоже что тип число. Встаёт вопрос какое число я должен ввести? и где его взять? на чеке который выдаётся на почте перепробывал все числа – не работает.
(30) 0 Поставь
ставлю 0 вылетает ошибка, попробовал 1 ошибки нет, но результата нет
“2” “3” тоже ошибка
(30) Такие вещи нужно узнавать у саппорта этого сервиса.
уже отправил письмо, но говорят что они отвечают около месяца
(35) сообщи пожалуйста ответ
ответ дали в виде примера ,там “MessageType” стоит “0”, но у меня вылетает ошибка с нулём, “1” тока ошибку не выдаёт. Я малец наврал “1” выдаёт результат: выражение – РПО. historyRecord, свойство – historyRecord, значение – списокXDTO, тип – списокXDTO. И как мне вытащить данные из этого списка?
код запроса:
а и вытаскивать нечего список пуст(
(41) в чем была ошибка?
порядок параметров в метод задал не в том порядке. Просто я сделал как мне показала 1с в wsссылке, а в документации по другому, сделал как в документации всё ок стало, но ответ с веб сервиса пуст. В документации сказано что атрибут элемента mustUnderstand – содержит признак обязательности передачи заголовка сообщения через SOAP Proxy, должен всегда иметь значение «TRUE». я сделал WSПараметр. mustUnderstand = истина;
Видно в чём то тут косяк
Наверно прокси мозг канифолит, надо будет попробывать с домашнего инета
если параметр авторизации вообще не передавать, то вылетает ошибка
(46) в ссылке котору. ты дал написано что нужно сделат запрос на использование сервисом, написал письмо, буду ждать что ответят
Как получить доступ
(49) это про другой сервис
нет, первый без регистрации. у меня с декабря работает, ничего не просит.
да у меня на пхп на сервере крутится, как в 1с будет хз.
в свое время переписывался с ними тоже как только не пытал его на предмет авторизации – думаю не криминал, если процитирую:
—
Добрый день!
Сервис работает без авторизации.
Адрес для доступа к сервису:
Дирекция технологий и информатизации
ФГУП «Почта России»
—————————————
AuthorizationHeader там быть должно – Header должен быть совсем пустым
тамошний wsdl там вообще странный и походу не используется.
в параметр авторизации ни чего не передаю, система не ругается, но ответ пуст, может это глюк 1с(
надо смотреть, что за xml формируется для запроса. скорее всего что-то там в Header все же засовывает, из-за чего и ответ пустой.
я в свое время пока совсем не почистил его – выдавало такое:
S:Server
Ошибка авторизации
—-
в 1с есть вообще чем посмотреть заголовки soap запросов?
erik а данные с сервиса сразу приходят или надо ждёть, Если надо ждать то сколько?
ТипЧотаПроизошло = Прокси. GetOperationHistory(ТипФайл,ТипАвторизация);
Сообщить(“Ну тип, авторизация, ну тип файл, ну тип чота случилося”+ТипЧотаПроизошло. historyRecord. Количество());
(60) да, сразу приходит, 1-2 сек в среднем на ответ. сервис да, дагает частенько. за 12 марта 35 раз скрипт отвалился по таймауту, вчера 6 раз, за сегодня пока 1 раз
Кто нибудь может мне дать индификатор почтового отправления(рабочий)
мне для проверки
ни фига не работает(
конкретнее. Что именно не работает и как именно оно не работает. сообщения вида (67) – это вандализм
(67) работает. SoapUI, шлю пакет, получаю непустой ответ:
При вызове ни каких ошибок, все типы заданы, параметр задан, параметр передан, всё ок. Ответ приходит, но он пустой, количество элеметов 0. Пробывал искать через сайт, сайт ищет. По идеи веб сервис работает. В чём у меня пробле ма хз
(67) ну ответ не пустой, historyrecord в качестве ответа приходит , но элементов нет
насколько знаю, к содержимому тэга header 1С доступа не имеет, а судя по wsdl именно там AuthorizationHeader и должен находиться. сейчас на выходе из 1С AuthorizationHeader находится внутри body. Попробуйте вызвать так:
РПО = Прокси. GetOperationHistory(Неопределено,HistoryRequest);
(71) под непустым имел ввиду нечто такое:
И еще: в 1С, насколько вижу, в вызове GetOperationHistory сначала в параметрах должно быть HistoryRequest, а потом AuthorizationHeader
РПО = Прокси. GetOperationHistory(HistoryRequest, AuthorizationHeader);
Есть ли ещё какие нибудь способы отправки запроса?
я так поминмаю что мой запрос приходит на сервис в виде xml файла, можно ли его отловить и посмотреть что там?
I do not know how to fix an error
asked Jun 17, 2015 at 8:04
I tried to import the WSDL into Visual Studio, and there mustUnderstand is of type boolean. (As expected).
So if you add this line to your pasfile mustUnderstand = boolean; then it compiles.
The line must be added just after all the other type declarations
answered Jun 17, 2015 at 9:31
Jens BorrisholtJens Borrisholt
5,9831 gold badge28 silver badges62 bronze badges
есть некий XML
как на этот адрес отправить этот XML через SOAP?
C SOAP не работал просто никогда, тут задача возникла нужно достучаться по этому протоколу на некий URL и получать оттуда данные.
Как проверить доступ
Следующие шаги помогут проверить работу с сервисом в режиме Единичного доступа:
- в поле Project Name любое имя проекта, например, tracking.russianpost
- флажок Create Requests должен быть включен.
- в поле Barcode – идентификатор отправления, которое вы хотели бы отследить. Например, RA644000001RU
- Выполните запрос к сервису нажатием на кнопку c зеленым треугольником. Ответ сервиса отобразится в правой части окна. В случае успешного запроса ответ будет содержать историю операций над отправлением.
Возможные ошибки
I have this code, but when its try auth, i getting this errror:
Traceback (most recent call last):
How can i fix it?