Перейти до змісту

Підпис запиту

Кожен запит до Content API має містити параметр sign. За ним MEGOGO ідентифікує ваш ключ і перевіряє, що запит ніхто не змінив. Нижче описано, як обчислити підпис, з покроковим прикладом і готовим кодом.

У Billing API підписи не використовуються: MEGOGO ідентифікує запити за IP-адресою вашого сервера (див. Облікові дані).

Алгоритм

  1. Випишіть параметри запиту в тому самому порядку, що й в URL, крім sign.
  2. З'єднайте назву й значення кожного параметра знаком =, а самі пари запишіть підряд, без роздільника.
  3. Допишіть у кінець рядка приватний ключ.
  4. Обчисліть MD5-хеш рядка (UTF-8) і запишіть його шістнадцятковими символами в нижньому регістрі (32 символи).
  5. Допишіть у кінець хешу публічний ключ.
  6. Додайте 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
  1. З'єднайте параметри в тому порядку, у якому вони йдуть в URL:

    video_id=12345lang=en
    
  2. Допишіть приватний ключ:

    video_id=12345lang=en0123456789
    
  3. Обчисліть MD5-хеш:

    a2330689677230e571d9266512049f63
    
  4. Допишіть публічний ключ:

    a2330689677230e571d9266512049f63_example1_xx
    
  5. Додайте 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 · Повідомити про проблему на цій сторінці