Статус: Участник
Группы: Участники
Зарегистрирован: 19.06.2024(UTC) Сообщений: 23 Откуда: Moscow
|
Автор: Андрей * подпись корректная, отсоединенная, der
вернёмся к исходному, где сообщается о причине:
[{"number":"de99792e-ccc2-41e3-b60b-3c4d071fde3f", "docDate":"2024-09-02T11:01:19.558Z","receivedAt":"2024-09-02T11:01:19.558Z","type":"LK_RECEIPT",
"status":"CHECKED_NOT_OK","senderInn":"инн","senderName":"имя", "receiverInn":null,"receiverName":null,"invoiceNumber":null,"invoiceDate":null,"relatedDocId":null,"input":false,"errors":["33: Данные электронной подписи не соответствуют текущему участнику."],
"commonErrors":[{"errorCode":"33", "errorMessage":"33: Данные электронной подписи не соответствуют текущему участнику.", "errorObject":"de99792e-ccc2-41e3-b60b-3c4d071fde3f"}],"productGroup":["lp"],"productGroupId":[1]}]
Сертификат ИП, от ФНС.
Участник кто должен быть? Что ожидает сервис?
Согласно документации true апи честного знака: "Для подачи сведений необходимо тело документа в формате JSON "Единого метода создания документов" заполнить значениями параметров в соответствии с описанием в таблице (см. "Единый метод создания документов"). Параметр "product_document" должен быть телом документа "Вывод из оборота" со всеми указанными параметрами, закодированным в Base64. Далее тело незакодированного документа в формате JSON требуется подписать открепленной УКЭП в кодировке Base64 и заполнить полученным значением параметр "signature". Сформированную УКЭП необходимо открыть в любом доступном текстовом редакторе и удалить символы переноса строк. В случае успеха в ответе приходит уникальный идентификатор документа. После вывода из оборота товара статус КИ меняет тип на RETIRED (Выбыл) или WRITTEN_OFF ("Списан") (см."Справочник «Статусы КИ»")." А теперь попроще: Мы отправляем запрос в апи ЧЗ: нам приходит ответ в виде id документа. Далее мы смотрим, что с этим документом по его id. И вот в этот момент нам приходит информация о том, что документ не обработан. Мы формируем следующие данные: Код:
$json = [
"inn" => "указываем инн",
"action" => "DISTANCE",
"action_date" => date("Y-m-d"),
"products" => [
[
"cis" => $ciz
],
]
];
$data = [
"document_format" => 'MANUAL',
"product_document" => base64_encode(json_encode($json)),
"type" => $type,
"signature" => base64_encode($detached_sign) //И ВОТ тут неверная подпись
];
Вся загвоздка именно в этой строке: "Далее тело незакодированного документа в формате JSON требуется подписать открепленной УКЭП в кодировке Base64 и заполнить полученным значением параметр "signature"." Мы его подписываем, но видимо, неправильно... Вот так формируем cms и подписываем: Код:
String text = "{\"inn\":\"ИНН сам\",\"action\":\"DISTANCE\",\"action_date\":\"2024-09-10\",\"products\":[{\"cis\":\"КИЗ сам\"}]}";
byte[] textData = createCMSEx(text.getBytes(), keys, certs, null, false, JCSP.PROVIDER_NAME);
byte[] detached = createCMSEx(text.getBytes(), keys, certs, null, true, JCSP.PROVIDER_NAME);
data = createCMSEx(data, keys, certs, null, false, JCSP.PROVIDER_NAME);
byte[] r = signCMSEx(data, keys, certs, null, null, JCSP.PROVIDER_NAME);
byte[] r2 = signCMSEx(textData, keys, certs, null, detached, JCSP.PROVIDER_NAME);
result = new Result((new Encoder()).encode(r), (new Encoder().encode(r2)));
Все методы createCMSEx и signCMSEx взяты из примеров по кадесу
|