Підпис запиту¶
Кожен запит до 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 покрокового прикладу.
ОБЕРЕЖНО
Не зберігайте параметри в словнику або мапі, які не гарантують порядку елементів. У деяких мовах програмування ключі сортуються, і тоді підпис буде неправильним.
Помилки¶
| Відповідь | Причина | Що зробити |
|---|---|---|
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 · Повідомити про проблему на цій сторінці