Михаил Воронов
Веб-разработчик

Список оказываемых услуг

  • Разработка чат-ботов для Telegram  –  от 10.000 ₽
  • Разработка коннекторов для разноплановых API интеграций  –  от 10.000 ₽
  • Разработка веб-сервисов для личного пользования либо внутренних нужд компании  –  от 50.000 ₽
  • Разработка дополнительного функционала для Laravel / OpenCart (модули, интеграции, etc.)  –  1.000 ₽ / час

Преимущества работы со мной

  • Я не являюсь посредником и всю работу выполняю лично
  • Строго соблюдаю оговоренные сроки
  • Пишу чистый структурированный код
  • При разработке тщательно продумываю архитектуру и логику
  • Оказываю последующую техническую поддержку

Перечень используемых технологий

  • PHP, MySQL, HTML, CSS, JavaScript
  • Фреймворки: Laravel, Bootstrap, jQuery
  • Шаблонизаторы: Twig, Blade
  • API: REST, SOAP

Портфолио

Модуль подбора аккумулятора по марке автомобиля
[OpenCart] Модуль подбора аккумулятора по марке автомобиля
Подключение и настройка поискового движка Sphinx
[DLE] Подключение и настройка поискового движка Sphinx
Автоматизация действий в системе МойСклад
[API] Автоматизация действий в системе МойСклад
Редизайн сайта аренды квартир
[DLE] Редизайн сайта аренды квартир
Смотреть все работы

Отзывы

Глеб Буров - 16.07.2020
за выполнение заказа Модуль парсинга через наш хост, через API и XML
Михаил сделал все в лучшем виде, как и обещал. Вопросов нет. Все работает как и должно. Спасибо
Кирилл Орлов - 21.06.2020
за выполнение заказа Разработать javascript форму для расчета стоимости ОСАГО
Быстро, качественно, профессионально
Михаил Ершов - 01.05.2020
за выполнение заказа Разработка api для запроса информации по VIN автомобиля
Работа сделана в срок. В целом доволен результатом. Рекомендую Михаила!
Добрый день! Всем рекомендую Михаила! Сделал быстро. Что для нас было очень важно. Обязательно будем еще работать!
Михаил Ефименко - 11.11.2019
за выполнение заказа Разработать панель мониторинга данных Битрикс24 и телефонии
Оперативно разобрался и решил задачу.
Читать все отзывы

Образцы кода

HTML
CSS
JS
PHP
<!DOCTYPE html>
<html lang="ru">
    <head>
        <title>Курс рубля по отношению к выбранной валюте</title>

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta name="robots" content="noindex, nofollow">
        
        <link rel="stylesheet" href="./common.css">
    </head>
    <body>
        <p>Выберите валюту и нажмите на кнопку:</p>
        <p>
            <select name="currency">
                <option value="">---</option>
                <option value="AUD">Австралийский доллар</option>
                <option value="AZN">Азербайджанский манат</option>
                <option value="GBP">Фунт стерлингов Соединенного королевства</option>
                <option value="AMD">Армянских драмов</option>
                <option value="BYN">Белорусский рубль</option>
                <option value="BGN">Болгарский лев</option>
                <option value="BRL">Бразильский реал</option>
                <option value="HUF">Венгерских форинтов</option>
                <option value="HKD">Гонконгских долларов</option>
                <option value="DKK">Датских крон</option>
                <option value="USD">Доллар США</option>
                <option value="EUR">Евро</option>
                <option value="INR">Индийских рупий</option>
                <option value="KZT">Казахстанских тенге</option>
                <option value="CAD">Канадский доллар</option>
                <option value="KGS">Киргизских сомов</option>
                <option value="CNY">Китайских юаней</option>
                <option value="MDL">Молдавских леев</option>
                <option value="NOK">Норвежских крон</option>
                <option value="PLN">Польский злотый</option>
                <option value="RON">Румынский лей</option>
                <option value="XDR">СДР (специальные права заимствования)</option>
                <option value="SGD">Сингапурский доллар</option>
                <option value="TJS">Таджикских сомони</option>
                <option value="TRY">Турецкая лира</option>
                <option value="TMT">Новый туркменский манат</option>
                <option value="UZS">Узбекских сумов</option>
                <option value="UAH">Украинских гривен</option>
                <option value="CZK">Чешских крон</option>
                <option value="SEK">Шведских крон</option>
                <option value="CHF">Швейцарский франк</option>
                <option value="ZAR">Южноафриканских рэндов</option>
                <option value="KRW">Вон Республики Корея</option>
                <option value="JPY">Японских иен</option>
            </select>
            = <span id="rub-value">???</span> RUB
        </p>
        <p><button type="button" name="get_course">Получить курс</button></p>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="./init.js"></script>
    </body>
</html>
@import url('https://fonts.googleapis.com/css?family=Roboto:400,700');

body {
    margin: 0;
    padding: 10px 20px;
    font-family: Roboto, Arial, sans-serif;
    font-size: 14px;
    line-height: 19px;
}
p {
    margin: 10px 0;
}
select {
    width: 190px;
}
button {
    margin-top: 5px;
}
$('button[name="get_course"]').on('click', function() {
    let currency = $('select[name="currency"]').val();
    
    if (!currency) {
        alert('Выберите валюту.');
        return;
    }
    
    $('#rub-value').text('???');
    $('button[name="get_course"]')
        .prop('disabled', true)
        .data('text', $('button[name="get_course"]').text())
        .text('Выполняем...');
    
    $.get('./get_course.php', {
        currency: currency
    }, function(result) {
        if (result.error) {
            alert(result.error);
        } else {
            $('#rub-value').text(result.data);
        }
    }, 'json').done(function() {
        $('button[name="get_course"]')
            .removeAttr('disabled')
            .text($('button[name="get_course"]').data('text'));
    });
});
<?php

/**
* Get content by CURL
* 
* @param string $url
* 
* @return string | null
*/
function getContent($url): ?string
{
    $curlOptions = [
        CURLOPT_URL => $url,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_CONNECTTIMEOUT => 10,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_RETURNTRANSFER => true
    ];
    
    $curlHandler = curl_init();
    curl_setopt_array($curlHandler, $curlOptions);
    $content = curl_exec($curlHandler);
    $httpCode = curl_getinfo($curlHandler, CURLINFO_HTTP_CODE);
    curl_close($curlHandler);
    
    if ($httpCode != 200) {
        return null;
    }
    
    return $content;
}

$output = [];
$currency = $_GET['currency'] ?? null;

if (!$currency) {
    $output['error'] = 'Валюта не выбрана.';
} else {
    $data = getContent('https://www.cbr.ru/scripts/XML_daily.asp?date_req=' . date('d/m/Y'));

    if (!$data) {
        $output['error'] = 'Данные не могут быть получены, повторите попытку позднее.';
    } else {
        $xml = simplexml_load_string($data);
        
        foreach ($xml->Valute as $valute) {
            if ($valute->CharCode == $currency) {
                $value = (float) str_replace(',', '.', $valute->Value);
                $value = round($value, 2);
                $output['data'] = str_replace('.', ',', $value);
                
                break;
            }
        }
        
        if (!isset($output['data'])) {
            $output['error'] = 'Валюта не найдена.';
        }
    }
}

echo json_encode($output);

Данный код получает текущий курс рубля по отношению к выбранной валюте, используя XML-API ЦБ РФ.
Код полностью рабочий. Демо-версия примера доступна по ссылке https://voronoff.dev/demo/index.html