-
-
Save reinhurd/bf16877c49140c913b1fae1095f8ca16 to your computer and use it in GitHub Desktop.
<?php | |
//скрыть, если не пользуетесь прокси. | |
$proxy="127.0.0.1:1337"; | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_PROXY, $proxy); | |
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); | |
curl_setopt ($ch, CURLOPT_PROXYTYPE, 7); | |
curl_setopt_array($ch, array( | |
CURLOPT_URL => "https://openapi.nalog.ru:8090/open-api/AuthService/0.1?wsdl", | |
CURLOPT_RETURNTRANSFER => true, | |
CURLOPT_ENCODING => "", | |
CURLOPT_MAXREDIRS => 10, | |
CURLOPT_TIMEOUT => 0, | |
CURLOPT_FOLLOWLOCATION => true, | |
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, | |
CURLOPT_CUSTOMREQUEST => "POST", | |
CURLOPT_POSTFIELDS =>" | |
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiMessageConsumerService/types/1.0\"> | |
<soapenv:Header/> | |
<soapenv:Body> | |
<ns:GetMessageRequest> | |
<ns:Message>\n<tns:AuthRequest xmlns:tns=\"urn://x-artefacts-gnivc-ru/ais3/kkt/AuthService/types/1.0\"> | |
<tns:AuthAppInfo> | |
<tns:MasterToken>/*YOUR MASTER TOKEN HERE*/</tns:MasterToken> | |
</tns:AuthAppInfo> | |
</tns:AuthRequest> | |
</ns:Message> | |
</ns:GetMessageRequest> | |
</soapenv:Body> | |
</soapenv:Envelope>", | |
CURLOPT_HTTPHEADER => array( | |
"Content-Type: text/xml" | |
), | |
)); | |
$response = curl_exec($ch); | |
$error = curl_error($ch); | |
curl_close($ch); | |
//echo $response; | |
echo $error; | |
//echo html_entity_decode($response); | |
$dom = new DOMDocument(); | |
$dom->loadXML($response); | |
foreach($dom->getElementsByTagName('Token') as $element){ | |
$tempToken = $element->nodeValue; | |
} | |
$temptoken = $tempToken; | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_PROXY, $proxy); | |
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); | |
curl_setopt ($ch, CURLOPT_PROXYTYPE, 7); | |
curl_setopt_array($ch, array( | |
CURLOPT_URL => "https://openapi.nalog.ru:8090/open-api/ais3/KktService/0.1?wsdl", | |
CURLOPT_RETURNTRANSFER => true, | |
CURLOPT_ENCODING => "", | |
CURLOPT_MAXREDIRS => 10, | |
CURLOPT_TIMEOUT => 0, | |
CURLOPT_FOLLOWLOCATION => true, | |
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, | |
CURLOPT_CUSTOMREQUEST => "POST", | |
CURLOPT_POSTFIELDS =>"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" | |
xmlns:ns=\"urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiAsyncMessageConsumerService/types/1.0\"> | |
<soapenv:Header/> | |
<soapenv:Body> | |
<ns:SendMessageRequest> | |
<ns:Message> | |
<tns:GetTicketRequest xmlns:tns=\"urn://x-artefacts-gnivc-ru/ais3/kkt/KktTicketService/types/1.0\"> | |
<tns:GetTicketInfo> | |
<tns:Sum>12500</tns:Sum> | |
<tns:Date>2020-04-23T12:08:00</tns:Date> | |
<tns:Fn>9287440300077658</tns:Fn> | |
<tns:TypeOperation>1</tns:TypeOperation> | |
<tns:FiscalDocumentId>166865</tns:FiscalDocumentId> | |
<tns:FiscalSign>4264393268</tns:FiscalSign> | |
</tns:GetTicketInfo> | |
</tns:GetTicketRequest> | |
</ns:Message> | |
</ns:SendMessageRequest> | |
</soapenv:Body> | |
</soapenv:Envelope>", | |
CURLOPT_HTTPHEADER => array( | |
"FNS-OpenApi-Token: ". $temptoken ."", | |
"FNS-OpenApi-UserToken: /*YOUR MASTER TOKEN HERE*/", | |
"Content-Type: text/xml" | |
), | |
)); | |
$response = curl_exec($ch); | |
$error = curl_error($ch); | |
curl_close($ch); | |
//echo $response; | |
echo $error; | |
//echo html_entity_decode($response); | |
$dom = new DOMDocument(); | |
$dom->loadXML($response); | |
foreach($dom->getElementsByTagName('MessageId') as $element ){ | |
$messageId = $element->nodeValue; | |
} | |
$ch = curl_init(); | |
curl_setopt($ch, CURLOPT_PROXY, $proxy); | |
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); | |
curl_setopt ($ch, CURLOPT_PROXYTYPE, 7); | |
curl_setopt_array($ch, array( | |
CURLOPT_URL => "https://openapi.nalog.ru:8090/open-api/ais3/KktService/0.1?wsdl", | |
CURLOPT_RETURNTRANSFER => true, | |
CURLOPT_ENCODING => "", | |
CURLOPT_MAXREDIRS => 10, | |
CURLOPT_TIMEOUT => 0, | |
CURLOPT_FOLLOWLOCATION => true, | |
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, | |
CURLOPT_CUSTOMREQUEST => "POST", | |
CURLOPT_POSTFIELDS =>"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiAsyncMessageConsumerService/types/1.0\"> | |
<soapenv:Header/> | |
<soapenv:Body> | |
<ns:GetMessageRequest> | |
<ns:MessageId>".$messageId."</ns:MessageId> | |
</ns:GetMessageRequest> | |
</soapenv:Body> | |
</soapenv:Envelope>", | |
CURLOPT_HTTPHEADER => array( | |
"FNS-OpenApi-Token: ". $temptoken ."", | |
"FNS-OpenApi-UserToken: /*YOUR MASTER TOKEN HERE*/", | |
"Content-Type: text/xml" | |
), | |
)); | |
$response = curl_exec($ch); | |
$error = curl_error($ch); | |
curl_close($ch); | |
//echo $response; | |
echo $error; | |
//echo html_entity_decode($response); | |
$dom = new DOMDocument(); | |
$dom->loadXML($response); | |
foreach($dom->getElementsByTagName('Code') as $element ){ | |
$code = $element->nodeValue; | |
} | |
foreach($dom->getElementsByTagName('Ticket') as $element ){ | |
$message = $element->nodeValue; | |
} | |
$x = json_decode($message, true); | |
var_dump($x); |
Если у кого перестало работать в декабре 20-го после обновления на стороне ФНС - необходимо заменить CheckTicketInfo на GetTicketInfo
Почему то при последнем запросе, когда я передаю:
<ns:MessageId>".$messageId."</ns:MessageId>
Получаю ответ:
Запрос не соответствует формату hsm
Что это значит, а главное как это исправить?)
@dicrtarasov покажи, где в коде происходит «заворачивать JSON в XML затем в SOAP»?
Почему то при последнем запросе, когда я передаю:
<ns:MessageId>".$messageId."</ns:MessageId>
Получаю ответ:
Запрос не соответствует формату hsm
Что это значит, а главное как это исправить?)
- Точно hsm, а не xsd?
- $messageId - в каком формате отправляете?
- Если у вас официальное подключение к ФНС, вам вместе с мастер-токеном должны были прислать ссылку с доступами к их хелпдеску, попробуйте задать вопрос им, нужно будет приложить отправляемые вами запросы и ответы налоговой с меткой времени. Они, правило, быстро и более-менее по теме, помогают.
Почему то при последнем запросе, когда я передаю:
<ns:MessageId>".$messageId."</ns:MessageId>
Получаю ответ:
Запрос не соответствует формату hsm
Что это значит, а главное как это исправить?)
- Точно hsm, а не xsd?
- $messageId - в каком формате отправляете?
- Если у вас официальное подключение к ФНС, вам вместе с мастер-токеном должны были прислать ссылку с доступами к их хелпдеску, попробуйте задать вопрос им, нужно будет приложить отправляемые вами запросы и ответы налоговой с меткой времени. Они, правило, быстро и более-менее по теме, помогают.
- Точнее некуда, код ошибки 452
- Какой получи такой и передаю, не меняя его, вот его пример: 48bb684c-0b75-4e95-8eac-7d1cbdfac445
- Конечно задам, думал возможно тут мне помогут быстрее, я же не один кто пытается работать с этой API
$messageId может его нужно передавать как то иначе? В документации вроде ничего нет на эту тему
@rilax
К сожалению, не знаю, как вам помочь, код выше крутится на одном из продакшн-серверов сейчас, и все возвращает нормально. Если уверены, что нет опечаток (и данные по самому чеку переданы так, как в примере), то поможет только запрос разработчикам этой штуки)
@rilax
К сожалению, не знаю, как вам помочь, код выше крутится на одном из продакшн-серверов сейчас, и все возвращает нормально. Если уверены, что нет опечаток (и данные по самому чеку переданы так, как в примере), то поможет только запрос разработчикам этой штуки)
Причина была в том что я указывал тег "Sum в формате с точкой, а нужно указывать значение в копейках. Получается что я передавал ему не верный формат, а он на него зачем то возвращал messageId, а должен по идее уже на том этапе начать на меня ругаться
@rilax ну здорово, что разобрались. Да, у них есть такая фишка. Даже если запрос построен целиком неверно, они все равно вернут Id сообщения.
До декабря 20-го ранее сразу писали, что данные по чеку предоставлены некорректно или не в том формате, но теперь у них более непонятная система ошибок.
Как только не делал... на втором запросе ошибка "Произошла внутренняя ошибка"
код полностью скопировал, с данными
@vladimir-ko а вы мастер токен вставили свой? запрос отправляете с одобренного ip?
Если прям нигде нет опечаток - пишите им в техподдержку, контур своего сервиса они пока еще не меняли.
@vladimir-ko а вы мастер токен вставили свой? запрос отправляете с одобренного ip?
Если прям нигде нет опечаток - пишите им в техподдержку, контур своего сервиса они пока еще не меняли.
Мастер токен вставил, тмп токен получаю. Код скопирован полностью. Скорее всего в ТП стучаться нужно.
А ни у кого не было вот такой ошибки ?
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetMessageResponse xmlns="urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiAsyncMessageConsumerService/types/1.0">
<ProcessingStatus>COMPLETED</ProcessingStatus>
<Message>
<GetTicketResponse xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"
xmlns="urn://x-artefacts-gnivc-ru/ais3/kkt/KktTicketService/types/1.0">
<Result>
<Code>543</Code>
<Message>Внутренняя ошибка сервиса проверки фискального признака</Message>
</Result>
</GetTicketResponse>
</Message>
</GetMessageResponse>
</soap:Body>
</soap:Envelope>
Чек запрашиваю вот так
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"
xmlns:ns=\"urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiAsyncMessageConsumerService/types/1.0\">
<soapenv:Header/>
<soapenv:Body>
<ns:SendMessageRequest>
<ns:Message>
<tns:GetTicketRequest xmlns:tns=\"urn://x-artefacts-gnivc-ru/ais3/kkt/KktTicketService/types/1.0\">
<tns:GetTicketInfo>
<tns:Sum>73400</tns:Sum>
<tns:Date>2021-03-28T15:13</tns:Date>
<tns:Fn>9280440300746022</tns:Fn>
<tns:TypeOperation>1</tns:TypeOperation>
<tns:FiscalDocumentId>36652</tns:FiscalDocumentId>
<tns:FiscalSign>665700876</tns:FiscalSign>
</tns:GetTicketInfo>
</tns:GetTicketRequest>
</ns:Message>
</ns:SendMessageRequest>
</soapenv:Body>
</soapenv:Envelope>
@vell1903
Проверьте, корректно ли внесли все данные с чека для запроса. Иногда QR бывает нечеткий, и (если вы получаете все данные из него) может давать ошибочные цифры, если старая библиотека для распознавания.
Если все верно (и тип чека действительно 1) проверьте формат даты. Я всегда засылаю с секундами, у вас на примере их нет.
@reinhurd Да, дел оказалось в секундах. Спасибо
Мда..... заворачивать JSON в XML затем в SOAP ..... и это вместо простой RestAPI .... такое могли только идиоты придумать. Вот такое состояние цифровизации у нас в ФНС ...... ;)