Skip to content

Commit a2b4865

Browse files
author
yawaflua
committed
1.0.1 Add descriptions of methods
1 parent 9258cb8 commit a2b4865

8 files changed

Lines changed: 398 additions & 25 deletions

File tree

Lava.NET.csproj

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,26 @@
44
<TargetFramework>net8.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
7-
<Version>1.0.0</Version>
7+
<Version>1.0.1</Version>
8+
<GenerateDocumentationFile>False</GenerateDocumentationFile>
9+
<Authors>yawaflua</Authors>
10+
<Company>yawaflua</Company>
11+
<PackageReadmeFile>README.md</PackageReadmeFile>
12+
<RepositoryUrl>https://github.com/yawaflua/Lava.NET</RepositoryUrl>
13+
<NeutralLanguage>ru</NeutralLanguage>
814
</PropertyGroup>
915

1016

1117
<ItemGroup>
1218
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
1319
</ItemGroup>
1420

21+
22+
<ItemGroup>
23+
<None Update="README.md">
24+
<Pack>True</Pack>
25+
<PackagePath>\</PackagePath>
26+
</None>
27+
</ItemGroup>
28+
1529
</Project>

Program.cs

Lines changed: 83 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,54 +13,123 @@ namespace Lava.NET
1313
/// </summary>
1414
/// <param name="token">Токен от Lava.ru</param>
1515
/// <param name="type">Тип вашего аккаунта</param>
16-
public class ILavaAPI(string token, LavaType type)
16+
public class LavaAPI(string token, LavaType type)
1717
{
1818
internal readonly HttpClient _httpClient = new HttpClient()
1919
{
2020
BaseAddress = new("https://api.lava.ru/")
2121
};
22-
internal async Task<string> SendRequest(string path, LavaType? neededType, HttpMethod method, string? body = null)
22+
/// <summary>
23+
/// Отправка запроса на сервер
24+
/// </summary>
25+
/// <param name="path">path метода</param>
26+
/// <param name="neededType">требуемый тип аккаунта</param>
27+
/// <param name="method">Метод для отправки запроса</param>
28+
/// <param name="body">string body</param>
29+
/// <returns>string от сервера</returns>
30+
/// <exception cref="Exceptions.TypeException">Несоответсвие типа аккаунта и требуемого типа</exception>
31+
internal virtual async Task<string> SendRequest(string path, LavaType? neededType, HttpMethod method, string? body = null)
2332
{
2433
if (neededType != LavaType.any && neededType != type) throw new Exceptions.TypeException("Your Lava.ru account type is not equals needed type");
2534
_httpClient.DefaultRequestHeaders.Authorization = new("", token);
26-
using (var message = new HttpRequestMessage(method, path))
35+
using (var message = new HttpRequestMessage(method, _httpClient.BaseAddress + path))
2736
{
37+
2838
message.Content = body == null ? new StringContent(body.ToString()) : null;
2939
var req = await _httpClient.SendAsync(message);
3040
return await req.Content.ReadAsStringAsync();
3141
}
3242
}
33-
34-
public async Task<PaymentResponse?> CreatePaymentAsync(PaymentRequest data)
43+
/// <summary>
44+
/// Создание ссылки на оплату (Выставление счета)
45+
/// </summary>
46+
/// <param name="data"> Данные, передаваемые в запрос. Смотреть АПИ</param>
47+
/// <returns>Ответ от сервера или null</returns>
48+
public virtual async Task<PaymentResponse?> CreatePaymentAsync(PaymentRequest data)
3549
=> JsonConvert.DeserializeObject<PaymentResponse>(await SendRequest("invoice/create", LavaType.any, HttpMethod.Post, data.ToString()));
36-
public async Task<PaymentInfo?> GetPaymentInfoAsync(string id)
50+
/// <summary>
51+
/// Получение информации о выставленном счете, в т.ч. о том, оплачен ли счет
52+
/// </summary>
53+
/// <param name="id">айди выставленного счета</param>
54+
/// <returns>Ответ от сервера или null</returns>
55+
public virtual async Task<PaymentInfo?> GetPaymentInfoAsync(string id)
3756
=> JsonConvert.DeserializeObject<PaymentInfo>(await SendRequest("invoice/info", LavaType.any, HttpMethod.Post, id));
57+
/// <summary>
58+
/// Установка webhook для получения информации о пополнениях, оплате выставленных счетов и т.д.
59+
/// </summary>
60+
/// <param name="url">HTTPS url до вашего бекенда, куда должен приходить вебхук</param>
61+
/// <returns></returns>
3862
public async Task SetWebhookUrl(string url)
3963
=> await SendRequest("invoice/set-webhook", LavaType.any, HttpMethod.Post, url);
64+
/// <summary>
65+
/// Проверка токена
66+
/// </summary>
67+
/// <returns></returns>
4068
public async Task<bool> pingAsync()
4169
=> JsonNode.Parse(await SendRequest("test/ping", LavaType.any, HttpMethod.Get))?["status"]?.ToString().Equals(true) ?? false;
4270
}
43-
public class PublicLavaAPI : ILavaAPI
71+
public sealed class PublicLavaAPI : LavaAPI
4472
{
45-
// Для обычных юзеров + общедоступное
73+
/// <summary>
74+
/// Для обычных юзеров, т.е. вкладка Кошелек
75+
/// </summary>
76+
/// <param name="token">токен от вашего аккаунта</param>
4677
public PublicLavaAPI(string token) : base(token, LavaType.wallet) { }
4778

79+
/// <summary>
80+
/// Получение кошельков на вашем аккаунте
81+
/// </summary>
82+
/// <returns>Список из кошельков или null</returns>
4883
public async Task<Wallet[]?> getWallets()
4984
=> JsonConvert.DeserializeObject<Wallet[]>(await SendRequest("wallet/list", LavaType.wallet, HttpMethod.Get));
85+
/// <summary>
86+
/// Cоздние заявки на вывод
87+
/// </summary>
88+
/// <param name="withdraw">данные, передаваемые в запрос</param>
89+
/// <returns>Стандартный ответ от сервера или null</returns>
5090
public async Task<DefaultResponse?> MakeWithdraw(Withdraw withdraw)
5191
=> JsonConvert.DeserializeObject<DefaultResponse>(await SendRequest("withdraw/create", LavaType.wallet, HttpMethod.Post, withdraw.ToString()));
92+
/// <summary>
93+
/// Информация о выводе
94+
/// </summary>
95+
/// <param name="id">Id заявки</param>
96+
/// <returns>Информация о выводе</returns>
5297
public async Task<WithdrawInfo?> InfoWithdrawAsync(string id)
5398
=> JsonConvert.DeserializeObject<WithdrawInfo>(await SendRequest("withdraw/info", LavaType.wallet, HttpMethod.Post, id));
99+
/// <summary>
100+
/// Создание перевода
101+
/// </summary>
102+
/// <param name="data">Данные, передаваемые в запрос</param>
103+
/// <returns>Стандартный ответ от сервера или null</returns>
54104
public async Task<DefaultResponse?> MakeTransfer(Transfer data)
55105
=> JsonConvert.DeserializeObject<DefaultResponse>(await SendRequest("transfer/create", LavaType.wallet, HttpMethod.Post, data.ToString()));
106+
/// <summary>
107+
/// Получение информации о переводе
108+
/// </summary>
109+
/// <param name="id">Id перевода</param>
110+
/// <returns>Данные о переводе</returns>
56111
public async Task<TransferData?> GetTransferDataAsync(string id)
57112
=> JsonConvert.DeserializeObject<TransferData>(await SendRequest("transfer/info", LavaType.wallet, HttpMethod.Post, id));
113+
/// <summary>
114+
/// Получение всех транзакций
115+
/// </summary>
116+
/// <param name="transaction">Необ. данные для настройки вывода</param>
117+
/// <returns>Все транзакции</returns>
58118
public async Task<Transaction[]?> GetTransactionsAsync(TransactionParam? transaction = null)
59119
=> JsonConvert.DeserializeObject<Transaction[]>(await SendRequest("transactions/list", LavaType.wallet, HttpMethod.Post, transaction?.ToString()));
120+
/// <summary>
121+
/// Получение банков, подключенных к СБП
122+
/// </summary>
123+
/// <returns>Список банков</returns>
60124
public async Task<SBPBanks?> GetSBPBanksAsync()
61125
=> JsonConvert.DeserializeObject<SBPBanks>(await SendRequest("withdraw/get-sbp-bank-list", LavaType.wallet, HttpMethod.Post));
62126
}
63-
public class BusinessLavaAPI(string token) : ILavaAPI(token, LavaType.business)
127+
/// <summary>
128+
/// В РАЗРАБОТКЕ
129+
/// Часть lava.ru API, которая работает с бизнесом. Вкладка "Бизнес" dev.lava.ru
130+
/// </summary>
131+
/// <param name="token">Токен вашего аккаунта</param>
132+
public sealed class BusinessLavaAPI(string token) : LavaAPI(token, LavaType.business)
64133
{
65134
internal async Task<string> SendRequest(string path, LavaType? neededType = LavaType.business, HttpMethod? method = null, string? body = null, bool isSpecial = true)
66135
{
@@ -79,6 +148,11 @@ internal async Task<string> SendRequest(string path, LavaType? neededType = Lava
79148
return await req.Content.ReadAsStringAsync();
80149
}
81150
}
151+
/// <summary>
152+
/// Создание вывода
153+
/// </summary>
154+
/// <param name="request">Данные, передаваемые в запрос</param>
155+
/// <returns></returns>
82156
public async Task<PayoffResponse?> CreatePayoffAsync(PayoffRequest request)
83157
=> JsonConvert.DeserializeObject<PayoffResponse>(await SendRequest("business/payoff/create", body: request.ToString()));
84158
public async Task<PayoffDataResponse?> GetPayoffDataAsync(PayoffDataRequest request)

README.md

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,79 @@
1-
# Lava.NET
1+
# Lava.NET
2+
Áèáëèîòåêà äëÿ ðàáîòû ñ API ñàéòà lava.ru.
3+
Ïîêà ÷òî âåäåòñÿ ðàáîòà íàä áèçíåñ-÷àñòüþ API
4+
5+
Ñîâåòóåòñÿ ïåðåä èñïîëüçîâàíèåì ïðî÷èòàòü [API ñàéòà lava.ru](https://dev.lava.ru/)
6+
# Ïðèìåðû
7+
## Óñòàíîâêà áèáèëîòåêè
8+
```bash
9+
dotnet add package Lava.NET
10+
```
11+
### È èñïîëüçëîâàíèå â ïðîåêòå
12+
```cs
13+
using Lava.NET;
14+
public class Program
15+
{
16+
public static async Task Main(string[] args)
17+
{
18+
var publicLavaApi = new PublicLavaAPI("[ Âàø òîêåí ]");
19+
// ... Âàøà ëîãèêà
20+
}
21+
}
22+
```
23+
## Ïðèìåð èñïîëüçîâàíèÿ ñ ASP.NET ïðèëîæåíèåì:
24+
```cs
25+
// Startup.cs
26+
27+
public void ConfigureServices(IServiceCollection services)
28+
{
29+
var publicLavaApi = new PublicLavaAPI("[ Âàø òîêåí ]");
30+
services.AddControllers();
31+
services
32+
33+
.AddSwaggerGen();
34+
35+
services
36+
// ...Íàñòðîéêà ïðèëîæåíèÿ
37+
.AddSingleton(publicLavaAPI);
38+
}
39+
```
40+
41+
## Ïðèìåð ðàáîòû ñ âåáõóêîì(.NET 8):
42+
```cs
43+
// PaymentController.cs
44+
45+
[ApiController]
46+
[Route("/payment/")]
47+
public class PaymentController(PublicLavaAPI lavaAPI) : ControllerBase
48+
{
49+
50+
51+
[HttpPost("lava")]
52+
public async Task<IActionResult> ValidatePaymentLava([FromBody] WebhookResponse webhookResponse)
53+
{
54+
// Âàøà ëîãèêà
55+
56+
return Ok(); // Îáÿçàòåëüíî îòâå÷àòü 200, èíà÷å âåáõóêè áóäóò ïðèõîäèòü ñíîâà è ñíîâà, äî 15 ðàç.
57+
}
58+
}
59+
```
60+
61+
## Ñîçäàíèå ññûëêè íà îïëàòó:
62+
```cs
63+
var publicLavaApi = new PublicLavaAPI("[Âàø òîêåí]");
64+
var createdPayment = await publicLavaApi.CreatePaymentAsync(
65+
new (){
66+
comment = "Îïëàòà ïîêóïêè â Telegram áîòå", // Íåîá.
67+
hook_url = $"https://example.com/api/payment/lava", // Íåîá.
68+
merchant_id = "AskMeAboutBOT", // Íåîá.
69+
merchant_name = "AskMeAboutBOT", // Íåîá.
70+
custom_fields = $"Ëþáûå êàñòîìíûå äàííûå, ïåðåäàâàåìûå â webhook", // Íåîá.
71+
success_url = $"https://example.com/", // Íåîá.
72+
sum = 39.00f,
73+
wallet_to = "R123123123"
74+
}
75+
);
76+
Console.Out.WriteLine(createdPayment.url);
77+
78+
// >>> 'https://p2p.lava.ru/form?id=1ee31634-e3e0-34ce-1423-b5b4cb524c6a'
79+
```

Types/LavaAPI/Payment.cs

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,105 @@ namespace Lava.NET.Types.LavaAPI
88
{
99
public class PaymentRequest : IBase
1010
{
11-
public string wallet_to { get; set; }
12-
public float sum { get; set; }
11+
/// <summary>
12+
/// Ваш номер счета
13+
/// </summary>
14+
public string wallet_to { get; set; }
15+
/// <summary>
16+
/// Сумма с копейками и f на конце
17+
/// Пример: 1.00f
18+
/// </summary>
19+
public float sum { get; set; } = 1.00f;
20+
/// <summary>
21+
/// Уникальный номер счета в вашей системе
22+
/// </summary>
1323
public string? order_id { get; set; }
24+
/// <summary>
25+
/// Url для отправки webhook
26+
/// </summary>
1427
public string? hook_url { get; set; }
15-
public string? success_url { get; set; }
28+
/// <summary>
29+
/// Url для переадресации в случае успешной оплаты
30+
/// </summary>
31+
public string? success_url { get; set; }
32+
/// <summary>
33+
/// Url для переадресации в случае неуспешной оплаты
34+
/// </summary>
1635
public string? fail_url { get; set; }
36+
/// <summary>
37+
/// Время жизни счета в минутах
38+
/// Мин: 1 ; Макс: 43200
39+
/// </summary>
1740
public int? expire { get; set; } = 43200;
41+
/// <summary>
42+
/// С кого списывать комиссию:
43+
/// 1 - с клиента
44+
/// 0 - с магазина
45+
/// </summary>
1846
public string? subtract { get; set; }
47+
/// <summary>
48+
/// Дополнительные данные предаваемые в вебхуке
49+
/// </summary>
1950
public string? custom_fields { get; set; }
51+
/// <summary>
52+
/// Комментарий
53+
/// </summary>
2054
public string? comment { get; set; }
55+
/// <summary>
56+
/// ID марчанта(только в вебхуке)
57+
/// </summary>
2158
public string? merchant_id { get; set; }
59+
/// <summary>
60+
/// Название мерчанта (отображается в форме перевода)
61+
/// </summary>
2262
public string? merchant_name { get; set; }
2363
}
2464
public class PaymentResponse : IBase
2565
{
66+
/// <summary>
67+
/// Статус запроса
68+
/// </summary>
2669
public string status { get; set; }
70+
/// <summary>
71+
/// Номер счета на оплату
72+
/// </summary>
2773
public string id { get; set; }
74+
/// <summary>
75+
/// Ссылка на оплату
76+
/// </summary>
2877
public string url { get; set; }
78+
/// <summary>
79+
/// Время истечения счета
80+
/// </summary>
2981
public int expire { get; set; }
82+
/// <summary>
83+
/// Сумма счета
84+
/// </summary>
3085
public string sum { get; set; }
86+
/// <summary>
87+
/// // URL для переадресации после успешной оплаты
88+
/// </summary>
3189
public string success_url { get; set; }
90+
/// <summary>
91+
/// URL для переадресации после неудачной оплаты
92+
/// </summary>
3293
public string fail_url { get; set; }
94+
/// <summary>
95+
/// адрес для вебхука
96+
/// </summary>
3397
public string hook_url { get; set; }
98+
/// <summary>
99+
/// Дополнительное поле
100+
/// </summary>
34101
public string custom_fields { get; set; }
102+
/// <summary>
103+
/// ID и наименование мерчанта
104+
/// </summary>
35105
public string merchant_name { get; set; }
106+
/// <summary>
107+
/// ID и наименование мерчанта
108+
/// </summary>
109+
36110
public string merchant_id { get; set; }
37111
}
38112
public class Invoice : IBase

Types/LavaAPI/SBPBanks.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@ namespace Lava.NET.Types.LavaAPI
88
{
99
public class Datum : IBase
1010
{
11+
/// <summary>
12+
/// ID банка
13+
/// </summary>
1114
public object id { get; set; }
15+
/// <summary>
16+
/// Название
17+
/// </summary>
1218
public string name { get; set; }
1319
}
1420

0 commit comments

Comments
 (0)