Пример подключения к 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, qiwi, api
Читайте также:




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Обнаружение изменений файлов с помощью FileSystemWatcher C#
Занимательная постапокалиптическая сказка
Мистическое фэнтези и тюрьма