На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Пример подключения к 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

Читайте также:

  • Работа с API






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




Межсайтовая атака XSS
VirtualBox и Ubuntu: советы


© upread.ru 2013-2022
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.