Задать вопрос
Zusy
@Zusy
Программист, в поиске простых решений))

API OK MediaPost проблема с символами +, &, #, %?

Пишу в теле запроса символы , и выдает ошибки
{"error_code":3,"error_msg":"METHOD : Method can not be null","error_data":null}
{"error_code":104,"error_msg":"PARAM_SIGNATURE : Invalid signature feecb27fe2c3422aed4d5967f0b5d7e3, calculated by string application_key=CBAKAMHLEBABABABAattachment={ \"media\": [ { \"type\": \"text\", \"text\": \" Вакансія – помічник кухаря – до ресторану готелю 4* в Празі, тільки з офіціальними документами. Приготування страв за завданням шеф-кухаря, за меню – не лише допомога, але й повноцінне приготування. Досвід є обов’язковим. Оплата 120 Корун/год. B0 607 407 092, praceje@gmail.com\" } ]}format=jsongid=53327505719498method=mediatopic.posttype=GROUP_THEME********SECRET KEY*******","error_data":null}
  • Вопрос задан
  • 1103 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
tomnolane
@tomnolane
профессиональный разработчик
вы signature шифруете хешем MD5?

тело запроса использует attachment, перед отправкой, все символы attachment нужно кодировать в url формат
на php
$encode_attachment = urlencode($attachment);
на js
var encode_attachment =  encodeURIComponent(attachment);

на c#
string encode_attachment = HttpUtility.UrlEncode(attachment);

где attachment - ваш attachment до кодирования
encode_attachment - attachment после кодирования в url
и encode_attachment уже отправляете в MediaPost

на c# примерно выглядит так (работает)
h0 = "application_key=" + OK.APPK + "attachment=" + attachments + "format=jsongid=" + gid + "method=mediatopic.posttype=GROUP_THEME" + OK.SSK;
                g = GetMD5Hash(string.Format("{0}", h0));
                attachments = HttpUtility.UrlEncode(attachments);
                request_path = "https://api.ok.ru/fb.do?application_key=" + OK.APPK + "&attachment=" + attachments + "&format=json&gid=" + gid + "&method=mediatopic.post&type=GROUP_THEME&sig=" + g + "&access_token=" + OK.AccessToken;
                string req = Response(request_path, sender);


п.с. в подписе нужно использовать attachment до кодирования, а в самом запросе attachment кодированый
п.с.с. бывают некоторые энкодеры (на С# например есть...) которые не все символы обрабатывают.. если у вас не получается, хотя делаете всё верно - попробуйте сменить на аналогичный енкодер
п.с.с.с. MD5
для js (тык)
для php $hash = md5($str);
для c#
public static string GetMD5Hash(string input)
        {
             var x = new System.Security.Cryptography.MD5CryptoServiceProvider();
             var bs = Encoding.UTF8.GetBytes(input);
             bs = x.ComputeHash(bs);
             var s = new StringBuilder();
             foreach (var b in bs)
             {
                s.Append(b.ToString("x2").ToLower());
             }
             return s.ToString();
        }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы