diff --git a/Lava.NET.csproj b/Lava.NET.csproj
index 588f6b9..0ed0bc8 100644
--- a/Lava.NET.csproj
+++ b/Lava.NET.csproj
@@ -4,7 +4,13 @@
net8.0
enable
enable
- 1.0.0
+ 1.0.1
+ False
+ yawaflua
+ yawaflua
+ README.md
+ https://github.com/yawaflua/Lava.NET
+ ru
@@ -12,4 +18,12 @@
+
+
+
+ True
+ \
+
+
+
diff --git a/Program.cs b/Program.cs
index f78658a..49fdd2b 100644
--- a/Program.cs
+++ b/Program.cs
@@ -13,54 +13,123 @@ namespace Lava.NET
///
/// Токен от Lava.ru
/// Тип вашего аккаунта
- public class ILavaAPI(string token, LavaType type)
+ public class LavaAPI(string token, LavaType type)
{
internal readonly HttpClient _httpClient = new HttpClient()
{
BaseAddress = new("https://api.lava.ru/")
};
- internal async Task SendRequest(string path, LavaType? neededType, HttpMethod method, string? body = null)
+ ///
+ /// Отправка запроса на сервер
+ ///
+ /// path метода
+ /// требуемый тип аккаунта
+ /// Метод для отправки запроса
+ /// string body
+ /// string от сервера
+ /// Несоответсвие типа аккаунта и требуемого типа
+ internal virtual async Task SendRequest(string path, LavaType? neededType, HttpMethod method, string? body = null)
{
if (neededType != LavaType.any && neededType != type) throw new Exceptions.TypeException("Your Lava.ru account type is not equals needed type");
_httpClient.DefaultRequestHeaders.Authorization = new("", token);
- using (var message = new HttpRequestMessage(method, path))
+ using (var message = new HttpRequestMessage(method, _httpClient.BaseAddress + path))
{
+
message.Content = body == null ? new StringContent(body.ToString()) : null;
var req = await _httpClient.SendAsync(message);
return await req.Content.ReadAsStringAsync();
}
}
-
- public async Task CreatePaymentAsync(PaymentRequest data)
+ ///
+ /// Создание ссылки на оплату (Выставление счета)
+ ///
+ /// Данные, передаваемые в запрос. Смотреть АПИ
+ /// Ответ от сервера или null
+ public virtual async Task CreatePaymentAsync(PaymentRequest data)
=> JsonConvert.DeserializeObject(await SendRequest("invoice/create", LavaType.any, HttpMethod.Post, data.ToString()));
- public async Task GetPaymentInfoAsync(string id)
+ ///
+ /// Получение информации о выставленном счете, в т.ч. о том, оплачен ли счет
+ ///
+ /// айди выставленного счета
+ /// Ответ от сервера или null
+ public virtual async Task GetPaymentInfoAsync(string id)
=> JsonConvert.DeserializeObject(await SendRequest("invoice/info", LavaType.any, HttpMethod.Post, id));
+ ///
+ /// Установка webhook для получения информации о пополнениях, оплате выставленных счетов и т.д.
+ ///
+ /// HTTPS url до вашего бекенда, куда должен приходить вебхук
+ ///
public async Task SetWebhookUrl(string url)
=> await SendRequest("invoice/set-webhook", LavaType.any, HttpMethod.Post, url);
+ ///
+ /// Проверка токена
+ ///
+ ///
public async Task pingAsync()
=> JsonNode.Parse(await SendRequest("test/ping", LavaType.any, HttpMethod.Get))?["status"]?.ToString().Equals(true) ?? false;
}
- public class PublicLavaAPI : ILavaAPI
+ public sealed class PublicLavaAPI : LavaAPI
{
- // Для обычных юзеров + общедоступное
+ ///
+ /// Для обычных юзеров, т.е. вкладка Кошелек
+ ///
+ /// токен от вашего аккаунта
public PublicLavaAPI(string token) : base(token, LavaType.wallet) { }
+ ///
+ /// Получение кошельков на вашем аккаунте
+ ///
+ /// Список из кошельков или null
public async Task getWallets()
=> JsonConvert.DeserializeObject(await SendRequest("wallet/list", LavaType.wallet, HttpMethod.Get));
+ ///
+ /// Cоздние заявки на вывод
+ ///
+ /// данные, передаваемые в запрос
+ /// Стандартный ответ от сервера или null
public async Task MakeWithdraw(Withdraw withdraw)
=> JsonConvert.DeserializeObject(await SendRequest("withdraw/create", LavaType.wallet, HttpMethod.Post, withdraw.ToString()));
+ ///
+ /// Информация о выводе
+ ///
+ /// Id заявки
+ /// Информация о выводе
public async Task InfoWithdrawAsync(string id)
=> JsonConvert.DeserializeObject(await SendRequest("withdraw/info", LavaType.wallet, HttpMethod.Post, id));
+ ///
+ /// Создание перевода
+ ///
+ /// Данные, передаваемые в запрос
+ /// Стандартный ответ от сервера или null
public async Task MakeTransfer(Transfer data)
=> JsonConvert.DeserializeObject(await SendRequest("transfer/create", LavaType.wallet, HttpMethod.Post, data.ToString()));
+ ///
+ /// Получение информации о переводе
+ ///
+ /// Id перевода
+ /// Данные о переводе
public async Task GetTransferDataAsync(string id)
=> JsonConvert.DeserializeObject(await SendRequest("transfer/info", LavaType.wallet, HttpMethod.Post, id));
+ ///
+ /// Получение всех транзакций
+ ///
+ /// Необ. данные для настройки вывода
+ /// Все транзакции
public async Task GetTransactionsAsync(TransactionParam? transaction = null)
=> JsonConvert.DeserializeObject(await SendRequest("transactions/list", LavaType.wallet, HttpMethod.Post, transaction?.ToString()));
+ ///
+ /// Получение банков, подключенных к СБП
+ ///
+ /// Список банков
public async Task GetSBPBanksAsync()
=> JsonConvert.DeserializeObject(await SendRequest("withdraw/get-sbp-bank-list", LavaType.wallet, HttpMethod.Post));
}
- public class BusinessLavaAPI(string token) : ILavaAPI(token, LavaType.business)
+ ///
+ /// В РАЗРАБОТКЕ
+ /// Часть lava.ru API, которая работает с бизнесом. Вкладка "Бизнес" dev.lava.ru
+ ///
+ /// Токен вашего аккаунта
+ public sealed class BusinessLavaAPI(string token) : LavaAPI(token, LavaType.business)
{
internal async Task SendRequest(string path, LavaType? neededType = LavaType.business, HttpMethod? method = null, string? body = null, bool isSpecial = true)
{
@@ -79,6 +148,11 @@ internal async Task SendRequest(string path, LavaType? neededType = Lava
return await req.Content.ReadAsStringAsync();
}
}
+ ///
+ /// Создание вывода
+ ///
+ /// Данные, передаваемые в запрос
+ ///
public async Task CreatePayoffAsync(PayoffRequest request)
=> JsonConvert.DeserializeObject(await SendRequest("business/payoff/create", body: request.ToString()));
public async Task GetPayoffDataAsync(PayoffDataRequest request)
diff --git a/README.md b/README.md
index ace0a02..5656af8 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,79 @@
-# Lava.NET
\ No newline at end of file
+# Lava.NET
+ API lava.ru.
+ - API
+
+ [API lava.ru](https://dev.lava.ru/)
+#
+##
+```bash
+dotnet add package Lava.NET
+```
+###
+```cs
+using Lava.NET;
+public class Program
+{
+ public static async Task Main(string[] args)
+ {
+ var publicLavaApi = new PublicLavaAPI("[ ]");
+ // ...
+ }
+}
+```
+## ASP.NET :
+```cs
+// Startup.cs
+
+public void ConfigureServices(IServiceCollection services)
+{
+ var publicLavaApi = new PublicLavaAPI("[ ]");
+ services.AddControllers();
+ services
+
+ .AddSwaggerGen();
+
+ services
+ // ...
+ .AddSingleton(publicLavaAPI);
+}
+```
+
+## (.NET 8):
+```cs
+// PaymentController.cs
+
+[ApiController]
+[Route("/payment/")]
+public class PaymentController(PublicLavaAPI lavaAPI) : ControllerBase
+{
+
+
+ [HttpPost("lava")]
+ public async Task ValidatePaymentLava([FromBody] WebhookResponse webhookResponse)
+ {
+ //
+
+ return Ok(); // 200, , 15 .
+ }
+}
+```
+
+## :
+```cs
+var publicLavaApi = new PublicLavaAPI("[ ]");
+var createdPayment = await publicLavaApi.CreatePaymentAsync(
+ new (){
+ comment = " Telegram ", // .
+ hook_url = $"https://example.com/api/payment/lava", // .
+ merchant_id = "AskMeAboutBOT", // .
+ merchant_name = "AskMeAboutBOT", // .
+ custom_fields = $" , webhook", // .
+ success_url = $"https://example.com/", // .
+ sum = 39.00f,
+ wallet_to = "R123123123"
+ }
+);
+Console.Out.WriteLine(createdPayment.url);
+
+// >>> 'https://p2p.lava.ru/form?id=1ee31634-e3e0-34ce-1423-b5b4cb524c6a'
+```
diff --git a/Types/LavaAPI/Payment.cs b/Types/LavaAPI/Payment.cs
index 352fc9e..32bf7d0 100644
--- a/Types/LavaAPI/Payment.cs
+++ b/Types/LavaAPI/Payment.cs
@@ -8,31 +8,105 @@ namespace Lava.NET.Types.LavaAPI
{
public class PaymentRequest : IBase
{
- public string wallet_to { get; set; }
- public float sum { get; set; }
+ ///
+ /// Ваш номер счета
+ ///
+ public string wallet_to { get; set; }
+ ///
+ /// Сумма с копейками и f на конце
+ /// Пример: 1.00f
+ ///
+ public float sum { get; set; } = 1.00f;
+ ///
+ /// Уникальный номер счета в вашей системе
+ ///
public string? order_id { get; set; }
+ ///
+ /// Url для отправки webhook
+ ///
public string? hook_url { get; set; }
- public string? success_url { get; set; }
+ ///
+ /// Url для переадресации в случае успешной оплаты
+ ///
+ public string? success_url { get; set; }
+ ///
+ /// Url для переадресации в случае неуспешной оплаты
+ ///
public string? fail_url { get; set; }
+ ///
+ /// Время жизни счета в минутах
+ /// Мин: 1 ; Макс: 43200
+ ///
public int? expire { get; set; } = 43200;
+ ///
+ /// С кого списывать комиссию:
+ /// 1 - с клиента
+ /// 0 - с магазина
+ ///
public string? subtract { get; set; }
+ ///
+ /// Дополнительные данные предаваемые в вебхуке
+ ///
public string? custom_fields { get; set; }
+ ///
+ /// Комментарий
+ ///
public string? comment { get; set; }
+ ///
+ /// ID марчанта(только в вебхуке)
+ ///
public string? merchant_id { get; set; }
+ ///
+ /// Название мерчанта (отображается в форме перевода)
+ ///
public string? merchant_name { get; set; }
}
public class PaymentResponse : IBase
{
+ ///
+ /// Статус запроса
+ ///
public string status { get; set; }
+ ///
+ /// Номер счета на оплату
+ ///
public string id { get; set; }
+ ///
+ /// Ссылка на оплату
+ ///
public string url { get; set; }
+ ///
+ /// Время истечения счета
+ ///
public int expire { get; set; }
+ ///
+ /// Сумма счета
+ ///
public string sum { get; set; }
+ ///
+ /// // URL для переадресации после успешной оплаты
+ ///
public string success_url { get; set; }
+ ///
+ /// URL для переадресации после неудачной оплаты
+ ///
public string fail_url { get; set; }
+ ///
+ /// адрес для вебхука
+ ///
public string hook_url { get; set; }
+ ///
+ /// Дополнительное поле
+ ///
public string custom_fields { get; set; }
+ ///
+ /// ID и наименование мерчанта
+ ///
public string merchant_name { get; set; }
+ ///
+ /// ID и наименование мерчанта
+ ///
+
public string merchant_id { get; set; }
}
public class Invoice : IBase
diff --git a/Types/LavaAPI/SBPBanks.cs b/Types/LavaAPI/SBPBanks.cs
index 938a189..21e3417 100644
--- a/Types/LavaAPI/SBPBanks.cs
+++ b/Types/LavaAPI/SBPBanks.cs
@@ -8,7 +8,13 @@ namespace Lava.NET.Types.LavaAPI
{
public class Datum : IBase
{
+ ///
+ /// ID банка
+ ///
public object id { get; set; }
+ ///
+ /// Название
+ ///
public string name { get; set; }
}
diff --git a/Types/LavaAPI/Transaction.cs b/Types/LavaAPI/Transaction.cs
index b253ec5..636e43a 100644
--- a/Types/LavaAPI/Transaction.cs
+++ b/Types/LavaAPI/Transaction.cs
@@ -9,11 +9,34 @@ namespace Lava.NET.Types.LavaAPI
public class TransactionParam : IBase
{
+ ///
+ /// Тип перевода
+ /// withdraw - вывод
+ /// transfer - перевод
+ ///
public string? transfer_type { get; set; }
+ ///
+ /// Номер кошелька
+ ///
public string? account { get; set; }
+ ///
+ /// С какого периода показывать транзакции
+ /// Пример: 21.10.2021 10:30:30
+ ///
public string? period_start { get; set; }
+ ///
+ /// До какого времени показывать транзакции
+ ///
+ /// Пример: 21.10.2021 11:30:00
+ ///
public string? period_end { get; set; }
+ ///
+ /// Сдвиг
+ ///
public int? offset { get; set; }
+ ///
+ /// Лимит
+ ///
public int? limit { get; set; }
}
diff --git a/Types/LavaAPI/Transfer.cs b/Types/LavaAPI/Transfer.cs
index fdc7cad..55f0940 100644
--- a/Types/LavaAPI/Transfer.cs
+++ b/Types/LavaAPI/Transfer.cs
@@ -8,22 +8,67 @@ namespace Lava.NET.Types.LavaAPI
{
public class Transfer : IBase
{
+ ///
+ /// Номер кошелька с которого совершается перевод
+ ///
public string account_from { get; set; }
+ ///
+ /// Номер кошелька куда совершается перевод
+ ///
public string account_to { get; set;}
- public int substract { get; set; } = 0;
- public int amount { get; set; }
+ ///
+ /// Откуда списывать комиссию
+ /// 1 - с баланса, 0 - с суммы
+ ///
+ public int? substract { get; set; } = 0;
+ ///
+ /// Сумма вывода с копейками и f на конце
+ /// Пример: 1.00f
+ ///
+ public float amount { get; set; } = 1.00f;
+ ///
+ /// Комментарий
+ ///
public string? comment { get; set; }
}
public class TransferData : IBase
{
+ ///
+ /// Номер заявки
+ ///
public string id { get; set; }
+ ///
+ /// Время создания в unix
+ ///
public string created_at { get; set; }
+ ///
+ /// сумма
+ ///
public string amount { get; set; }
+ ///
+ /// Статус
+ ///
public string status { get; set; }
- public object comment { get; set; }
+ ///
+ /// Комментарий
+ ///
+ public string? comment { get; set; }
+ ///
+ /// валюта
+ ///
public string currency { get; set; }
+ ///
+ /// Тип
+ ///
public string type { get; set; }
+ ///
+ /// Получатель
+ ///
public string receiver { get; set; }
+ ///
+ /// комиссия
+ ///
public string commission { get; set; }
+
}
}
diff --git a/Types/LavaAPI/Withdraw.cs b/Types/LavaAPI/Withdraw.cs
index 4d58ebb..32498eb 100644
--- a/Types/LavaAPI/Withdraw.cs
+++ b/Types/LavaAPI/Withdraw.cs
@@ -8,26 +8,85 @@ namespace Lava.NET.Types.LavaAPI
{
public class WithdrawInfo : IBase
{
+ ///
+ /// Номер заявки
+ ///
public string id { get; set; }
+ ///
+ /// Время создания (В формате unix timestamp)
+ ///
public string created_at { get; set; }
+ ///
+ /// Сумма заявки
+ ///
public string amount { get; set; }
+ ///
+ /// Комиссия
+ ///
public string commission { get; set; }
+ ///
+ /// Статус заявки
+ ///
public string status { get; set; }
+ ///
+ /// Сервис
+ ///
public string service { get; set; }
- public string comment { get; set; }
+ ///
+ /// Комментарий
+ ///
+ public string? comment { get; set; }
+ ///
+ /// Валюта
+ ///
public string currency { get; set; }
}
public class Withdraw : IBase
{
+ ///
+ /// Номер кошелька, с которго совершается вывод
+ ///
+ ///
+ /// R40510054
+ ///
public string account { get; set; }
+ ///
+ /// Сумма вывода
+ ///
public float amount { get; set; }
- public string order_id { get; set; }
- public string hook_url { get; set; }
- public int subtract { get; set; } = 0;
- public string service { get; set; } = "card";
- public string wallet_to { get; set; }
- public string comment { get; set; }
- public string sbp_bank_id { get; set; }
+ ///
+ /// Номер счета в вашей системе
+ /// Должен быть уникальным
+ ///
+ public string? order_id { get; set; }
+ ///
+ /// Url для отправки Webhook
+ ///
+ public string? hook_url { get; set; }
+ ///
+ /// Откуда списывать комиссию
+ ///
+ /// 1 - с баланса, 0 - с суммы
+ /// Если параметр не передан, то комиссия берется с суммы
+ ///
+ public int? subtract { get; set; } = 0;
+ ///
+ /// Сервис вывода
+ /// Пример: card
+ ///
+ public string? service { get; set; } = "card";
+ ///
+ /// Номер счета получателя
+ ///
+ public string? wallet_to { get; set; }
+ ///
+ /// Комментарий к выводу
+ ///
+ public string? comment { get; set; }
+ ///
+ /// ID банка в СБП
+ ///
+ public string? sbp_bank_id { get; set; }
}
}