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

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

  • Разработка Telegram ботов (только Bot API)
  • Разработка коннекторов для разноплановых API интеграций
  • Разработка модулей для проектов на базе Laravel / OpenCart / WordPress
  • Разработка веб-приложений «под ключ»

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

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

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

  • PHP, HTML, CSS, JavaScript
  • Фреймворки - Laravel, Vue.js, jQuery, Bootstrap
  • Базы данных - MySQL, MongoDB
  • Шаблонизаторы - Blade, Twig
  • API - REST, SOAP, GraphQL

Отзывы

Alex Shu - 21.11.2022
за выполнение заказа Написать плагин записи голоса для WordPress
Отличный специалист и профессиональный подход. Все выполнено качественно и в срок. Большое спасибо за проделанную работу!
Назар Марчук - 24.09.2022
за выполнение заказа Починить на сайте разметку scheme, на opencart
Выполнил все быстро и качественно, рекомендую.
Алексей Сотников - 24.05.2022
за выполнение заказа Написать функцию загрузки файлов для wordpress acf по крону
Спасибо за выполнение проделанной работы, все работает, как и нужно было согласно тз. Файл скачивается, и прикрепляется в нужное поле к записи.
Дмитрий Нестеренко - 20.04.2022
за выполнение заказа Нужна доработка проекта, front/backend разработчик. Расширение функционала согласно ТЗ.
Все четко, профессионально и в срок!
Антон Ланцов - 12.03.2022
за выполнение заказа Вывести ответ из Гугл таблиц на страницу сайта на Тильде
Сделал за пару часов. Очень благодарны. Спасибо!
Читать все отзывы

Портфолио

Калькулятор стоимости полиса ОСАГО
Калькулятор стоимости полиса ОСАГО
Многоступенчатый фильтр подбора аккумулятора для OpenCart
Многоступенчатый фильтр подбора аккумулятора для OpenCart
Подключение и настройка поискового движка Sphinx
Подключение и настройка поискового движка Sphinx
Автоматизация действий в системе Мой Склад
Автоматизация действий в системе Мой Склад
Смотреть все работы

Образцы кода

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"]')
            .prop('disabled', false)
            .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', strtotime('+1 day'))
    );

    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