php вывод ошибок

  1. В самом скипте
error_reporting(E_ALL);
 ini_set('display_errors','On');

2. В настройках php.ini

error_reporting = E_ALL
display_errors = On
display_startup_errors = On
// логировать ошибки
log_errors = On
error_log = php_errors.log

3. В .htaccess

php_flag display_startup_errors on
php_flag display_errors on
php_flag html_errors on
php_flag  log_errors on
php_value error_reporting E_ALL  
php_value error_log  PHP_errors.log

paymaster запрос для онлайн-касс

С появлением онлайн-касс paymaster поспешил обновить апи, к-е почему то не представлено на сайте, а доступно только после общения с ТП. Для печати чеков пеймастер добавил в запрос параметры товаров LMI_SHOPPINGCART. (далее…)

php webdav yandex-disk

Бэкапы можно хранить на яндекс диске. Складируем их по протоколу webdav на php. Есть клиент под этот протокол. Качаем http://sabre.io/dav/install/


composer require sabre/dav ~3.2.0

Документация не самая полная, однако в коде куча комментов, так что без проблем разобраться. Нужен модуль php-dom.


use Sabre\DAV\Client;

include 'vendor/autoload.php';

$settings = array(
    'baseUri' => 'https://webdav.yandex.ru',
    'userName' => 'user',
    'password' => 'pass123',
    // 'proxy' => 'locahost:8888',
);

// должна лежать на уровень выше текущей папки
$LOCAL_back_folder = 'backups';
$YA_back_folder = 'my_backups';

$client = new Client($settings);

(далее…)

shiptor api добавление посылки

Создадим посылку, используя сервис. Shiptor предоставляет Public и Shipping api. Нам нужен 2-й, метод addPackage.
Код можно скачать с этого репозитория https://github.com/esteit/shiptor-russia-php-api-client . Можно воспользоваться примером shiptor-russia-php-api-client/samples/ShippingEndpoint/AddPackage.php (далее…)

ПЭК публичный апи для расчета стоимости доставки

Публичное апи для расчета стоимости перевозки достаточно простое. Делаем GET запрос на адрес http://calc.pecom.ru/bitrix/components/pecom/calc/ajax.php. В параметрах передаем габариты груза, город отправки и доставки. Обратите внимание, минусы для городов обязательны!
(далее…)

symfony form

Создадим форму симфони.
Понадобятся всего 4 зависимости.


      "require": {
        "symfony/form": "^3.3",
		"symfony/twig-bridge": "^3.3",
		"symfony/translation": "^3.3",
		"symfony/security-csrf": "^3.3"
      }

Далее подключаем классы формы, твига, переводчика и защиту от Csrf атак.
(далее…)

google captcha v2

Гугл капча сейчас везде. Плюс ее в том что она заменяет CSRF-токен.

Регистрируем свой домен по ссылке https://www.google.com/recaptcha/admin#list . Получаем ключи. Гугл предоставляет свое мини-апи для запросов на проверку.   Скачать его можно тут https://github.com/vaajnur/recaptcha2

Кстати, если не любите ооп и композер, в конце статьи есть способ проверки капчи всего лишь 3мя строчками кода.

Размещаем на страничке HTML-код капчи с секретным ключом.

Подключаем javascript


<script src='https://www.google.com/recaptcha/api.js'></script>

обработка отправленной капчи

(далее…)

php SOAP api на примере DPD

Поработаем с протоколом SOAP на примере DPD api. Напишем запрос и получим результат.


// создаем объект клиента
$soap = new SoapClient( 'http://ws.dpd.ru/services/geography2?wsdl' );
// вызовем метод getCitiesCashPay
$obj = $soap->getCitiesCashPay($arData);
// в параметрах можно передать только ключи. Внимание, здесь нерабочие ключи
$arData['request']['auth'] = array(
			'clientNumber' => 1230000123,
			'clientKey' => '023E2F77487F5BF05B663ACBB95F42079D961111');

(далее…)

composer autoload

В Composer 2 основные директивы: autoload для загрузки кастомных классов, require — для сторонних библиотек.
Рассмотрю автозагрузку файлов.

Создаем пустой класс  Api в Api.php . Заметьте, название класса должно совпадать с именованием файла.


class Api{

	public function __construct(){
		echo "class Api";
	}
}

(далее…)

php REST api

Первое знакомство с rest api для новичка может оказаться затруднительным, т.к. просто и с толком нигде не объяснено. Люди пытаются показать на примерах микрофреймворков, тем самым усугубляя ситуацию.
На самом деле все просто — rest api это запрос, при к-м передается не просто переменные,как при POST или GET, а самый настоящий xml или json, в ответе получая такой же формат. Покажу на примере yandex geolocation. Геолокацию с использованием api на ООП я публиковал http://phpjs.ru/2017/03/21/google-geolocation-api/ ‎.  Здесь покажу голый запрос.
Создаем минимальный json. Ключ к апи геолокации яндекса надо получить. Заметьте, почти все сервисы для протокола rest требуют авторизации, напр. в amocrm, shiptor, google geo, elba бухгалтерия, sms рассылка — все они дают 200 ответ только при авторизации.
(далее…)

sip телефония

Первое знакомство с сип телефонией. Не буду углубляться в технологии  виртуальных АТС, sip server asterisk  и проч. Просто зарегаем бесп. sip аккаунты и используем любой sip клиент (так называемый софтфон).



Сервисы бесп. sip аккаунтов — ekiga.net, iptel.org, sip2sip.info, sipnet.ru . После реги-ии ваш аккаунт будет выглядеть довольно привычным образом: user1@domen.ru
(далее…)

google geolocation api , php yandex locator

Получим город с помощью google geo api, а также яндекс Локатор . Апи обоих практически идентичны, надо получить апи-ключ и там и там. Запросы в гугл-апи пишем сами, в яндексе все уже есть, просто скачайте по ссылке.
Для начала надо создать проект, чтобы получить ключ. Далее все просто: делаем http POST запрос, с параметрами в формате JSON.
(далее…)

MVC приложение на php. Часть 6. crud, mapping

В этой статье сделаем админку полезной — она сможет создавать статьи, категории, редактировать, удалять. А также привяжем статьи к категориям.
Плодить контроллеры не будем, все добавим в 2 базовых.
Итак, форма для ред-ия та же что для просмотра, соот-но экшн будет одинаковый. Принимаем post данные

application/controllers/admin/articles.php
(далее…)

MVC приложение на php. Часть 5. Админ панель.

На этом уроке рассмотрю создание админ панели. Отделение admin от client мы сделали заранее, это плюс. Осталось добавить контрол-ры, модели, вьюхи для админской части. Тему я взял Admin LTE от того же бутстрап, версия еще 1-я.
Решил заменить имена классов, чтобы избавиться от zendовского snake case. Поменял namespace для каждого класса, сделал его соответствующим пути.

application/controllers/client/articles.php
(далее…)

MVC приложение на php. Часть 4

Cоздадим базовый шаблон и шаблон контента, в шаблоне контента выведем результаты запроса. Уже сможем запустить наш application. Для каждой статьи напишем экшн детальной страницы.
Для базового шаблона выбрал тему от bootstrap. Cоот-но надо будет подключить эту биб-ку.

css/bootstrap.min.css

    <link href="css/bootstrap.min.css" rel="stylesheet"/>

(далее…)