Статус: Новичок
Группы: Участники
Зарегистрирован: 12.03.2024(UTC) Сообщений: 4
|
Здравствуйте. Может кто сталкивался? Хочу получить токен честного знака. Есть html-страница со списком подписей. Выбираю подпись и подписываю строку данных, полученную из честного знака, например пусть будет VCRSUTAGGCDCNQCSPMAUBCAMOQJBZG. Далее, полученная подпись выводится в textarea, в ней вижу несколько строк. Ее нужно отправить на api честного знака (ЧЗ), но ЧЗ он выдает ошибку разбора JSON: Цитата:"Некорректный JSON. Данные ошибки: Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backslash to be included in string value. ru.crpt.trueapi.dto.auth.AuthSignInRequest[\"data\"] [line: 1, column: 133]" ПРобовал textarea.value.replaceAll('\n',''), и textarea.value.replaceAll('\n','\\n'), и textarea.value.replaceAll('\n','\\\\n'), но ошибка не ушла или возвращалась ошибка проверки подписи. Может что-то не так делаю?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,318 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Здравствуйте.
А как переводится текст ошибки, там ещё и код символа указан?
Чем отличаются \n И \r ? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.03.2024(UTC) Сообщений: 4
|
Благодарю, направили в нужное русло. Экранировал \r и \n. Но теперь другая ошибка, не могу найти решение. Честный знак выдает ошибку Цитата:{"error_message":"Input byte array has wrong 4-byte ending unit"} Вот мой запрос с html-страницы: Цитата:let xhr_cz = new XMLHttpRequest() let formData = new FormData(); formData.append("uuid", document.querySelector('#uuid').innerHTML); formData.append("data", document.querySelector('textarea').value); xhr_cz.open("POST", 'test.php') xhr_cz.onload=function(d_cz){ console.log(d_cz.target.response) } xhr_cz.send(formData) Вот код test.php Цитата:$uuid = $_POST['uuid']; $data = str_replace(chr(13),'\\'+chr(13),$_POST['data']); $data = str_replace(chr(10),'\\'+chr(10),$data); $url = 'https://markirovka.crpt.ru/api/v3/true-api/auth/simpleSignIn'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, '{"uuid":"'.$uuid.'","data":"'.$data.'"}'); curl_setopt($ch, CURLOPT_HTTPHEADER, ['accept:application/json', 'Content-Type:application/json']); $req = curl_exec($ch); curl_close($ch); echo $req; Здесь echo $req выводит описанное ранее сообщение {"error_message":"Input byte array has wrong 4-byte ending unit"}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,318 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Что мешает посмотреть, что отправляется, записав в файл? И str_replace понятно что делает, зачем? Отредактировано пользователем 12 марта 2024 г. 13:36:00(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.03.2024(UTC) Сообщений: 4
|
Отправляются подписанные данные. То есть подписывается строка полученная из честного знака (ЧЗ) VCRSUTAGGCDCNQCSPMAUBCAMOQJBZG выбранной электронной подписью. Получается сформированная подпись из нескольких строк, примерно такая Цитата:MIINDgYJKoZIhvcNAQcCoIIM/zCCDPsCAQExDjAMBggqhQMHAQECAgUAMBoGCSqGSIb3DQEHAaAN BAtIZWxsbyBXb3JsZKCCCMwwggjIMIIIdaADAgECAhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMH **** тут еще много-много строк AhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMHAQEBAQRAX2u0TQhIxets/GwpBmDdf9+vDk+KHdGE hhVAs77Pg8ZsJogWwlZGxQK/FoPTko8KblD5F9J7PuBal4MYwC/APA== Сформированная подпись из html файла передается с использованием XMLHttpRequest в test.php. Там делаю $data = str_replace(chr(13),'\\'+chr(13),$_POST['data']);, т.к. если не заменить, то возвращается ошибка "Illegal unquoted character ((CTRL-CHAR, code 13))". Когда экранирую символ с кодом 13, возвращается ошибка Illegal unquoted character ((... code 10)). То есть надо еще экранировать символ с кодом 10. Пробовал также заменять Цитата:$data = str_replace(chr(13),'\\\r',$_POST['data']); $data = str_replace(chr(10),'\\\n',$data); И в итоге возвращается ошибка {"error_message":"Input byte array has wrong 4-byte ending unit"} Видимо, вопрос нужно адресовать в ЧЗ
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,318 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Автор: voron29 Отправляются подписанные данные. То есть подписывается строка полученная из честного знака (ЧЗ) VCRSUTAGGCDCNQCSPMAUBCAMOQJBZG выбранной электронной подписью. Получается сформированная подпись из нескольких строк, примерно такая Цитата:MIINDgYJKoZIhvcNAQcCoIIM/zCCDPsCAQExDjAMBggqhQMHAQECAgUAMBoGCSqGSIb3DQEHAaAN BAtIZWxsbyBXb3JsZKCCCMwwggjIMIIIdaADAgECAhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMH **** тут еще много-много строк AhECzQGDACmxN6BBPFCab/cTEzAKBggqhQMHAQEBAQRAX2u0TQhIxets/GwpBmDdf9+vDk+KHdGE hhVAs77Pg8ZsJogWwlZGxQK/FoPTko8KblD5F9J7PuBal4MYwC/APA== Сформированная подпись из html файла передается с использованием XMLHttpRequest в test.php. Там делаю $data = str_replace(chr(13),'\\'+chr(13),$_POST['data']);, т.к. если не заменить, то возвращается ошибка "Illegal unquoted character ((CTRL-CHAR, code 13))". Когда экранирую символ с кодом 13, возвращается ошибка Illegal unquoted character ((... code 10)). То есть надо еще экранировать символ с кодом 10. Пробовал также заменять Цитата:$data = str_replace(chr(13),'\\\r',$_POST['data']); $data = str_replace(chr(10),'\\\n',$data); И в итоге возвращается ошибка {"error_message":"Input byte array has wrong 4-byte ending unit"} Видимо, вопрос нужно адресовать в ЧЗ т.е. ломаем base64, но писать в ЧЗ... А просто убрать 13 и 10 коды из строки - нельзя? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.03.2024(UTC) Сообщений: 4
|
Что значит ломаем? Из официальной документации ЧЗ, data - это "Подписанные УКЭП зарегистрированного участника оборота товаров случайные данные в base64 (присоединённая электронная подпись)" Если убираю \r\n то возвращается ошибка проверки подписи
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,318 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Автор: voron29 Что значит ломаем? Из официальной документации ЧЗ, data - это "Подписанные УКЭП зарегистрированного участника оборота товаров случайные данные в base64 (присоединённая электронная подпись)" Если убираю \r\n то возвращается ошибка проверки подписи и примера того, что отправляется в ЧЗ не увидеть... "Input byte array has wrong 4-byte ending unit" - не понятное описание? Цитата: $data = str_replace(chr(13),'\\\r',$_POST['data']); $data = str_replace(chr(10),'\\\n',$data);
повторюсь - что делает есть понимание? Я предлагал убрать все 13 и 10 из итоговой строки base64, а не пытаться экранировать chr(13) этим '\\\r' |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close