Пример кода PHP для массовой рассылки смс

Инструкция по бесплатному тестированию скрипта массовой отправки смс на PHP


Для тестирования расширенного API достаточно внести минимум исправлений в код:

  1. Поставить ваши логин и пароль, которые вы задали при регистрации в строчке 138
  2. В строчках 146, 152,158 указать необходимые вам номера телефонов. После этого можно тестировать скрипт.
  3. Также вы можете поправить текст сообщений в строчках 147, 153, 159 и поставить свою уникальную подпись в строчках 148, 154, 160. Подпись Вы можете добавить через личный кабинет после регистрации.

Достаточно всего 5 минут чтобы протестировать массовую рассылку смс через наш сервис и оценить все преимущества рассылки через API, когда не нужно выгружать базу телефонов клиентов из вашей системы.

Если Вам не хватило тестовых смс для проверки, напишите нам, указав свой логин, и мы бесплатно добавим на ваш счет еще тестовых смс.

<?php 		
class Smsfeedback_JsonGate
{
	
    const ERROR_EMPTY_API_LOGIN = 'Empty api login not allowed'; 
    const ERROR_EMPTY_API_PASSWORD = 'Empty api password not allowed'; 
    const ERROR_EMPTY_RESPONSE = 'errorEmptyResponse';
    
	protected $_apiLogin = null;
	
	protected $_apiPassword = null;
	
    protected $_host = 'api.smsfeedback.ru';
    
    protected $_packetSize = 200;
    
    protected $_results = array();
	
	public function __construct($apiLogin, $apiPassword)
	{
		$this->_setApiLogin($apiLogin);
		$this->_setApiPassword($apiPassword);
	}
	
	private function _setApiLogin($apiLogin)
	{
		if (empty($apiLogin)) {
			throw new Exception(self::ERROR_EMPTY_API_LOGIN);
		}
		$this->_apiLogin = $apiLogin;
	}
	
    private function _setApiPassword($apiPassword)
    {
        if (empty($apiPassword)) {
            throw new Exception(self::ERROR_EMPTY_API_PASSWORD);
        }
        $this->_apiPassword = $apiPassword;
    }
    
    public function setHost($host)
    {
    	$this->_host = $host;
    }
    
    public function getHost()
    {
    	return $this->_host;
    }
	
    private function _sendRequest($uri, $params = null)
    {
    	$url = $this->_getUrl($uri);
    	$data = $this->_formPacket($params);

    	$client = curl_init($url);
        curl_setopt_array($client, array(
        	CURLOPT_RETURNTRANSFER => true,
        	CURLOPT_HEADER => false,
        	CURLOPT_POST => true,
        	CURLOPT_HEADER => false,
        	CURLOPT_HTTPHEADER => array('Host: ' . $this->getHost()),
        	CURLOPT_POSTFIELDS => $data,
        ));
        
        $body = curl_exec($client);
		curl_close($client);
        if (empty($body)) {
        	throw new Exception(self::ERROR_EMPTY_RESPONSE);
        }
        $decodedBody = json_decode($body, true);
        if (is_null($decodedBody)) {
        	throw new Exception($body);
        }
        return $decodedBody;
    }
    
    private function _getUrl($uri)
    {
    	return 'http://' . $this->getHost() . '/' . $uri . '/';
    }
    
    private function _formPacket($params = null)
    {
    	$params['login'] = $this->_apiLogin;
        $params['password'] = $this->_apiPassword;
        foreach ($params as $key => $value) {
        	if (empty($value)) {
        		unset($params[$key]);
        	}
        }
        $packet = json_encode($params);
        return $packet;
    }
    
    public function getPacketSize()
    {
    	return $this->_packetSize;
    }
    
    public function send($messages, $statusQueueName = null, $scheduleTime = null)
    {
        $params = array(
           'messages' => $messages,
           'statusQueueName' => $statusQueueName,
           'scheduleTime' => $scheduleTime,
        );
        return $this->_sendRequest('messages/v2/send.json', $params);
    }
    
    public function status($messages)
    {
    	return $this->_sendRequest('messages/v2/status.json', array('messages' => $messages));
    }
    
    public function statusQueue($name, $limit)
    {
    	return $this->_sendRequest('messages/v2/statusQueue.json', array(
    		'statusQueueName' => $name,
    		'statusQueueLimit' => $limit,
    	));
    }
    
    public function credits()
    {
    	return $this->_sendRequest('messages/v2/balance.json');
    }
    
    public function senders()
    {
    	return $this->_sendRequest('messages/v2/senders.json');
    }
    
}

// Использем class Smsfeedback_JsonGate

$gate = new Smsfeedback_JsonGate('login', 'password');

   var_dump($gate->credits()); // узнаем текущий баланс
   var_dump($gate->senders()); // получаем список доступных подписей
   
   $messages = array(
   		array(
               "clientId" => "1",
               "phone"=> "71234567890",
               "text"=> "first message",
               "sender"=> "TEST-SMS" 
           ),
           array(
               "clientId" => "2",
               "phone"=> "71234567891",
               "text"=> "second message", 
               "sender"=> "TEST-SMS",
           ),
           array(
               "clientId" => "3",
               "phone"=> "71234567892",
               "text"=> "third message",
               "sender"=> "TEST-SMS",
           ),
       );
   var_dump($gate->send($messages, 'testQueue')); // отправляем пакет sms
   
   $messages = array(
   	array("clientId"=>"1","smscId"=>11255142),
   	array("clientId"=>"2","smscId"=>11255143),
   	array("clientId"=>"3","smscId"=>11255144),
   );
   var_dump($gate->status($messages)); // получаем статусы для пакета sms
   var_dump($gate->statusQueue('testQueue', 10)); // получаем статусы из очереди 'testQueue' 

?>