Здравствуйте! Задача: постинг в ленту группы Одноклассников. Проблема возникла с формированием st.signature.
Запрос на публикацию в ленту группы выглядит следующим образом:
----------------
ht tps://conn ect.ok.ru/dk
?st.cmd=WidgetMediatopicPost
&st.app={application_id}
&st.groupId={group_id}
&st.attachment={attachment_json}
&st.signature={signature}
&st.return={return_url}
&st.popup={popup}
&st.silent={silent}
&st.utext={text}
&st.nohead={nohead}
--------------
Сформировал запрос:
ht tps://conn ect.ok.ru/dk?st.cmd=WidgetMediatopicPost&st.app=#Идентификатор приложения#&st.groupId=#Идентификатор группы#&st.attachment={"media":[{"type":"text","text":"привет"}],"publishAt":"2022-08-27 12:05:00","onBehalfOfGroup":"true","disableComments":"false"}&st.signature=????
С закодированным атачмент:
ht tps://conn ect.ok.ru/dk?st.cmd=WidgetMediatopicPost&st.app=#Идентификатор приложения#&st.groupId=#Идентификатор группы#&st.attachment=%7b%22media%22%3a%5b%7b%22type%22%3a%22text%22%2c%22text%22%3a%22%d0%bf%d1%80%d0%b8%d0%b2%d0%b5%d1%82%22%7d%5d%2c%22publishAt%22%3a%222022-08-27+12%3a05%3a00%22%2c%22onBehalfOfGroup%22%3a%22true%22%2c%22disableComments%22%3a%22false%22%7d&st.signature=????
Далее в справке API https://apiok.ru/ext/publish написано:
Расчет подписи запроса st.signature
-------------------------------
В качестве секретного ключа при передаче параметра st.access_token используется session_secret_key сессии, иначе, используется секретный ключ приложения.
Все значения не должны быть закодированы (кроме случая, когда вы используете base64 для st.attachment).
Если указан параметр st.return, вычисляется следующим образом:
md5("st.attachment=" + attachment + "st.return=" + return_url + secretKey);
В остальных случаях:
md5("st.attachment=" + attachment + secretKey);
-------------------------------
Нашел как получить ХЕШ переменной.
//Получаем значение строки из переменной
string input = project.Variables["str"].Value;
// Создаем объект этого класса.
System.Security.Cryptography.MD5 md5Hasher = System.Security.Cryptography.MD5.Create();
// Преобразуем входную строку в массив байт и вычисляем хэш
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
// Создаем новый Stringbuilder (Изменяемую строку) для набора байт
StringBuilder md5hash = new StringBuilder();
// Преобразуем каждый байт хэша в шестнадцатеричную строку
for (int i = 0; i < data.Length; i++)
{
//преобразуем элемент в шестнадцатиричную строку длиной в два символа
md5hash.Append(data.ToString("x2"));
}
//Возвращаем MD5 хеш для строки
return md5hash.ToString();
Не понимаю, каким образом получить st.signature. Как записать данную конструкцию ("st.attachment=" + attachment + secretKey) в переменную str чтобы получит хеш?
Запрос на публикацию в ленту группы выглядит следующим образом:
----------------
ht tps://conn ect.ok.ru/dk
?st.cmd=WidgetMediatopicPost
&st.app={application_id}
&st.groupId={group_id}
&st.attachment={attachment_json}
&st.signature={signature}
&st.return={return_url}
&st.popup={popup}
&st.silent={silent}
&st.utext={text}
&st.nohead={nohead}
--------------
Сформировал запрос:
ht tps://conn ect.ok.ru/dk?st.cmd=WidgetMediatopicPost&st.app=#Идентификатор приложения#&st.groupId=#Идентификатор группы#&st.attachment={"media":[{"type":"text","text":"привет"}],"publishAt":"2022-08-27 12:05:00","onBehalfOfGroup":"true","disableComments":"false"}&st.signature=????
С закодированным атачмент:
ht tps://conn ect.ok.ru/dk?st.cmd=WidgetMediatopicPost&st.app=#Идентификатор приложения#&st.groupId=#Идентификатор группы#&st.attachment=%7b%22media%22%3a%5b%7b%22type%22%3a%22text%22%2c%22text%22%3a%22%d0%bf%d1%80%d0%b8%d0%b2%d0%b5%d1%82%22%7d%5d%2c%22publishAt%22%3a%222022-08-27+12%3a05%3a00%22%2c%22onBehalfOfGroup%22%3a%22true%22%2c%22disableComments%22%3a%22false%22%7d&st.signature=????
Далее в справке API https://apiok.ru/ext/publish написано:
Расчет подписи запроса st.signature
-------------------------------
В качестве секретного ключа при передаче параметра st.access_token используется session_secret_key сессии, иначе, используется секретный ключ приложения.
Все значения не должны быть закодированы (кроме случая, когда вы используете base64 для st.attachment).
Если указан параметр st.return, вычисляется следующим образом:
md5("st.attachment=" + attachment + "st.return=" + return_url + secretKey);
В остальных случаях:
md5("st.attachment=" + attachment + secretKey);
-------------------------------
Нашел как получить ХЕШ переменной.
//Получаем значение строки из переменной
string input = project.Variables["str"].Value;
// Создаем объект этого класса.
System.Security.Cryptography.MD5 md5Hasher = System.Security.Cryptography.MD5.Create();
// Преобразуем входную строку в массив байт и вычисляем хэш
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
// Создаем новый Stringbuilder (Изменяемую строку) для набора байт
StringBuilder md5hash = new StringBuilder();
// Преобразуем каждый байт хэша в шестнадцатеричную строку
for (int i = 0; i < data.Length; i++)
{
//преобразуем элемент в шестнадцатиричную строку длиной в два символа
md5hash.Append(data.ToString("x2"));
}
//Возвращаем MD5 хеш для строки
return md5hash.ToString();
Не понимаю, каким образом получить st.signature. Как записать данную конструкцию ("st.attachment=" + attachment + secretKey) в переменную str чтобы получит хеш?