Пример подключения к 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Пара замечаний по коду выше. Вывод у меня идет в textBox3 – не стал менять для заметки – тут несложно разобраться. Результат я сразу конвертирую с помощью JsonConvert (using Newtonsoft.Json;) – но вы можете использовать что угодно.(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; }); } }
Получилось не так сложно, но громоздко. Да и в будущем все же пришлось отказаться от десктопного решения в пользу веба, конкретно – PHP. Но там уже нашелся готовый класс, так что писать об этом не буду.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Читайте также:
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.