Улучшения приветствуются.
- Создайте папку assets/plugins/bytehand/, в ней файл создайте файл bytehand.php
- Скопируйте в него этот код:
<?php defined('IN_MANAGER_MODE') or die(); $dbname = $modx->db->config['dbase']; $dbprefix = $modx->db->config['table_prefix']; $status_list = isset($status_list) ? $status_list : '1,2,3,4,5,6'; $allowed_statuses = explode(',', $status_list); $status_tpl = array(); $status_tpl[1] = isset($status1_tpl) ? $status1_tpl : '1'; $status_tpl[2] = isset($status2_tpl) ? $status2_tpl : '2'; $status_tpl[3] = isset($status3_tpl) ? $status3_tpl : '3'; $status_tpl[4] = isset($status4_tpl) ? $status4_tpl : '4'; $status_tpl[5] = isset($status5_tpl) ? $status5_tpl : '5'; $status_tpl[6] = isset($status6_tpl) ? $status6_tpl : '6'; $output = ''; $e = $modx->Event; if ($e->name == 'OnSHKChangeStatus'){ $item_id = isset($order_id) ? $order_id : '';// id заказа. $status = isset($status) ? $status : ''; // номер статуса заказа. От 1 до 6. if($status_tpl[$status] && in_array($status,$allowed_statuses)){ $order_data = $modx->db->getRow($modx->db->select("*",$modx->getFullTableName('manager_shopkeeper'),"id = '$order_id'"),'assoc'); $contact_arr = unserialize($order_data["short_txt"]); $params['text'] = $modx->getChunk($status_tpl[$status]); $params['to'] = $contact_arr[$phonefield]; $bh = new byteHandApi($YOUR_ID, $YOUR_KEY, $YOUR_FROM); $response = $bh->api('send', $params); $response = json_decode($response); $_SESSION['smsstatus_id'] = $response->status; $_SESSION['smsstatus_text'] = $response->description; } } if ($e->name == 'OnSHKmodRenderTopLinks') { if($_SESSION['smsstatus_id']){ echo '<div style="float:right; margin:1em; text-align:left;" id="smsstatus">Статус отправки смс: ' . $_SESSION['smsstatus_id'] .' ' . $_SESSION['smsstatus_text'].'</div>'; } } $e->output($output); class byteHandApi { var $id, $key, $from, $url; function __construct($id, $key, $from) { $this->id = $id; $this->key = $key; $this->from = $from; $this->url = 'http://api.bytehand.com/send'; } function api($method,$params=false) { if (!$params) $params = array(); $t = $params; $params = array(); $params['to'] = $t['to']; $params['text'] = $t['text']; $params['id'] = $this->id; $params['key'] = $this->key; $params['from'] = $this->from; $query = $this->url.'?'.$this->params($params); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL,$query); curl_setopt($curl, CURLOPT_RETURNTRANSFER,true); $result = curl_exec($curl); if($result === false){ $result = curl_error($curl); } curl_close($curl); return $result; } function params($params) { $vz = array(); foreach($params as $k=>$v) { $vz[] = $k.'='.urlencode($v); } return implode('&',$vz); } } ?>
- Создайте новый плагин.
Название: bytehand_sms_sender
Код:
include($modx->config['base_path'].'assets/plugins/bytehand/bytehand.php');
- На вкладке «Системные события» выберите:
OnSHKChangeStatus
OnSHKmodRenderTopLinks - На вкладке «Конфигурация» в поле «Конфигурация плагина:» введите:
&phonefield=Откуда брать телефон;string;phone &YOUR_ID=YOUR_ID;string; &YOUR_KEY=YOUR_KEY;string; &YOUR_FROM=YOUR_FROM;string; &status_list=Какие статусы обрабатываем?;string;1,2,3,4,5,6 &status1_tpl=Новый заказ;string;sms_neworder &status2_tpl=Принят к оплате;string;sms_accepted &status3_tpl=Отправлен;string;sms_sent &status4_tpl=Выполнен;string;sms_completed &status5_tpl=Отменен;string;sms_canceled &status6_tpl=Оплата получена;string;sms_payment
- Зайдите на сервис bytehand (рефка), зарегистрируйтесь. Там вы должны получить id, key и подпись. Если с первыми двумя пунктами вопросов не возникает — оба значения видны прямо на странице настроек, то подпись я изрядно поискал.
- Заполните все поля. Значение полей «Новый заказ» и ему подобных — это имена чанков с письмами. Разумеется, их нужно создать и заполнить текстом. В значение «Откуда брать телефон» пишем имя поля, переданного в $order_data['short_txt']. У меня это стандартное поле phone.
Игорь Сухинин 24.08.2016 12:19 #
P.S.: Заметил в коде такую вещь
Я, правда, никогда сам ShopKeeper не использовал. Но в любом случае мне так кажется, что лучше дать возможность пользователю кастомизировать этот вывод в отдельном чанке, нежели непосредственно засунуть это прямо в код плагина.
Андрей Казунин 25.08.2016 14:22 #
Но это только первый из рассказов о Маугли =)