Эта библиотека предназначена для лёгкого взаимодействия с API DonatePay через .NET (.Net Core & .Net Framework & .Net Standart ofc). С помощью этой либы вы сможете:
- Получать информацию о профиле (ID, никнейм, текущий баланс, ссылка на аватар и сумма выведенных средств за всё время)
- Создавать фейковые оповещения о донатах — например, чтобы что-то проверить.
- Получать список транзакций и уведомлений, в том числе указывая фильтры(критерии для поиска)
P.S. I think 100% DonatePay audience understands Russian language, but if i'm wrong — let me know in issues and i'll translate this page to English.
Если библиотека оказалась полезной для тебя, и возникло острое желание задонатить, это возможно. Вот моя ссылка на DonatePay. Все собранные деньги пойдут на Dr.Pepper.
Библиотека доступна в виде nuget-пакета.
Install-Package DonatePay
using DonatePay;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var donatePayResponse = await client.GetUserAsync();
if(donatePayResponse.Error != null)
{
Console.WriteLine($"Ooops! Status Code: {donatePayResponse.Error.StatusCode}");
}
else
{
Console.WriteLine("User " + donatePayResponse.User.Name);
Console.WriteLine("Id = " + donatePayResponse.User.Id);
Console.WriteLine("Balance = " + donatePayResponse.User);
// and etc.
}Чтобы получить список транзакций указывать фильтр не обязательно, но в этом случае вам будут возвращены последние 25 транзакций:
using DonatePay;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var donatePayResponse = await client.GetTransactions();Или, например, вы можете запросить 33 записи (вместо 25), и указать, чтобы их ID был в промежутке от 12345 до 999999, при этом вам нужны только завершенные транзакции (без тех, что в статусе «Отменено» или «В ожидании»), с типом «Вывод средств», и как вишенка на торте — отфильтровать вы всё это хотите по возрастанию (не суммы, а ID транзакции). Выглядеть этот запрос будет так:
using DonatePay;
using DonatePay.Base.Enums;
using DonatePay.Base.Models.Request;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var filter = new TransactionsFilter
{
Limit = 33,
After = 12345,
Before = 999999,
Order = OrderType.ASC,
Status = TransactionStatus.Success,
Type = TransactionType.Cashout
};
var donatePayResponse = await client.GetTransactions(filter);Создать тестовое оповещение можно без параметров. В этом случае комментарий, имя донатера и сумма будут сгенерированы случайным образом, а дата будет подставлена текущая (DateTime.Now):
using DonatePay;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var donatePayResponse = await client.CreateNotification();Но вы можете настроить все необходимые параметры, которые даёт настраивать DonatePay:
using DonatePay;
using DonatePay.Base.Models.Request;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var filter = new CreateNotificationFilter
{
Comment = "Топор весит 1 кг + пол топора. Сколько весит топор?",
Name = "Naglfario",
Date = DateTime.Now.AddYears(-1).AddDays(-10),
Notification = false,
Sum = 100
};
var donatePayResponse = await client.CreateNotification(filter);
if(donatePayResponse.Error != null)
{
Console.WriteLine($"Ooops! Status Code: {donatePayResponse.Error.StatusCode}");
}
else
{
Console.WriteLine(donatePayResponse.Message);
}Тут тоже не обязательно указывать параметры, но в этом случае автоматически вам будут возвращены последние 25 записей:
using DonatePay;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var donatePayResponse = await client.GetNotifications();Однако, при желании можно указать, что вам нужны только не просмотренные (View = false) оповещения, у которых ID > 12345, при этом первые 5 найденных оповещения нужно скипнуть, и если что-то осталось — вернуть последние 10 штук:
using DonatePay;
using DonatePay.Base.Models.Request;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var filter = new GetNotificationsFilter
{
Limit = 10,
After = 12345,
Skip = 5,
View = false
};
var donatePayResponse = await client.GetNotifications(filter);Исключения никак не ловятся, поэтому обрабатывайте их сами. По идее, в случае ошибки, DonatePay декларирует, что вернет JSON ответ с некоторыми параметрами. Однако, на деле это не так, и если попытаться выполнить два запроса подряд, сайт вернет статус-код 429, но вместо джейсонины там будет raw html. Поэтому в подобных случаях эта либа в Response-объекте вернет HTML и статус-код:
using DonatePay;
using System.IO;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE");
var firstResponse = await client.GetUserAsync(); // firstResponse.Error will be null
var secondResponse = await client.GetUserAsync(); // secondResponse.Error will not be null
Console.WriteLine(secondResponse.Error.StatusCode);
File.WriteAllText("SecondResponseError.html", secondResponse.Error.HtmlContent);P.S. Свойство response.Error есть у всех запросов — на создание оповещения, на получение профиля, списка транзакций, списка оповещений, но в случае если ошибки во время выполнения запроса не произошло, это свойство будет null
Вы можете проверить, что объект фильтра рендерится как нужно в URL-параметры. Правда, есть нюанс — фильтр запроса на создание оповещения посылается POST-запросом, поэтому в URL-параметры не рендерится. Но в случае с получением транзакций или оповещений это можно сделать довольно легко:
using DonatePay.Base.Enums;
using DonatePay.Base.Models.Request;
var getNotiFilter = new GetNotificationsFilter
{
After = 12345,
Limit = 44,
Order = OrderType.ASC,
Type = NotificationType.Follower,
Skip = 100,
View = true
};
var transFilter = new TransactionsFilter
{
Before = 999000,
Limit = 5,
Order = OrderType.DESC,
Skip = 99,
Status = TransactionStatus.User,
Type = TransactionType.Donation
};
Console.WriteLine(getNotiFilter.ToString());
Console.WriteLine(transFilter.ToString());В случае необходимости, если DonatePay сменит домен, или ссылку на API, базовую часть ссылки можно будет легко подменить. Сейчас это https://donatepay.ru/api/v1/
using DonatePay;
var client = new DonatePayClient("INSERT_YOUR_TOKEN_HERE", "NEW BASE URL");