Подпись запроса¶
Каждый запрос к Content API должен содержать параметр sign. По нему
MEGOGO определяет ваш ключ и проверяет, что запрос никто не изменил. Ниже
описано, как вычислить подпись, а также приведены разобранный пример и
готовый код.
В Billing API подписи не используются: запросы к нему MEGOGO определяет по IP-адресу вашего сервера. Подробнее — в разделе Учетные данные.
Алгоритм¶
- Выпишите параметры запроса в том же порядке, что и в URL, без
sign. - Соедините имя и значение каждого параметра знаком
=, а сами пары запишите подряд, без разделителя. - Допишите в конец строки приватный ключ.
- Вычислите MD5-хеш строки (UTF-8) и запишите его в шестнадцатеричном виде строчными буквами (32 символа).
- Допишите в конец хеша публичный ключ.
- Добавьте
signв URL последним параметром.
sign = md5("name1=value1name2=value2" + private_key) + public_key
ПРИМЕЧАНИЕ
Параметры в подписи должны идти в том же порядке, что и в URL: MEGOGO их не сортирует.
Значения параметров¶
- В подписи используйте декодированные значения: например, текст
Гарри Поттер, а не%D0%93…. - Кодируйте значения (percent-encoding) только в URL. Пробел можно
передать как
%20или+. - Включайте в подпись все параметры, в том числе
lang,access_tokenиpage.
Разобранный пример¶
В примере используются вымышленные ключи:
| Значение | Пример |
|---|---|
| Приватный ключ | 0123456789 |
| Публичный ключ | _example1_xx |
| Запрос | GET /v1/stream?video_id=12345&lang=en |
-
Соедините параметры в порядке URL:
video_id=12345lang=en -
Допишите приватный ключ:
video_id=12345lang=en0123456789 -
Вычислите MD5-хеш:
a2330689677230e571d9266512049f63 -
Допишите публичный ключ:
a2330689677230e571d9266512049f63_example1_xx -
Добавьте
signв URL:https://api.megogo.net/v1/stream?video_id=12345&lang=en&sign=a2330689677230e571d9266512049f63_example1_xx
Еще несколько примеров с теми же ключами:
| Параметры запроса | Строка перед вычислением MD5-хеша | sign |
|---|---|---|
| (нет) | 0123456789 |
781e5e245d69b566979b86e28d23f2c7_example1_xx |
text=Гарри Поттер, lang=en |
text=Гарри Поттерlang=en0123456789 |
2064e00bc2f05342a0b4317617052a82_example1_xx |
paging_strategy=token, page=PjIw, category_id=16 |
paging_strategy=tokenpage=PjIwcategory_id=160123456789 |
df30340661b66a578f6b355a7beeaf0e_example1_xx |
По этим примерам удобно проверять свой код.
Код¶
Функции принимают параметры в виде списка пар «имя–значение» в порядке URL.
from hashlib import md5
from urllib.parse import urlencode
def sign(params, private_key, public_key):
data = "".join(f"{name}={value}" for name, value in params) + private_key
return md5(data.encode("utf-8")).hexdigest() + public_key
def signed_url(base, path, params, private_key, public_key):
query = list(params) + [("sign", sign(params, private_key, public_key))]
return f"{base}/{path}?{urlencode(query)}"
print(signed_url("https://api.megogo.net/v1", "stream",
[("video_id", "12345"), ("lang", "en")],
"0123456789", "_example1_xx"))
const crypto = require("crypto");
function sign(params, privateKey, publicKey) {
const data = params.map(([name, value]) => `${name}=${value}`).join("") + privateKey;
return crypto.createHash("md5").update(data, "utf8").digest("hex") + publicKey;
}
function signedUrl(base, path, params, privateKey, publicKey) {
const query = new URLSearchParams([...params, ["sign", sign(params, privateKey, publicKey)]]);
return `${base}/${path}?${query}`;
}
console.log(signedUrl("https://api.megogo.net/v1", "stream",
[["video_id", "12345"], ["lang", "en"]], "0123456789", "_example1_xx"));
<?php
function megogo_sign(array $params, string $privateKey, string $publicKey): string {
$data = '';
foreach ($params as [$name, $value]) {
$data .= $name . '=' . $value;
}
return md5($data . $privateKey) . $publicKey;
}
function megogo_signed_url(string $base, string $path, array $params,
string $privateKey, string $publicKey): string {
$query = [];
foreach ($params as [$name, $value]) {
$query[] = rawurlencode($name) . '=' . rawurlencode($value);
}
$query[] = 'sign=' . rawurlencode(megogo_sign($params, $privateKey, $publicKey));
return $base . '/' . $path . '?' . implode('&', $query);
}
echo megogo_signed_url('https://api.megogo.net/v1', 'stream',
[['video_id', '12345'], ['lang', 'en']], '0123456789', '_example1_xx');
Все три примера возвращают URL из шага 5 разобранного примера.
ОСТОРОЖНО
Не храните параметры в словаре или ассоциативном массиве (map), если он может изменить их порядок: в некоторых языках ключи сортируются, и подпись получается неправильной.
Ошибки¶
| Ответ | Причина | Что делать |
|---|---|---|
HTTP 400, "message": "You entered wrong sign key" |
Неправильная подпись, в запросе нет sign или публичный ключ неизвестен |
Проверьте, что параметры в подписи идут в том же порядке, что и в URL, а их значения декодированы |
HTTP 400, "message": "You entered wrong sign key", но только в запросах от имени пользователя |
access_token не включен в подпись |
Включите access_token в подпись |
HTTP 200, "result": "error", "code": 400 |
Подпись правильная, но какой-то параметр неправильный или отсутствует | См. справочник Content API |
См. также¶
Версия руководства 1.4.1, 2026-10-31 · Сообщить о проблеме на этой странице