Перейти к содержанию

Payment Links

API для создания ссылок с индивидуальной ценой на конкретный продукт. Позволяет создавать персонализированные ссылки на оплату с уникальными ценами и метаданными.

Предварительные требования

Важно

Для создания payment links необходимо сначала создать и настроить продукт в личном кабинете платформы Mesilat.

Ограничение

Payment links нельзя создавать для бесплатных продуктов. Попытка создать платежную ссылку для бесплатного продукта (is_free = true) приведет к ошибке 422.

Как узнать ID продукта

ID продукта можно получить из URL страницы редактирования продукта в браузере:

https://app.mesilat.com/store/edit/:product_id/custom-service

Где :product_id — это ID продукта.

Формат ссылки на оплату

В ответе API возвращается ссылка на оплату в следующем формате:

https://app.mesilat.com/alexsample/141?uuid=d83dff3a

Где: - app.mesilat.com - домен платформы - alexsample - имя пользователя/магазина - 141 - ID продукта - uuid=d83dff3a - уникальный идентификатор payment link

Эта ссылка ведет на страницу оплаты, где клиент может совершить покупку продукта по указанной цене.

Предзаполнение данных клиента

Вы можете добавить URL параметры для предзаполнения информации о клиенте на странице оплаты:

Параметр Описание Пример
email Email клиента [email protected]
name Имя клиента Соня Морозова
phone_number Телефон клиента в международном формате (с + или 00 перед кодом страны) +35799123456 или 0035799123456

Пример:

https://app.mesilat.com/alexsample/141?uuid=d83dff3a&[email protected]&name=%D0%A1%D0%BE%D0%BD%D1%8F%20%D0%9C%D0%BE%D1%80%D0%BE%D0%B7%D0%BE%D0%B2%D0%B0&phone_number=%2B35799123456

URL кодирование

Специальные символы (пробелы, +, @, кириллица и т.д.) должны быть URL-encoded:

  • Пробел → %20
  • +%2B
  • @%40
  • И%D0%98

В большинстве языков программирования есть встроенные функции для URL encoding.

Примеры создания ссылок вручную

const baseLink = 'https://app.mesilat.com/username/141?uuid=abc123';
const url = new URL(baseLink);

url.searchParams.set('email', '[email protected]');
url.searchParams.set('name', 'Соня Морозова');
url.searchParams.set('phone_number', '+35799123456');

const finalLink = url.toString();
// https://app.mesilat.com/username/141?uuid=abc123&email=sonya%40mesilat.com&name=%D0%A1%D0%BE%D0%BD%D1%8F+%D0%9C%D0%BE%D1%80%D0%BE%D0%B7%D0%BE%D0%B2%D0%B0&phone_number=%2B35799123456
$baseLink = 'https://app.mesilat.com/username/141?uuid=abc123';

$params = [
    'email' => '[email protected]',
    'name' => 'Соня Морозова',
    'phone_number' => '+35799123456',
];

$finalLink = $baseLink . '&' . http_build_query($params);
// https://app.mesilat.com/username/141?uuid=abc123&email=sonya%40mesilat.com&name=%D0%A1%D0%BE%D0%BD%D1%8F+%D0%9C%D0%BE%D1%80%D0%BE%D0%B7%D0%BE%D0%B2%D0%B0&phone_number=%2B35799123456
from urllib.parse import urlencode

base_link = 'https://app.mesilat.com/username/141?uuid=abc123'

params = {
    'email': '[email protected]',
    'name': 'Соня Морозова',
    'phone_number': '+35799123456'
}

final_link = f"{base_link}&{urlencode(params)}"
# https://app.mesilat.com/username/141?uuid=abc123&email=sonya%40mesilat.com&name=%D0%A1%D0%BE%D0%BD%D1%8F+%D0%9C%D0%BE%D1%80%D0%BE%D0%B7%D0%BE%D0%B2%D0%B0&phone_number=%2B35799123456

Интерактивный генератор ссылок

Аутентификация

Все эндпоинты требуют API ключ в заголовке X-API-Key.

X-API-Key: your_api_key_here

Эндпоинты

Создает новую ссылку на оплату для продукта.

POST /api/v1/creator/products/{product}/payment-links

Параметры URL

Параметр Тип Описание
product integer ID продукта

Тело запроса

{
  "prices": [
    {
      "currency_id": 3,
      "price": 500.00,
      "discount_price": 39.99,
      "is_discount_price": true
    },
    {
      "currency_id": 1,
      "price": 5000.00,
      "is_discount_price": false
    }
  ],
  "use_once": true,
  "metadata": {
    "order_id": "ORD-2025-789456",
    "project_id": "proj_12345",
    "customer_id": "cust_67890",
    "campaign": "summer_sale_2025",
    "utm_source": "google",
    "utm_medium": "cpc",
    "referral_code": "FRIEND2025",
    "affiliate_id": "aff_999"
  }
}

Параметры запроса

Параметр Тип Обязательный Описание
prices array Да Массив цен для разных валют. Цена в EUR (currency_id: 3) обязательна, цена в RUB (currency_id: 1) опциональна
prices[].currency_id integer Да ID валюты (1 - RUB, 3 - EUR). EUR обязательна, RUB опциональна
prices[].price number Нет Обычная цена. Обязательна если is_discount_price = false
prices[].discount_price number Нет Скидочная цена. Обязательна если is_discount_price = true
prices[].is_discount_price boolean Да Включена ли скидочная цена. Если true, то обычная цена будет "зачеркнута" и применяться будет скидочная цена при покупке
use_once boolean Нет Можно ли использовать ссылку только один раз (по умолчанию: false)
metadata object Нет Дополнительные метаданные (order_id, name, shop_url и т.д.). Эти данные будут переданы в webhook при успешной оплате

Валюта и цены

Обязательные требования: - Цена в EUR (currency_id: 3) обязательна и должна быть указана в массиве prices - Цена в RUB (currency_id: 1) опциональна

Автоматическая конвертация: Если цена в RUB не передана, она будет автоматически рассчитана по текущему курсу валют на основе цены в EUR.

Ручная установка цены в RUB: Вы можете передать собственную цену в RUB, указав её в массиве prices вместе с EUR. Это полезно, если вы хотите установить фиксированную цену в рублях или использовать свой курс конвертации.

Ответ

200 OK

{
  "uuid": "abc123def456",
  "metadata": {
    "order_id": "ORD-2025-789456",
    "project_id": "proj_12345",
    "customer_id": "cust_67890",
    "campaign": "summer_sale_2025",
    "utm_source": "google",
    "utm_medium": "cpc",
    "referral_code": "FRIEND2025",
    "affiliate_id": "aff_999"
  },
  "use_once": true,
  "payment_link": "https://app.mesilat.com/alexsample/141?uuid=abc123def456"
}

Ошибки

401 Unauthorized

{
  "error": "API key is required",
  "message": "Please provide a valid API key in the X-API-Key header"
}
{
  "error": "Invalid API key",
  "message": "The provided API key is invalid or has been revoked"
}

422 Unprocessable Entity

Ошибки валидации:

{
  "message": "The given data was invalid.",
  "errors": {
    "prices": ["The prices field is required."],
    "prices.0.currency_id": ["The currency_id field is required."]
  }
}

Ошибка для бесплатного продукта:

{
  "message": "Невозможно создать платежные ссылки для бесплатных продуктов",
  "errors": {
    "error": ["Невозможно создать платежные ссылки для бесплатных продуктов"]
  }
}

Получает список всех payment links для продукта.

GET /api/v1/creator/products/{product}/payment-links

Параметры URL

Параметр Тип Описание
product integer ID продукта

Ответ

200 OK

{
  "data": [
    {
      "id": 188,
      "product_id": 141,
      "is_discount_price": true,
      "prices": [
        "€20.00",
        "100.00 ₽"
      ],
      "payment_link": "https://app.mesilat.com/alexsample/141?uuid=4204b476",
      "use_once": true,
      "uuid": "4204b476"
    },
    {
      "id": 191,
      "product_id": 141,
      "is_discount_price": true,
      "prices": [
        "€20.00",
        "100.00 ₽"
      ],
      "payment_link": "https://app.mesilat.com/alexsample/141?uuid=6172bef",
      "use_once": true,
      "uuid": "6172bef"
    },
    {
      "id": 193,
      "product_id": 141,
      "is_discount_price": true,
      "prices": [
        "€20.00"
      ],
      "payment_link": "https://app.mesilat.com/alexsample/141?uuid=4b6b387e",
      "use_once": true,
      "uuid": "4b6b387e"
    }
  ],
  "links": {
    "first": "https://api.mesilat.com/api/v1/creator/products/141/payment-links?page=1",
    "last": "https://api.mesilat.com/api/v1/creator/products/141/payment-links?page=1",
    "prev": null,
    "next": null
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 1,
    "links": [
      {
        "url": null,
        "label": "pagination.previous",
        "active": false
      },
      {
        "url": "https://api.mesilat.com/api/v1/creator/products/141/payment-links?page=1",
        "label": "1",
        "active": true
      },
      {
        "url": null,
        "label": "pagination.next",
        "active": false
      }
    ],
    "path": "https://api.mesilat.com/api/v1/creator/products/141/payment-links",
    "per_page": 15,
    "to": 3,
    "total": 3
  }
}

Ошибки

401 Unauthorized

{
  "error": "API key is required",
  "message": "Please provide a valid API key in the X-API-Key header"
}
{
  "error": "Invalid API key",
  "message": "The provided API key is invalid or has been revoked"
}

Удаляет payment link.

DELETE /api/v1/creator/products/{product}/payment-links/{paymentLink}

Параметры URL

Параметр Тип Описание
product integer ID продукта
paymentLink integer ID payment link

Ответ

204 No Content

Тело ответа пустое.

Ошибки

401 Unauthorized

{
  "error": "API key is required",
  "message": "Please provide a valid API key in the X-API-Key header"
}
{
  "error": "Invalid API key",
  "message": "The provided API key is invalid or has been revoked"
}

404 Not Found

{
  "message": "No query results for model [Modules\\Product\\Entities\\ProductPrice] 123"
}

Примеры использования

curl -X POST "https://api.mesilat.com/api/v1/creator/products/123/payment-links" \
  -H "X-API-Key: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "prices": [
      {
        "currency_id": 3,
        "discount_price": 39.99,
        "is_discount_price": true
      },
      {
        "currency_id": 1,
        "price": 5000.00,
        "is_discount_price": false
      }
    ],
    "use_once": true,
    "metadata": {
      "order_id": "ORD-2025-789456",
      "project_id": "proj_12345",
      "customer_id": "cust_67890",
      "campaign": "summer_sale_2025",
      "utm_source": "google",
      "utm_medium": "cpc",
      "referral_code": "FRIEND2025",
      "affiliate_id": "aff_999"
    }
  }'

Коды ошибок

Код Описание
200 Успешный запрос
204 Успешное удаление (без содержимого)
401 Неверный или отсутствующий API ключ
404 Ресурс не найден
422 Ошибка валидации данных
500 Внутренняя ошибка сервера