📚 Документация LunaPay API
Простая интеграция приёма платежей и массовых выплат для вашего сайта или приложения.
🚀 Что можно делать с LunaPay:
- Принимать платежи — клиенты оплачивают заказы картой, криптовалютой или через платёжные системы
- Массовые выплаты — автоматическая отправка денег (зарплаты, выплаты партнерам)
- Webhook уведомления — мгновенное получение информации о статусе платежей
⚠️ Перед началом работы:
- Зарегистрируйтесь на lunapay.store
- Создайте Мерчант-аккаунт в разделе "Мерчант API"
- Сохраните API Key и Secret Key в надёжном месте
💡 Быстрый старт за 3 шага:
- Отправьте запрос на создание платежа с вашим
API Key - Перенаправьте клиента на полученную
paymentUrl - Получите уведомление на ваш
webhookUrlкогда клиент оплатит
💳 Мерчант API — Приём платежей
Шаг 1: Получите API ключи
Перейдите в Мерчант API и создайте аккаунт. Вы получите:
API Key— для создания платежейSecret Key— для проверки подписи webhook
Шаг 2: Создание платежа
Заголовки запроса:
| Заголовок | Значение | Описание |
|---|---|---|
Content-Type |
application/json |
Обязательно |
X-API-Key |
Ваш API Key | Обязательно |
Параметры запроса (JSON):
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
amount |
number | Да | Сумма платежа (минимум 1) |
orderId |
string | Да | Уникальный ID заказа в вашей системе |
description |
string | Нет | Описание платежа |
currency |
string | Нет | RUB, USD, EUR, TON, BTC, USDT (по умолчанию RUB) |
metadata |
object | Нет | Дополнительные данные (вернутся в webhook) |
Пример на PHP:
<?php
$apiKey = 'ваш_api_key';
$data = [
'amount' => 1000,
'orderId' => 'ORDER_123',
'description' => 'Оплата заказа #123',
'currency' => 'RUB'
];
$ch = curl_init('https://lunapay.store/api/payment/create');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
]
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
if ($result['success']) {
header('Location: ' . $result['payment']['paymentUrl']);
exit;
}
?>
Пример ответа:
{
"success": true,
"payment": {
"paymentId": "PAY_abc123",
"orderId": "ORDER_123",
"amount": 1000,
"currency": "RUB",
"status": "pending",
"paymentUrl": "https://lunapay.store/pay/PAY_abc123",
"expiresAt": "2025-12-11T10:00:00.000Z"
}
}
Проверка статуса платежа
Возможные статусы:
| Статус | Описание |
|---|---|
pending |
Ожидает оплаты |
completed |
✅ Успешно оплачен |
failed |
❌ Ошибка оплаты |
expired |
⏰ Истёк срок (24 часа) |
💸 API массовых выплат
Автоматизируйте выплаты на кошельки LunaPay: зарплаты, комиссии, возвраты, переводы между пользователями системы.
💡 Переводы на кошельки LunaPay:
- Мгновенный перевод — средства зачисляются моментально
- Без комиссии — переводы между пользователями LunaPay бесплатны
- Поддержка всех валют — RUB, USD, EUR, TON, BTC, USDT и другие
- Два формата получателя — email или wallet ID (формат U12345678)
Выплата на кошелёк LunaPay
Переводите средства другим пользователям LunaPay мгновенно и без комиссии. Получатель указывается по email или wallet ID (например: U12345678).
Заголовки запроса:
| Заголовок | Значение | Описание |
|---|---|---|
Content-Type |
application/json |
Обязательно |
X-API-Key |
Ваш Payout API Key | Обязательно |
Параметры:
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
recipient |
string | Да | Email или wallet ID получателя (например: user@example.com или U12345678) |
amount |
number | Да | Сумма выплаты (минимум зависит от валюты) |
currency |
string | Нет | RUB, USD, EUR, TON, BTC, USDT и другие (по умолчанию: RUB) |
description |
string | Нет | Описание выплаты (опционально) |
metadata |
object | Нет | Дополнительные данные (опционально) |
Примеры выплат в разных валютах:
<?php
$apiKey = 'ваш_payout_api_key';
// Выплата в рублях по email
$data = [
'recipient' => 'user@example.com',
'amount' => 500,
'currency' => 'RUB',
'description' => 'Зарплата за декабрь'
];
// Выплата в USDT по wallet ID
$data = [
'recipient' => 'U12345678',
'amount' => 100,
'currency' => 'USDT',
'description' => 'Реферальная выплата'
];
// Выплата в долларах
$data = [
'recipient' => 'U87654321',
'amount' => 50,
'currency' => 'USD',
'description' => 'Комиссия'
];
// Выплата в TON
$data = [
'recipient' => 'partner@example.com',
'amount' => 10,
'currency' => 'TON',
'description' => 'Партнерская выплата'
];
// Выплата в евро
$data = [
'recipient' => 'U99999999',
'amount' => 75,
'currency' => 'EUR',
'description' => 'Возврат средств'
];
$ch = curl_init('https://lunapay.store/api/payouts/create');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
]
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
if ($result['success']) {
echo 'Выплата создана!';
echo 'ID выплаты: ' . $result['payout']['payoutId'];
}
?>
Пример ответа:
{
"success": true,
"payout": {
"payoutId": "PO_1702377600000_A1B2C3D4",
"recipient": "U12345678",
"amount": 500,
"currency": "RUB",
"status": "completed",
"createdAt": "2024-12-10T12:00:00.000Z"
}
}
📋 Форматы получателя:
- Email:
user@example.com— выплата на пользователя по email - Wallet ID:
U12345678— выплата по номеру кошелька (формат U + 8 цифр)
Оба формата работают одинаково. Wallet ID можно найти в личном кабинете пользователя.
⚠️ Минимальные суммы выплат:
- RUB: 1 ₽
- USD, EUR: 0.01
- TON, USDT: 0.01
- BTC: 0.00000001
Массовые выплаты (Batch)
Создайте до 100 выплат одним запросом. Можно комбинировать разные валюты и получателей (email и wallet ID).
Пример на PHP:
<?php
$apiKey = 'ваш_payout_api_key';
$data = [
'payouts' => [
[
'recipient' => 'user1@example.com',
'amount' => 1000,
'currency' => 'RUB',
'description' => 'Зарплата'
],
[
'recipient' => 'U12345678',
'amount' => 50,
'currency' => 'USDT',
'description' => 'Бонус'
],
[
'recipient' => 'U87654321',
'amount' => 100,
'currency' => 'USD',
'description' => 'Комиссия'
],
[
'recipient' => 'partner@example.com',
'amount' => 25,
'currency' => 'EUR',
'description' => 'Возврат'
]
]
];
$ch = curl_init('https://lunapay.store/api/payouts/batch');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
]
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
if ($result['success']) {
echo 'Успешно: ' . $result['successful'] . ' из ' . $result['total'];
}
?>
🔔 Webhooks
Webhook — это POST-запрос от LunaPay на ваш сервер при изменении статуса платежа.
⚠️ Требования:
- Доступен из интернета
- Обязательно HTTPS
- Отвечает за 10 секунд
- Возвращает статус 200 OK
Проверка подписи
Заголовок X-Signature содержит HMAC-SHA256 подпись.
<?php
$secretKey = 'ваш_secret_key';
$body = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
// Проверка подписи
$expected = hash_hmac('sha256', $body, $secretKey);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
die(json_encode(['error' => 'Invalid signature']));
}
$data = json_decode($body, true);
if ($data['status'] === 'completed') {
// Обработка успешного платежа
// UPDATE orders SET status='paid' WHERE order_id=...
}
http_response_code(200);
echo json_encode(['success' => true]);
?>
💻 Полные примеры на PHP
Полная интеграция
<?php
// Создание платежа
$apiKey = 'ваш_api_key';
$orderId = 'ORDER_' . time();
$data = json_encode([
'amount' => 1500,
'orderId' => $orderId,
'description' => 'Оплата товара',
'metadata' => ['userId' => $_SESSION['user_id']]
]);
$ch = curl_init('https://lunapay.store/api/payment/create');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'X-API-Key: ' . $apiKey
]
]);
$response = curl_exec($ch);
$result = json_decode($response, true);
if ($result['success']) {
header('Location: ' . $result['payment']['paymentUrl']);
exit;
}
?>
<?php
require_once 'config.php';
$secretKey = 'ваш_secret_key';
$body = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $body, $secretKey);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
die();
}
$data = json_decode($body, true);
// Проверка идемпотентности
$stmt = $pdo->prepare("SELECT id FROM payments WHERE payment_id = ?");
$stmt->execute([$data['paymentId']]);
if ($stmt->fetch()) {
http_response_code(200);
die(json_encode(['success' => true]));
}
if ($data['status'] === 'completed') {
// Обновляем заказ
$pdo->prepare("UPDATE orders SET status='paid' WHERE order_id=?")
->execute([$data['orderId']]);
// Сохраняем платёж
$pdo->prepare("INSERT INTO payments (payment_id, order_id, amount) VALUES (?,?,?)")
->execute([$data['paymentId'], $data['orderId'], $data['amount']]);
}
http_response_code(200);
echo json_encode(['success' => true]);
?>
⚠️ Коды ошибок
| Код | Значение |
|---|---|
400 |
Неверные параметры |
401 |
Неверный API Key |
404 |
Платёж не найден |
500 |
Ошибка сервера |
Типичные ошибки
Платёж с таким orderId уже существует
Используйте уникальный orderId
Неверный API Key
Проверьте ключ в настройках
💬 Поддержка
Контакты:
- Email: support@lunapay.store
- Telegram: @lunapay_support
❓ FAQ
Как быстро зачисляются средства?
Мгновенно после подтверждения платежа.
Что делать если webhook не приходит?
- Проверьте доступность URL
- Используйте HTTPS
- Отвечайте 200 OK