vk api добавить пост на стену группы/лички

$postArr = 
  array (
    // 'owner_id' => '-1234567', // на стене группы, передается айди стены 
    'owner_id' => '78999999', // на стене в лк,
    'access_token' => 'b6ca0b9bf3fdgвпава65278c7919d246e376c13f07d3d3791b1f5f5a079c59486sdgsd...',
    'from_group' => '1',
    'message' => 'test 444',
    'attachments' => '',
    'v' => '5.71',
  );

extract($postArr);

$url = 'https://api.vk.com/method/wall.post';
$post = 'owner_id='.$owner_id.'&access_token='.$access_token.'&from_group=1&message='.$message.'&signed=0&v=5.42';
    $curl = curl_init();
    curl_setopt ($curl, CURLOPT_URL, $url);
    curl_setopt ($curl, CURLOPT_HEADER, 0);
    curl_setopt ($curl, CURLOPT_NOBODY, 0);
    curl_setopt ($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($curl, CURLOPT_POST, true);
    curl_setopt ($curl, CURLOPT_POSTFIELDS, $post);
    curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt ($curl, CURLOPT_SSL_VERIFYHOST, 0);
    $out = curl_exec($curl);
    curl_close ($curl);

var_dump($out);

cdek widget

https://widget.cdek.ru/

Логин и пароль от кабинета — это номер договора и ИНН, пароль следует поменять.

библиотеки виджета

<script id="ISDEKscript" type="text/javascript" src="widget/widjet.js"></script>
<script type="text/javascript" src="sdek.js"></script>
(далее…)

Водные знаки для картинок

Наложим сразу несколько картинок поверх основной.

<?php
// исходное изображение
$base_img="car.jpg";


// imagecreatetruecolor - создаёт новое изображение true color
// $result_image=imagecreatetruecolor($baseWidth, $baseHeight);

// выясняем расширение изображения на которое будем накладывать водяной знак
if(preg_match("/.gif/i",$base_img)):
	$result_image=imagecreatefromgif($base_img);
elseif(preg_match("/.jpeg/i",$base_img) or preg_match("/.jpg/i",$base_img)):
	$result_image=imagecreatefromjpeg($base_img);
elseif(preg_match("/.png/i",$base_img)):
	$result_image=imagecreatefrompng($base_img);
else:
	die("Ошибка! Неизвестное расширение изображения");
endif;
// узнаем размер изображения
// imagesx - получает ширину изображения
// imagesy - получает высоту изображения
$baseWidth=imagesx($result_image);
$baseHeight=imagesy($result_image);
// $size=getimagesize($base_img);

// указываем координаты, где будет располагаться водяной знак
/*
* $size[0] - ширина изображения
* $size[1] - высота изображения
* - 10 -это расстояние от границы исходного изображения
*/
// $cx=$size[0]-$baseWidth-10;
// $cy=$size[1]-$baseHeight-10;
$cx=0;
$cy=0;

/* imagecopyresampled - копирует и изменяет размеры части изображения
* с пересэмплированием
*/

$arr_of_waters = ['img/fari.png', 'img/nomer.png'];
// imagecreatefrompng - создаёт новое изображение из файла или URL
// водяной знак
// 
foreach ($arr_of_waters as $key => $value) {
	$info = pathinfo($value);
	$imgs_water[] = $info['filename'];

	$water=imagecreatefrompng($value);
	imagecopyresampled ($result_image, $water, $cx, $cy, 0, 0, $baseWidth, $baseHeight, $baseWidth, $baseHeight);
	imagedestroy($water);
}

/* imagejpeg - создаёт JPEG-файл filename из изображения image
* третий параметр - качество нового изображение 
* параметр является необязательным и имеет диапазон значений 
* от 0 (наихудшее качество, наименьший файл)
* до 100 (наилучшее качество, наибольший файл)
* По умолчанию используется значение по умолчанию IJG quality (около 75)
*/
$base_img_new = pathinfo($base_img)['filename'].$baseWidth.'_'.$baseHeight.implode('', $imgs_water).'.jpg';
if(file_exists($base_img_new)){
	echo "exist!";
	echo $base_img_new;
	return;
}
imagejpeg($result_image,$base_img_new,100);

// imagedestroy - освобождает память
imagedestroy($result_image);


// на всякий случай
// unset($result_image,$base_img);

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');

(далее…)

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"/>

(далее…)

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

В этом уроке мы создадим первую модель, таблицу для хранения данных, заполним ее демо-данными, сделаем запрос в контроллере.
Итак, DB layer мы написали. Теперь используем его.
Первый наш запрос будет без параметров, т.к. их нет. Выведем все записи.

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