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

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

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

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

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

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

  • Нативные: PHP, HTML, CSS, JavaScript
  • Фреймворки: Laravel, Vue, Bootstrap
  • Базы данных: MySQL, SQLite, MongoDB
  • Шаблонизаторы: Blade, Twig
  • Интерфейсы: REST, SOAP, GraphQL
  • Прочее: Redis, Sphinx, FFmpeg

Отзывы

Илья Кочкин - 27.02.2024
за выполнение заказа JavaScript для гугл таблиц
Отличный специалист, все прошло хорошо.
Александр Белоусов - 26.02.2024
за выполнение заказа Настроить MongoDB на сервере для продакшена
Спасибо за работу, работа была сделана быстро и качественно.
Эдуард Ильиных - 15.02.2024
за выполнение заказа Доработать скрипт, который передает данные с формы в amoCRM
Отлично выполнена задача. Быстро, качественно. Рекомендую.
Akzhol Serikuly - 08.02.2024
за выполнение заказа Интеграция форм WORDPRESS с AMO CRM
Все супер, сделал очень быстро. Цена отличная. Советую его всем!
Сергей Малкин - 02.01.2024
за выполнение заказа Простые правки в готовую верстку
Отлично поработали над версткой в новогодние выходные человек нашел время на проект, за что ему спасибо.
Читать все отзывы

Портфолио

Калькулятор стоимости полиса ОСАГО
Калькулятор стоимости полиса ОСАГО
Многоступенчатый фильтр подбора аккумулятора для 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