Написал небольшой плагин для отправки смс о статусе заказа.
Улучшения приветствуются.
  • Создайте папку 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.
Всё, плагин работает.