Как отправить AJAX запрос к API DaData для получения и вывода информации на странице

В этой статье мы разберем, как с помощью AJAX-запроса отправить запрос к API Dadata для получения информации, к примеру, о банке по его БИК (Банковский идентификационный код). Мы используем технологии JavaScript, jQuery, PHP и подключаемся к внешнему сервису для получения данных.

Как отправить AJAX запрос к API DaData для получения информации

Важность использования API Dadata

Dadata — это сервис, который предоставляет быстрый и удобный способ работы с различными данными, такими как адреса, компании, банки и другие. В частности, его API позволяет получить подробную информацию о банке, используя его БИК. Это может быть полезно для создания банковских сервисов, финансовых приложений и любых других решений, где требуется знание точных реквизитов банков.

Подготовка к созданию запроса

Прежде чем создавать запрос к API Dadata, необходимо выполнить следующие шаги:

  1. Установите библиотеку dadata-php с GitHub. Это позволит вам легко интегрировать API Dadata в ваш PHP-проект.
  2. При вызове API укажите следующие заголовки:
    • Content-Type: application/json — указывает, что данные отправляются в формате JSON.
    • Accept: application/json — указывает, что вы ожидаете получить ответ в формате JSON.
    • Authorization: Token ваш_API_ключ — замените ваш_API_ключ на ваш реальный API-ключ, который можно получить при регистрации на сайте Dadata.

Код HTML и PHP

Приведенный ниже код позволяет пользователю ввести БИК банка, отправить запрос на сервер с помощью AJAX и получить информацию о банке, которая будет отображена в таблице на веб-странице.

Код HTML и JavaScript (AJAX-запрос)


<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>AJAX запрос</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<form id="bankForm">
    <label for="bankId">Введите БИК:</label>
    <input type="text" id="bankId" name="bankId" required>
    <button type="submit">Отправить</button>
</form>

<table id="resultTable" border="1">
    <thead>
    <tr>
        <th>Название</th>
        <th>Описание</th>
    </tr>
    </thead>
    <tbody>
    <!-- Результаты будут добавлены сюда -->
    </tbody>
</table>

<script>
    $(document).ready(function() {
        $('#bankForm').on('submit', function(event) {
            event.preventDefault(); // предотвращаем стандартное поведение формы

            const bankId = $('#bankId').val(); // получаем значение из формы

            $.ajax({
                url: 'ajax/dada.php', // URL вашего сервера
                type: 'POST',
                contentType: 'application/json',
                data: JSON.stringify({ query: bankId }),
                success: function(data) {
                    // Очищаем таблицу перед добавлением новых данных
                    $('#resultTable tbody').empty();

                    if (data.suggestions && data.suggestions.length > 0) {
                        const suggestion = data.suggestions[0].data; // Берем первое предложение

                        // Добавляем данные в таблицу в структурированном виде
                        $('#resultTable tbody').append(`
                                <tr><td>Наименование</td><td>${suggestion.name.payment || 'Не указано'}</td></tr>
                                <tr><td>БИК</td><td>${suggestion.bic || 'Не указано'}</td></tr>
                                <tr><td>SWIFT</td><td>${suggestion.swift || 'Не указано'}</td></tr>
                                <tr><td>ИНН</td><td>${suggestion.inn || 'Не указано'}</td></tr>
                                <tr><td>КПП</td><td>${suggestion.kpp || 'Не указано'}</td></tr>
                                <tr><td>Регистрационный номер</td><td>${suggestion.registration_number || 'Не указано'}</td></tr>
                                <tr><td>Корреспондентский счет</td><td>${suggestion.correspondent_account || 'Не указано'}</td></tr>
                                <tr><td>Город для платежа</td><td>${suggestion.payment_city || 'Не указано'}</td></tr>
                                <tr><td>Тип организации</td><td>${suggestion.opf.type || 'Не указано'}</td></tr>
                                <tr><td>Адрес</td><td>${suggestion.address.value || 'Не указано'}</td></tr>
                                <tr><td>Состояние</td><td>${suggestion.state.status || 'Не указано'}</td></tr>
                            `);

                        // Добавляем дополнительные данные о ЦБ
                        if (suggestion.cbr) {
                            $('#resultTable tbody').append(`
                                    <tr><td>ЦБ Наименование</td><td>${suggestion.cbr.name.payment || 'Не указано'}</td></tr>
                                    <tr><td>ЦБ БИК</td><td>${suggestion.cbr.bic || 'Не указано'}</td></tr>
                                    <tr><td>ЦБ Адрес</td><td>${suggestion.cbr.address.value || 'Не указано'}</td></tr>
                                `);
                        }
                    } else {
                        $('#resultTable tbody').append('<tr><td colspan="2">Нет данных</td></tr>');
                    }
                },
                error: function(xhr, status, error) {
                    console.error('Ошибка AJAX:', status, error);
                    $('#resultTable tbody').append('<tr><td colspan="2">Ошибка запроса</td></tr>');
                }
            });
        });
    });
</script>
</body>
</html>

Код PHP (ajax/dada.php)


<?php
header('Content-Type: application/json');

$data = json_decode(file_get_contents('php://input'), true); // Получаем JSON из POST-запроса

if (isset($data['query'])) {
    $query = $data['query'];

    $options = [
        'http' => [
            'method' => 'POST',
            'header' => [
                'Content-Type: application/json',
                'Accept: application/json',
                'Authorization: Token ваш_API_ключ'
            ],
            'content' => json_encode(['query' => $query])
        ]
    ];

    $builder = stream_context_create($options);
    $document = file_get_contents('http://suggestions.dadata.ru/suggestions/api/4_1/rs/findById/bank', false, $builder);

    if ($document === FALSE) {
        echo json_encode(['error' => 'Ошибка запроса к Dadata']);
    } else {
        echo $document; // Возвращаем ответ от Dadata
    }
} else {
    echo json_encode(['error' => 'Не указан БИК.']);
}
?>

Разбор кода

HTML-разметка

  1. В начале создаем форму с полем ввода для БИК банка и кнопкой для отправки формы.
  2. Далее создаем таблицу, в которой будут отображаться результаты — наименование, БИК, SWIFT, ИНН, КПП, и другие поля, полученные от Dadata.

JavaScript (AJAX запрос)

  1. При отправке формы (`$('#bankForm').on('submit', function(event) {...}`) происходит отмена стандартного поведения формы с помощью `event.preventDefault()`, чтобы не перезагружать страницу.
  2. После этого, мы берем значение БИК из поля ввода и отправляем его на сервер с помощью AJAX-запроса.
  3. В запросе используются следующие параметры:
    • url: путь к PHP-скрипту на сервере, который будет обрабатывать запрос.
    • type: метод запроса — в данном случае POST.
    • contentType: тип содержимого, указываем как application/json.
    • data: данные, которые отправляются на сервер в формате JSON.
  4. Когда данные получены, мы проверяем, если в ответе есть предложения (data.suggestions), и если они есть, добавляем их в таблицу.
  5. Если данных нет, показываем сообщение "Нет данных".

PHP-скрипт (ajax/dada.php)

  1. PHP-скрипт принимает JSON-запрос с БИК.
  2. Делаем запрос к API Dadata с использованием PHP функции file_get_contents() и передаем данные о БИК в формате JSON.
  3. Если запрос выполнен успешно, возвращаем ответ от Dadata. Если возникла ошибка, выводим соответствующее сообщение.

Пример вывода полученных данных после запроса

Название Описание
Наименование ПАО Сбербанк
БИК 044525225
SWIFT SABRRUMM012
ИНН 7707083893
КПП 773601001
Регистрационный номер 1481
Корреспондентский счет 30101810400000000225
Город для платежа г Москва
Тип организации BANK
Адрес г Москва, ул Вавилова, д 19
Состояние ACTIVE
ЦБ Наименование ГУ БАНКА РОССИИ ПО ЦФО
ЦБ БИК 044525000
ЦБ Адрес 115035, г Москва 35, ул Балчуг, 2

Заключение

Данный пример демонстрирует, как интегрировать внешний API с помощью AJAX-запросов. Это решение позволяет динамически получать и отображать информацию о банках, что полезно для финансовых и банковских приложений.

Теги:  AJAX, API, Dadata, JavaScript, jQuery, PHP

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Интернет-магазин на готовом решении

от 7 дней

от 40 000 рублей
запуск сайта в максимально короткие сроки

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.