Пример подключения к API от QIWI кошелька на C# для новичков
Понадобилось тут поработать с апи киви на десктопе – набросать небольшую программку для Windows, типа бота. Быстрый поиск готовых решений не выдал, поэтому пришлось изобрести свой велосипед, тем более что оказалось это не так уж сложно. Ниже в заметке расскажу как для примера получить последние десять платежей на киви – остальное уже без проблем можно реализовать по аналогии.
Итак, подразумевается, что у вас уже есть ключ киви с необходимыми разрешениями, а также есть компьютер. Итак, сначала пара методов.
private static string UrlEncodeString(string text){
var result = text == null ? "" : Uri.EscapeDataString(text).Replace("%20", "+");
return result;
}
private static string UrlEncodeParams(Dictionary args)
{
var sb = new StringBuilder();
var arr =
args.Select(
x =>
string.Format(CultureInfo.InvariantCulture, "{0}={1}", UrlEncodeString(x.Key), UrlEncodeString(x.Value))).ToArray();
sb.Append(string.Join("&", arr));
return sb.ToString();
}
С помощью этих методов мы кодируем символы. Немного теории об этом можно почитать в данном моем материале. Теперь подготавливаем все к отправке запроса
HttpClientHandler httpClientHandler = new HttpClientHandler { };
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
HttpContent httpContent = null;
string apiCommand = $"/payment-history/v2/persons/{phone}/payments";
var relativeUrl = apiCommand;
NameValueDictionary args = new NameValueDictionary
{
{"rows", 10},
{ "operation","IN" }
};
relativeUrl += "?" + UrlEncodeParams(args);
HttpClient _client = new HttpClient(handler: httpClientHandler, disposeHandler: true);
_client.Timeout = TimeSpan.FromSeconds(30);
Ну а дальше уже идет сам запрос:
using (var request = new HttpRequestMessage(HttpMethod.Get,
new Uri(new Uri("https://edge.qiwi.com"), relativeUrl)
))
{
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Headers.Add("Authorization", "Bearer " + keyQiwi);
request.Content = httpContent;
try
{
var response = await _client.SendAsync(request).ConfigureAwait(false);
if (!response.IsSuccessStatusCode)
{
var resultAsString2 = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var json2 = JsonConvert.DeserializeObject(resultAsString2);
textBox3.Invoke((MethodInvoker)delegate
{
textBox3.Text = json2.ToString();
});
}
else
{
var resultAsString = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var json = JsonConvert.DeserializeObject<dynamic>(resultAsString);
textBox3.Invoke((MethodInvoker)delegate
{
textBox3.Text += res;
});
}
}
catch (System.Net.Http.HttpRequestException he)
{
textBox3.Invoke((MethodInvoker)delegate
{
textBox3.Text = "Ошибка сети " + Environment.NewLine;
});
}
}
Пара замечаний по коду выше. Вывод у меня идет в textBox3 – не стал менять для заметки – тут несложно разобраться. Результат я сразу конвертирую с помощью JsonConvert (using Newtonsoft.Json;) – но вы можете использовать что угодно.
Получилось не так сложно, но громоздко. Да и в будущем все же пришлось отказаться от десктопного решения в пользу веба, конкретно – PHP. Но там уже нашелся готовый класс, так что писать об этом не буду.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Программы на заказ
Отзывы
Контакты