Вот такая задача стоит — получить файл из реестра запрещенных сайтов.
Используется дока
zapret-info.gov.ru/docs/description_for_operators_...
Логика: выполнить метод
getLastDumpDate, определим свежесть реестра. Если реестр свежий, отправляем файл запроса и отсоединенную ЭП. в методе
sendRequest. В ответ получаем код в виде набора символов, типа такого: «66a7d767cbe88d6bfeb8c9e9790e77be». Этот код надо скормить методу
getResult, который в ответ вернет файл в виде ZIP-архива. Вот тут и загвоздка — если сразу выполнить этот метод после получения кода, метод отвечает "
запрос обрабатывается", то есть типа все хорошо — в доке указано, что метод
getResult надо выполнить через несколько минут. Выполняю этот метод через несколько минут — он отвечает: "
Ошибка! некорректное значение ЭП".
Может кто-нибудь из сообщества решал эту задачу, и решил ее? Буду благодарен за помощь.
Использую Perl + SOAP::Lite
Кратко основные моменты кода:
open FREQ, '<', 'request.xml';
open FSIG, '<', 'request.xml.sig';
$sig = <FSIG>;
$req = <FREQ>;
close FREQ;
close FSIG;
# Отправка запроса и электронной подписи
$soap = SOAP::Lite->service("http://www.zapret-info.gov.ru/services/OperatorRequest/?wsdl");
my @params = (
SOAP::Data->name( 'requestFile' )->type("string")->value($req),
SOAP::Data->name( 'signatureFile')->type("xsd:base64Binary")->value($sig),
);
my $result = $soap->call( sendRequest => @params );
my $code = $result->body->{sendRequestResponse}->{code};
# Попытка получить файл реестра - оправляем полученный $code
my @params = ( SOAP::Data->name( 'code' )->type("xsd:string")->value( $code ) );
my $resultFile = $soap->call( getResult => @params );
# При немедленном запуске этого метода скажет "запрос обрабатывается". При запуске по истечении нескольких минут - "некорректное значение ЭП"
print $resultFile->body->{getResultResponse}->{resultComment};