Друзья, помогите, пожалуйста, разобраться.
В описании задании есть инструкция, как отредактировать некоторую запись на сервере. Вот эта инструкция:
Для редактирования задачи нужно передать в POST, помимо самих редактируемых полей, специальный токен (используйте строку "beejee" в качестве значения этого поля) и дополнительный параметр-подпись "signature".
Для генерации подписи нужно:
- собрать все поля, отправляемые в POST, в том числе token (кроме самого поля signature),
- отправлять можно только редактируемые поля + token + signature
- отсортировать по алфавиту все поля, кроме token (поле token должно быть последним),
- выполнить URL-кодированние параметров запроса (имени параметры и значения параметра), кодирование происходит по стандарту RFC 3986 (например, строка "example@example.com" кодируется в "example%40example.com")
- собрать отсортированные URL-кодированые поля в одну строку запроса (params_string), разделитель между имененем параметра и его значением - символ "=", между разными параметрами - символ "&" (получится, например, status=0&text=SomeText&token=beejee). Напоминаем, что параметры должны быть кодированы по стандарту RFC 3986,
- рассчитать md5-хеш от URL-кодированной строки запроса (md5(params_string)) и отправить этот md5-хеш в поле 'signature' в POST вместе с другими параметрами
Я сделал это так:
function patchCard(id, newData) {
const { text, status } = newData;
const bodyWithoutSignature =
"status=" +
(status
? encodeURIComponent(statusReady)
: encodeURIComponent(statusNotReady)) +
"&text=" +
encodeURIComponent(text) +
"&token=" +
encodeURIComponent(token);
const md5Hash = md5(bodyWithoutSignature);
const body =
bodyWithoutSignature + "&signature=" + encodeURIComponent(md5Hash);
const query = baseURL + "/edit/" + id;
const requestOptions = {
method: "POST",
body: body
};
return fetch(query, requestOptions).then(handleResponse);
}
От сервера приходит status ОК, но ничего не редактируется. Прошу помочь.
P.S. В приведенном выше коде я пытаюсь изменить на сервере поля "text" и "status"