API позволяет рассылать сообщения через ваши проекты и сервисы по протоколам HTTP/HTTPS, SMTP и SMPP. Готовые библиотеки на разных языках программирования подключаются к вашему проекту и помогают отправлять сообщения из любого места с помощью одной команды. Для упрощенной авторизации вместо пары логин и пароль можно использовать специальный API-ключ.
Для работы с нашим сервисом по протоколам HTTP/HTTPS или SMTP вам достаточно подключить файл соответствующей
библиотеки, после чего вы сможете отправлять SMS-сообщения или проверять статус вызовом одной команды.
Исходный код библиотеки:
<?php // SMSC.RU API (smsc.ru) версия 3.8 (03.07.2019)
define("SMSC_LOGIN", ""); // логин клиента define("SMSC_PASSWORD", ""); // пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля define("SMSC_POST", 0); // использовать метод POST define("SMSC_HTTPS", 0); // использовать HTTPS протокол define("SMSC_CHARSET", "windows-1251"); // кодировка сообщения: utf-8, koi8-r или windows-1251 (по умолчанию) define("SMSC_DEBUG", 0); // флаг отладки define("SMTP_FROM", "api@smsc.ru"); // e-mail адрес отправителя
// Функция отправки SMS // // обязательные параметры: // // $phones - список телефонов через запятую или точку с запятой // $message - отправляемое сообщение // // необязательные параметры: // // $translit - переводить или нет в транслит (1,2 или 0) // $time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m) // $id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647. // $format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram) // $sender - имя отправителя (Sender ID). // $query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3&tz=2") // $files - массив путей к файлам для отправки mms или e-mail сообщений // // возвращает массив (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки // либо массив (<id>, -<код ошибки>) в случае ошибки
if (SMSC_DEBUG) { if ($m[1] > 0) echo "Стоимость рассылки: $m[0]. Всего SMS: $m[1]\n"; else echo "Ошибка №", -$m[1], "\n"; }
return $m; }
// Функция проверки статуса отправленного SMS или HLR-запроса // // $id - ID cообщения или список ID через запятую // $phone - номер телефона или список номеров через запятую // $all - вернуть все данные отправленного SMS, включая текст сообщения (0,1 или 2) // // возвращает массив (для множественного запроса двумерный массив): // // для одиночного SMS-сообщения: // (<статус>, <время изменения>, <код ошибки доставки>) // // для HLR-запроса: // (<статус>, <время изменения>, <код ошибки sms>, <код IMSI SIM-карты>, <номер сервис-центра>, <код страны регистрации>, <код оператора>, // <название страны регистрации>, <название оператора>, <название роуминговой страны>, <название роумингового оператора>) // // при $all = 1 дополнительно возвращаются элементы в конце массива: // (<время отправки>, <номер телефона>, <стоимость>, <sender id>, <название статуса>, <текст сообщения>) // // при $all = 2 дополнительно возвращаются элементы <страна>, <оператор> и <регион> // // при множественном запросе: // если $all = 0, то для каждого сообщения или HLR-запроса дополнительно возвращается <ID сообщения> и <номер телефона> // // если $all = 1 или $all = 2, то в ответ добавляется <ID сообщения> // // либо массив (0, -<код ошибки>) в случае ошибки
Исходный код библиотеки:
#!/usr/bin/perl # SMSC.RU API (smsc.ru) версия 1.9 (03.07.2019)
package smsc_api;
use strict; use warnings;
# Константы для настройки библиотеки use constant SMSC_LOGIN => ""; # логин клиента use constant SMSC_PASSWORD => ""; # пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля use constant SMSC_POST => 0; # использовать метод POST use constant SMSC_HTTPS => 0; # использовать HTTPS протокол use constant SMSC_CHARSET => 'utf-8'; # $charset - кодировка сообщения (windows-1251 или koi8-r), по умолчанию используется utf-8 use constant SMSC_DEBUG => 0; # флаг отладки
# Константы для отправки SMS по SMTP use constant SMTP_FROM => 'api@smsc.ru'; # e-mail адрес отправителя use constant SMTP_SERVER => 'send.smsc.ru'; # адрес smtp сервера
use LWP::UserAgent; use URI::Escape; use Net::SMTP;
use vars qw(@EXPORT); use Exporter 'import'; @EXPORT = qw(send_sms send_sms_mail get_sms_cost get_status get_balance);
# Функция отправки SMS # # обязательные параметры: # # $phones - список телефонов через запятую или точку с запятой # $message - отправляемое сообщение # # необязательные параметры: # # $translit - переводить или нет в транслит (1,2 или 0) # $time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m) # $id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647. # $format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram) # $sender - имя отправителя (Sender ID). # $query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3") # # возвращает массив (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки # либо массив (<id>, -<код ошибки>) в случае ошибки
sub send_sms { my ($phones, $message, $translit, $time, $id, $format, $sender, $query) = @_;
class SMSC
# Константы для настройки библиотеки
SMSC_LOGIN = "" # логин клиента
SMSC_PASSWORD = "" # пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля
SMSC_POST = false # использовать метод POST
SMSC_HTTPS = false # использовать HTTPS протокол
SMSC_CHARSET = "utf-8" # кодировка сообщения: koi8-r или windows-1251 (по умолчанию utf-8)
SMSC_DEBUG = false # флаг отладки
SMTP_FROM = "api@smsc.ru" # e-mail адрес отправителя
# Функция отправки SMS
#
# обязательные параметры:
#
# phones - список телефонов через запятую или точку с запятой
# message - отправляемое сообщение
#
# необязательные параметры:
#
# translit - переводить или нет в транслит (1,2 или 0)
# time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m)
# id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647.
# format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram)
# sender - имя отправителя (Sender ID).
# query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3&tz=2")
#
# возвращает массив (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки
# либо массив (<id>, -<код ошибки>) в случае ошибки
if SMSC_DEBUG
if m[1] > "0"
puts "Сообщение отправлено успешно. ID: #{m[0]}, всего SMS: #{m[1]}, стоимость: #{m[2]}, баланс: #{m[3]}\n"
else
puts "Ошибка №#{m[1][1]}" + (m[0] > "0" ? ", ID: #{m[0]}" : "") + "\n";
end
end
return m
end
# SMTP версия функции отправки SMS
def send_sms_mail(phones, message, translit = 0, time = 0, id = 0, format = 0, sender = "")
$VERBOSE = nil
Net::SMTP.start("send.smsc.ru") do |smtp|
smtp.send_message("Content-Type: text/plain; charset=#{SMSC_CHARSET}\n\n#{SMSC_LOGIN}:#{SMSC_PASSWORD}:#{id}:#{time}:#{translit},#{format},#{sender}:#{phones}:#{message}", SMTP_FROM, "send@send.smsc.ru")
end
$VERBOSE = true
end
# Функция получения стоимости SMS
#
# обязательные параметры:
#
# phones - список телефонов через запятую или точку с запятой
# message - отправляемое сообщение
#
# необязательные параметры:
#
# translit - переводить или нет в транслит (1,2 или 0)
# format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram)
# sender - имя отправителя (Sender ID)
# query - строка дополнительных параметров, добавляемая в URL-запрос ("list=79999999999:Ваш пароль: 123\n78888888888:Ваш пароль: 456")
#
# возвращает массив (<стоимость>, <количество sms>) либо массив (0, -<код ошибки>) в случае ошибки
Исходный код библиотеки:
# -*- coding: utf-8 -*- # SMSC.RU API (smsc.ru) версия 2.0 (03.07.2019)
from datetime import datetime from time import sleep import smtplib
try: from urllib import urlopen, quote except ImportError: from urllib.request import urlopen from urllib.parse import quote
# Константы для настройки библиотеки SMSC_LOGIN = "" # логин клиента SMSC_PASSWORD = "" # пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля SMSC_POST = False # использовать метод POST SMSC_HTTPS = False # использовать HTTPS протокол SMSC_CHARSET = "utf-8" # кодировка сообщения (windows-1251 или koi8-r), по умолчанию используется utf-8 SMSC_DEBUG = False # флаг отладки
# Константы для отправки SMS по SMTP SMTP_FROM = "api@smsc.ru" # e-mail адрес отправителя SMTP_SERVER = "send.smsc.ru" # адрес smtp сервера SMTP_LOGIN = "" # логин для smtp сервера SMTP_PASSWORD = "" # пароль для smtp сервера
# Вспомогательная функция, эмуляция тернарной операции ?: def ifs(cond, val1, val2): if cond: return val1 return val2
# Класс для взаимодействия с сервером smsc.ru
class SMSC(object):
# Метод отправки SMS # # обязательные параметры: # # phones - список телефонов через запятую или точку с запятой # message - отправляемое сообщение # # необязательные параметры: # # translit - переводить или нет в транслит (1,2 или 0) # time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m) # id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647. # format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram) # sender - имя отправителя (Sender ID). # query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3") # # возвращает массив (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки # либо массив (<id>, -<код ошибки>) в случае ошибки
String SMSC_LOGIN = ""; // логин клиента String SMSC_PASSWORD = ""; // пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля boolean SMSC_HTTPS = false; // использовать HTTPS протокол String SMSC_CHARSET = "utf-8"; // кодировка сообщения: koi8-r, windows-1251 или utf-8 (по умолчанию) boolean SMSC_DEBUG = false; // флаг отладки boolean SMSC_POST = false; // Использовать метод POST
Исходный код библиотеки:
// SMSC.RU API (smsc.ru) версия 3.1 (03.07.2019)
using System;
using System.Web;
using System.Net;
using System.IO;
using System.Net.Mail;
using System.Text;
public class SMSC
{
// Константы с параметрами отправки
const string SMSC_LOGIN = ""; // логин клиента
const string SMSC_PASSWORD = ""; // пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля
bool SMSC_POST = false; // использовать метод POST
const bool SMSC_HTTPS = false; // использовать HTTPS протокол
const string SMSC_CHARSET = "utf-8"; // кодировка сообщения (windows-1251 или koi8-r), по умолчанию используется utf-8
const bool SMSC_DEBUG = false; // флаг отладки
// Константы для отправки SMS по SMTP
const string SMTP_FROM = "api@smsc.ru"; // e-mail адрес отправителя
const string SMTP_SERVER = "send.smsc.ru"; // адрес smtp сервера
const string SMTP_LOGIN = ""; // логин для smtp сервера
const string SMTP_PASSWORD = ""; // пароль для smtp сервера
public string[][] D2Res;
// Метод отправки SMS
//
// обязательные параметры:
//
// phones - список телефонов через запятую или точку с запятой
// message - отправляемое сообщение
//
// необязательные параметры:
//
// translit - переводить или нет в транслит
// time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m)
// id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647.
// format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram)
// sender - имя отправителя (Sender ID).
// query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3")
//
// возвращает массив строк (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки
// либо массив строк (<id>, -<код ошибки>) в случае ошибки
public string[] send_sms(string phones, string message, int translit = 0, string time = "", int id = 0, int format = 0, string sender = "", string query = "", string[] files = null)
{
if (files != null)
SMSC_POST = true;
public void send_sms_mail(string phones, string message, int translit = 0, string time = "", int id = 0, int format = 0, string sender = "")
{
MailMessage mail = new MailMessage();
mail.To.Add("send@send.smsc.ru");
mail.From = new MailAddress(SMTP_FROM, "");
if (SMSC_DEBUG) {
if (Convert.ToInt32(m[1]) > 0)
_print_debug("Стоимость рассылки: " + m[0] + ". Всего SMS: " + m[1]);
else
_print_debug("Ошибка №" + m[1].Substring(1, 1));
}
return m;
}
// Метод проверки статуса отправленного SMS или HLR-запроса
//
// id - ID cообщения или список ID через запятую
// phone - номер телефона или список номеров через запятую
// all - вернуть все данные отправленного SMS, включая текст сообщения (0,1 или 2)
//
// возвращает массив (для множественного запроса возвращается массив с единственным элементом, равным 1. В этом случае статусы сохраняются в
// двумерном динамическом массиве класса D2Res):
//
// для одиночного SMS-сообщения:
// (<статус>, <время изменения>, <код ошибки доставки>)
//
// для HLR-запроса:
// (<статус>, <время изменения>, <код ошибки sms>, <код IMSI SIM-карты>, <номер сервис-центра>, <код страны регистрации>, <код оператора>,
// <название страны регистрации>, <название оператора>, <название роуминговой страны>, <название роумингового оператора>)
//
// при all = 1 дополнительно возвращаются элементы в конце массива:
// (<время отправки>, <номер телефона>, <стоимость>, <sender id>, <название статуса>, <текст сообщения>)
//
// при all = 2 дополнительно возвращаются элементы <страна>, <оператор> и <регион>
//
// при множественном запросе (данные по статусам сохраняются в двумерном массиве D2Res):
// если all = 0, то для каждого сообщения или HLR-запроса дополнительно возвращается <ID сообщения> и <номер телефона>
//
// если all = 1 или all = 2, то в ответ добавляется <ID сообщения>
//
// либо массив (0, -<код ошибки>) в случае ошибки
public string[] get_status(string id, string phone, int all = 0)
{
string[] m = _smsc_send_cmd("status", "phone=" + _urlencode(phone) + "&id=" + _urlencode(id) + "&all=" + all.ToString());
// (status, time, err, ...) или (0, -error)
if (id.IndexOf(',') == -1)
{
if (SMSC_DEBUG)
{
if (m[1] != "" && Convert.ToInt32(m[1]) >= 0)
{
int timestamp = Convert.ToInt32(m[1]);
DateTime offset = new DateTime(1970, 1, 1, 0, 0, 0, 0);
DateTime date = offset.AddSeconds(timestamp);
_print_debug("Статус SMS = " + m[0] + (timestamp > 0 ? ", время изменения статуса - " + date.ToLocalTime() : ""));
}
else
_print_debug("Ошибка №" + m[1].Substring(1, 1));
}
var
SMSC_POST: Boolean = False; // использовать метод POST
const
// Константы с параметрами отправки
SMSC_LOGIN: String = ''; // логин клиента
SMSC_PASSWORD: String = ''; // пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля
SMSC_CHARSET: String = {$IFDEF UNICODE}// кодировка сообщения (utf-8 или koi8-r), по умолчанию используется windows-1251
'utf-8'
{$ELSE}
'windows-1251'
{$ENDIF};
SMSC_DEBUG: Boolean = False; // флаг отладки
// Константы для отправки SMS по SMTP
SMTP_FROM: String = 'api@smsc.ru'; // e-mail адрес отправителя
SMTP_SERVER: String = 'send.smsc.ru'; // адрес smtp сервера
SMTP_LOGIN: String = ''; // логин для smtp сервера
SMTP_PASSWORD: String = ''; // пароль для smtp сервера
private
// Приватные методы класса SMSС
function _smsc_send_cmd(cmd: String; arg: String; files: TStringList = nil): TStringDynArray;
function _urlencode(str: String): String;
procedure _print_debug(str: String);
function _ifs(cond: Boolean; val1: String; val2: String): String;
end;
var
formats: array[0..13] of String = ('', 'flash=1', 'push=1', 'hlr=1', 'bin=1', 'bin=2', 'ping=1', 'mms=1', 'mail=1', 'call=1', 'viber=1', 'soc=1', '', 'tg=1');
implementation
// Метод отправки SMS
//
// обязательные параметры:
//
// phones - список телефонов через запятую или точку с запятой
// mes - отправляемое сообщение
//
// необязательные параметры:
//
// translit - переводить или нет в транслит
// time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m)
// id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647.
// format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram)
// sender - имя отправителя (Sender ID).
// query - строка дополнительных параметров, добавляемая в URL-запрос ('valid=01:00&maxsms=3')
// files - массив путей к файлам при отправке mms или e-mail сообщений
//
// возвращает массив (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки
// либо (<id>, -<код ошибки>) в случае ошибки
if SMSC_DEBUG then
if StrToInt(Result[1]) > 0 then
_print_debug('Стоимость рассылки: ' + Result[0] + '. Всего SMS: ' + Result[1])
else
_print_debug('Ошибка №' + Result[1][2]);
end;
// Метод проверки статуса отправленного SMS или HLR-запроса
//
// id - ID cообщения или список ID через запятую
// phone - номер телефона или список номеров через запятую
// all - вернуть все данные отправленного SMS, включая текст сообщения (0,1 или 2)
//
// возвращает массив (для множественного запроса возвращается массив с единственным элементом, равным 1. В этом случае статусы сохраняются в
// двумерном динамическом массиве класса D2Res):
//
// для одиночного SMS-сообщения:
// (<статус>, <время изменения>, <код ошибки доставки>)
//
// для HLR-запроса:
// (<статус>, <время изменения>, <код ошибки sms>, <код IMSI SIM-карты>, <номер сервис-центра>, <код страны регистрации>, <код оператора>,
// <название страны регистрации>, <название оператора>, <название роуминговой страны>, <название роумингового оператора>)
//
// при all = 1 дополнительно возвращаются элементы в конце массива:
// (<время отправки>, <номер телефона>, <стоимость>, <sender id>, <название статуса>, <текст сообщения>)
//
// при all = 2 дополнительно возвращаются элементы <страна>, <оператор> и <регион>
//
// при множественном запросе (данные по статусам сохраняются в двумерном массиве D2Res):
// если all = 0, то для каждого сообщения или HLR-запроса дополнительно возвращается <ID сообщения> и <номер телефона>
//
// если all = 1 или all = 2, то в ответ добавляется <ID сообщения>
//
// либо массив (0, -<код ошибки>) в случае ошибки
function SMSC.get_status(id: String; phone: String; all: Integer = 0): TStringDynArray;
var
ans: String;
TZInfo: TIME_ZONE_INFORMATION;
i, idx: Integer;
begin
if Pos(',', id) = 0 then
begin
if SMSC_DEBUG then
if (Result[1] <> '') and (StrToInt(Result[1]) >= 0) then
begin
ans := 'Статус SMS = ' + Result[0];
GetTimeZoneInformation(TZInfo);
if StrToInt(Result[1]) > 0 then
ans := ans + ', время изменения статуса - ' + DateTimeToStr(UnixToDateTime(StrToInt64(Result[1]) - TZInfo.Bias * 60));
_print_debug(ans);
end
else
_print_debug('Ошибка №' + Result[1][2]);
idx := StrToInt(_ifs(all = 1, '9', '12'));
if (all > 0) and (Length(Result) > idx) and ((Length(Result) < idx + 5) or (Result[idx + 5] <> 'HLR')) then
begin
ans := '';
for i := 0 to Length(Result) - 1 do
ans := ans + Result[i] + _ifs(i = Length(Result) - 1, '', ',');
SetLength(Result, idx);
for i := 0 to idx - 2 do
IdStrings.SplitString(ans, ',', Result[i], ans);
Result[idx - 1] := ans;
end;
end
else
begin
if (Length(Result) = 1) and (Pos('-', Result[0]) = 3) then
Result := StrUtils.SplitString(Result[0], ',')
else
begin
SetLength(D2Res, 0);
SetLength(D2Res, Length(Result));
for i := 0 to Length(D2Res) - 1 do
D2Res[i] := StrUtils.SplitString(Result[i], ',');
repeat
if cnt > 0 then
aurl := StringReplace(_aurl, 'smsc.ru', 'www' + IntToStr(cnt) + '.smsc.ru', [rfReplaceAll])
else
Inc(cnt);
try
if SMSC_POST then
begin
par := TIdMultiPartFormDataStream.Create;
for i := 1 to files.Count do
par.AddFile('File' + IntToStr(i), files.Strings[i-1], 'application/octet-stream');
params := StrUtils.SplitString(arg, '&');
for i := 1 to Length(params) do
begin
IdStrings.SplitString(params[i-1], '=', VLeft, VRight);
pf := par.AddFormField(VLeft, VRight);
pf.Charset := SMSC_CHARSET;
pf.ContentTransfer := 'binary';
end;
s := Post(aurl, par);
par.Destroy;
end
else
s := Get(aurl + '?' + arg);
except
s := '';
end;
Inc(cnt);
until (s <> '') or (cnt > 5);
if s = '' then
begin
if SMSC_DEBUG then
_print_debug('Ошибка чтения адреса: ' + aurl + '?' + arg);
s := ','; // фиктивный ответ
end;
Destroy;
end;
delim := ',';
if cmd = 'status' then
begin
params := StrUtils.SplitString(arg, '&');
for i := 0 to Length(params) - 1 do
begin
IdStrings.SplitString(params[i], '=', VLeft, VRight);
if (VLeft = 'id') and (Pos('%2C', VRight) > 0) then // запятая в id - множественный запрос
delim := #10;
end;
end;
Result := StrUtils.SplitString(s, delim);
end;
// кодирование параметра в http-запросе
function SMSC._urlencode(str: String): String;
var
EncodeStr, UnsafeChars: String;
UStr: UTF8String;
i, j: Integer;
begin
UnsafeChars := '!"#%&''*,:;<=>?[]^`{|} ';
EncodeStr := '';
if SMSC_POST then
Result := str
else
begin
for i := 1 to Length(str) do
if (CharIsInSet(str, i, UnsafeChars) or not CharIsInSet(str, i, CharRange(Char(33), Char(126)))) then
begin
UStr := UTF8String(str[i]);
for j := 1 to Length(UStr) do
EncodeStr := EncodeStr + '%' + IntToHex(Byte(UStr[j]), 2);
end
else
EncodeStr := EncodeStr + str[i];
Result := EncodeStr;
end;
end;
// вывод отладочной информации
procedure SMSC._print_debug(str: String);
begin
with Application do MessageBox(PChar(str), '');
end;
function SMSC._ifs(cond: Boolean; val1: String; val2: String): String;
begin
if cond then
Result := val1
else
Result := val2;
end;
end.
// Examples:
// var
// sms: SMSC;
// ret: TStringDynArray;
// balance: String;
// begin
// sms := SMSC.Create;
// ret := sms.send_sms('79999999999', 'Ваш пароль: 123', 1);
// ret := sms.send_sms('79999999999', 'http://smsc.ru'#13#10 + 'SMSC.RU', 0, '', 0, 0, '', 'maxsms=3');
// ret := sms.send_sms('79999999999', '0605040B8423F0DC0601AE02056A0045C60C036D79736974652E72750001036D7973697465000101', 0, '', 0, 5);
// ret := sms.send_sms('79999999999', '', 0, '', 0, 3);
// ret := sms.send_sms('dest@mysite.com', 'Ваш пароль: 123', 0, 0, 0, 8, 'source@mysite.com', 'subj=Confirmation');
// ret := sms.get_sms_cost('79999999999', 'Вы успешно зарегистрированы!');
// sms.send_sms_mail('79999999999', 'Ваш пароль: 123', 0, '0101121000', 0, 1);
// ret := sms.get_status(12345, '79999999999');
// balance := sms.get_balance;
// sms.Destroy;
// end;
Пример использования библиотеки:
uses smsc_api; ... var sms: SMSC; ret: TStringDynArray; balance: String; ... begin ... sms := SMSC.Create; ... ret := sms.send_sms('79999999999', 'Ваш пароль: 123', 1); ... ret := sms.send_sms('79999999999', 'http://smsc.ru'#13#10 + 'SMSC.RU', 0, '', 0, 0, '', 'maxsms=3'); ... ret := sms.send_sms('79999999999', '0605040B8423F0DC0601AE02056A0045C60C036D79736974652E72750001036D7973697465000101', 0, '', 0, 5); ... ret := sms.send_sms('79999999999', '', 0, '', 0, 3); ... ret := sms.get_sms_cost('79999999999', 'Вы успешно зарегистрированы!'); ... ret := sms.get_status(12345, '79999999999'); ... balance := sms.get_balance; ... // отправка SMS через e-mail sms.send_sms_mail('79999999999', 'Ваш пароль: 123'); ... sms.Destroy; ... end;
// Константы с параметрами отправки
const char* SMSC_LOGIN = ""; // логин клиента
const char* SMSC_PASSWORD = ""; // пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля
Boolean SMSC_POST = false; // использовать метод POST
const char* SMSC_CHARSET =
#ifdef _DELPHI_STRING_UNICODE
"utf-8";
#else
"windows-1251";
#endif // кодировка сообщения (utf-8 или koi8-r), по умолчанию используется windows-1251
const Boolean SMSC_DEBUG = false; // флаг отладки
// Константы для отправки SMS по SMTP
const char* SMTP_FROM = "api@smsc.ru"; // e-mail адрес отправителя
const char* SMTP_SERVER = "send.smsc.ru"; // адрес smtp сервера
const char* SMTP_LOGIN = ""; // логин для smtp сервера
const char* SMTP_PASSWORD = ""; // пароль для smtp сервера
// Общедоступные методы класса SMSС
//
// Метод отправки SMS
//
// обязательные параметры:
//
// phones - список телефонов через запятую или точку с запятой
// mes - отправляемое сообщение
//
// необязательные параметры:
//
// translit - переводить или нет в транслит
// time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m)
// id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647.
// format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram)
// sender - имя отправителя (Sender ID).
// query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3")
// files - массив путей к файлам при отправке mms или e-mail сообщений
//
// возвращает массив (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки
// либо (<id>, -<код ошибки>) в случае ошибки
TStringDynArray send_sms(String phones, String mes, int translit = 0, String time = "", int id = 0, int format = 0, String sender = "", String query = "", TStringList *files = NULL)
{
TStringDynArray m;
void send_sms_mail(String phones, String mes, int translit = 0, String time = "", int id = 0, int format = 0, String senderid = "")
{
TIdMessage* msg = new TIdMessage(0);
TIdSMTP* idsmtp = new TIdSMTP(0);
if (SMSC_DEBUG)
if (StrToInt(m[1]) > 0)
_print_debug("Стоимость рассылки: " + m[0] + ". Всего SMS: " + m[1]);
else
_print_debug("Ошибка №" + m[1].SubString(2, 1));
return m;
}
// Метод проверки статуса отправленного SMS или HLR-запроса
//
// id - ID cообщения или список ID через запятую
// phone - номер телефона или список номеров через запятую
// all - вернуть все данные отправленного SMS, включая текст сообщения (0,1 или 2)
//
// возвращает массив (для множественного запроса возвращается массив с единственным элементом, равным 1. В этом случае статусы сохраняются в
// двумерном динамическом массиве класса D2Res):
//
// для одиночного SMS-сообщения:
// (<статус>, <время изменения>, <код ошибки доставки>)
//
// для HLR-запроса:
// (<статус>, <время изменения>, <код ошибки sms>, <код IMSI SIM-карты>, <номер сервис-центра>, <код страны регистрации>, <код оператора>,
// <название страны регистрации>, <название оператора>, <название роуминговой страны>, <название роумингового оператора>)
//
// при all = 1 дополнительно возвращаются элементы в конце массива:
// (<время отправки>, <номер телефона>, <стоимость>, <sender id>, <название статуса>, <текст сообщения>)
//
// при all = 2 дополнительно возвращаются элементы <страна>, <оператор> и <регион>
//
// при множественном запросе (данные по статусам сохраняются в двумерном массиве D2Res):
// если all = 0, то для каждого сообщения или HLR-запроса дополнительно возвращается <ID сообщения> и <номер телефона>
//
// если all = 1 или all = 2, то в ответ добавляется <ID сообщения>
//
// либо массив (0, -<код ошибки>) в случае ошибки
TStringDynArray get_status(String id, String phone, int all = 0)
{
TIME_ZONE_INFORMATION TZInfo;
TStringDynArray m;
String ans;
int i;
if (id.Pos(",") == 0) {
if (SMSC_DEBUG)
if ((m[1] != "") && (StrToInt(m[1]) >= 0))
{
String ans = "Статус SMS = " + m[0];
GetTimeZoneInformation(&TZInfo);
if (StrToInt(m[1]) > 0)
ans = ans + ", время изменения статуса - " + DateTimeToStr(UnixToDateTime(StrToInt64(m[1]) - TZInfo.Bias * 60));
_print_debug(ans);
}
else
_print_debug("Ошибка №" + m[1].SubString(2, 1));
// Константы с параметрами отправки
const CString SMSC_LOGIN = ""; // логин клиента
const CString SMSC_PASSWORD = ""; // пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля
const bool SMSC_HTTPS = false; // использовать протокол HTTPS
const bool SMSC_POST = false; // использовать метод POST
const CString SMSC_CHARSET =
#if defined _UNICODE || defined UNICODE
"utf-8";
#else
"windows-1251";
#endif // кодировка сообщения (utf-8 или koi8-r), по умолчанию используется windows-1251
const bool SMSC_DEBUG = false; // флаг отладки
class SMSC {
public:
// Общедоступные методы класса SMSС
//
// Метод отправки SMS
//
// обязательные параметры:
//
// phones - список телефонов через запятую или точку с запятой
// message - отправляемое сообщение
//
// необязательные параметры:
//
// translit - переводить или нет в транслит
// time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m)
// id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647.
// format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram)
// sender - имя отправителя (Sender ID).
// query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3")
//
// возвращает массив (<id>, <количество sms>, <стоимость>, <баланс>) в случае успешной отправки
// либо (<id>, -<код ошибки>) в случае ошибки
vector<CString> send_sms(CString phones, CString message, int translit = 0, CString time = "", int id = 0, int format = 0, CString sender = "", CString query = "")
{
CString tt, ir;
CString formats[13] = {"flash=1", "push=1", "hlr=1", "bin=1", "bin=2", "ping=1", "mms=1", "mail=1", "call=1", "viber=1", "soc=1", "", "tg=1"};
ir.Format((CString)"%i", id);
tt.Format((CString)"%i", translit);
Исходный код библиотеки:
// SMSC.RU API (smsc.ru) версия 1.2 (08.11.2021)
var Api = function () { 'use strict'; var http = require('http'); var qs = require('querystring'); var FormData = require('form-data'); var fs = require('fs');
var login = "", // логин клиента password = "", // пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля sender, log = console.log;
var PHONE_TYPES = { 'string' : 1, 'number' : 2 };
var get_host = function (www) { if (!www) www = ''; return (ssl? 'https://' : 'http://') + www + host + '/sys/'; };
var isInArr = function (arr, val) { if (!arr || !arr.length) return false; return arr.indexOf(val) !== -1; };
var convert_data = function (data, notConvert) { if (data.fmt) delete data.fmt; if (data.msg) { data.mes = data.msg; delete data.msg; } if (data.message) { data.mes = data.message; delete data.message; } if (data.phone && !isInArr(notConvert, 'phone')) { data.phones = data.phone; delete data.phone; } if (data.number) { data.phones = data.number; delete data.number; }
if (data.list) { var list = ''; for (var i in data.list) { list += i + ':' + data.list[i]+'\n'; } data.list = list; delete data.mes; }
if (data.phones && !(typeof data.phones in PHONE_TYPES)) data.phones = data.phones.join(','); };
var convert_files = function (form, data) { if (!data.files) return;
if (typeof data.files === 'string') { var f = data.files; var bin = fs.readFileSync(f); form.append(i, bin, { filename : f }); return; }
for (var i in data.files) { var f = data.files[i]; var bin = fs.readFileSync(f); form.append(i, bin, { filename : f }); }
delete data.files; };
var read_url = function (prs, clb, notConvert) { var fmt = prs.fmt ? prs.fmt : def_fmt;
// Отправка сообщения любого типа (data — объект, включающий параметры отправки. Подробнее смотрите в документации к API) this.send = function (type, data, clb) { if (typeof data !== 'object') data = {}; var opts = { file : 'send.php', data : data }; opts['type'] = type; read_url(opts, clb); };
// Отправка простого SMS сообщения this.send_sms = function (data, clb) { if (typeof data !== 'object') data = {}; read_url({ file : 'send.php', data : data }, clb); };
// Получение статуса сообщения this.get_status = function (data, clb) { if (data.phones) { data.phone = data.phones; delete data.phones; } if (data.number) { data.phone = data.number; delete data.number; }
if (data.phone && !(typeof data.phone in PHONE_TYPES)) { data.phone = data.phone.join(','); }
read_url({ file : 'status.php', data : data }, clb, ['phone']); };
// Получение баланса this.get_balance = function (clb) { read_url({ file : 'balance.php', data : { cur : 1 } }, function (b, r, e, c) { clb(e ? 0 : b.balance, r, e, c); }); };
// Получение стоимости сообщения this.get_sms_cost = function (data, clb) { if (typeof data !== 'object') data = {}; if (!data.cost) data.cost = 1; read_url({ file : 'send.php', data : data }, function (b, r, e, c) { clb(e ? 0 : b.cost, r, e, c); }); };
// Запрос к API this.raw = function (file, data, clb) { read_url({ file : file, data : data }, clb); };
// Тестирование подключения и данных авторизации this.test = function (clb) { read_url({ file : 'balance.php' }, function (d, r, err) { clb(err); }); };
};
module.exports = new Api();
Пример использования библиотеки:
var smsc = require('./smsc/smsc.js');
// Отправка e-mail smsc.send('mail', { phones : 'alex@mysite.ru', mes : 'Тестовое сообщение', subj : 'Тема сообщения', sender : 'alex2@mysite.ru', }, function (data, raw, err, code) { if (err) return console.log(err, 'code: '+code); console.log(data); // object // console.log(raw); // string in JSON format });
// Отправка MMS smsc.send('mms', { phones : '79999999999', mes : 'Тестовое сообщение', fmt : 2, files : [ 'files/123.png' ] }, function (data, raw, err, code) { if (err) return console.log(err, 'code: '+code); console.log(data); // object // console.log(raw); // string in JSON format });
// Отправка списка SMS сообщений smsc.send_sms({ list : { '79999999999' : 'Hello, Alex!', '79999999999' : 'Hello, Petr!' } }, function (data, raw, err, code) { if (err) return console.log(err, 'code: '+code); console.log(data); // object console.log(raw); // string in JSON format });
// Отправка SMS smsc.send_sms({ phones : ['79999999999', '79999999999'], mes : 'Привет!' }, function (data, raw, err, code) { if (err) return console.log(err, 'code: '+code); console.log(data); // object console.log(raw); // string in JSON format });
// Обращение к скриптам API smsc.raw('send.php', { phones : '79999999999,79999999999', mes : 'Hello!' }, function (data, raw, err, code) { if (err) return console.log(err, 'code: '+code); console.log(data); // object console.log(raw); // string in JSON format });
#define UNICODE // Константы с параметрами отправки
static char* const SMSC_LOGIN = "";// логин клиента static char* const SMSC_PASSWORD = "";// пароль клиента. Если передан пустой логин, то SMSC_PASSWORD используется, как API ключ, вместо логина и пароля static char const SMSC_HTTPS = 1;// использовать протокол HTTPS static char SMSC_POST = 0;// использовать метод POST static char* const SMSC_CHARSET = #if defined _UNICODE || defined UNICODE "utf-8"; #else "windows-1251"; #endif // кодировка сообщения (utf-8 или koi8-r), по умолчанию используется windows-1251 static char const SMSC_DEBUG = 1; // флаг отладки
// Константы для отправки SMS по SMTP static char* const SMTP_FROM = "api@smsc.ru"; // e-mail адрес отправителя static char* const SMTP_SERVER = "send.smsc.ru"; // адрес smtp сервера static char* const SMTP_LOGIN = ""; // логин для smtp сервера static char* const SMTP_PASSWORD = ""; // пароль для smtp сервера
typedef char* string_t;
// Функция отправки SMS // // обязательные параметры: // // phones - список телефонов через запятую или точку с запятой // message - отправляемое сообщение // // необязательные параметры: // // translit - переводить или нет в транслит (1,2 или 0) // time - необходимое время доставки в виде строки (DDMMYYhhmm, h1-h2, 0ts, +m) // id - идентификатор сообщения. Представляет собой 32-битное число в диапазоне от 1 до 2147483647. // format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram) // sender - имя отправителя (Sender ID). // query - строка дополнительных параметров, добавляемая в URL-запрос ("valid=01:00&maxsms=3&tz=2") // files - массив путей к файлам для отправки mms или e-mail сообщений // // возвращает <id>, <количество sms>, <стоимость>, <баланс> в случае успешной отправки // либо <id>, -<код ошибки> в случае ошибки
string_t send_sms (string_t phones, string_t message, int translit, string_t time, int id, int format, string_t sender, string_t query, string_t files);
// SMTP версия метода отправки SMS void send_sms_mail(string_t phones, string_t mes, int translit, string_t time, int id, int format, string_t sender);
// Получение стоимости SMS // // обязательные параметры: // // phones - список телефонов через запятую или точку с запятой // message - отправляемое сообщение // // необязательные параметры: // // translit - переводить или нет в транслит // format - формат сообщения (0 - обычное sms, 1 - flash-sms, 2 - wap-push, 3 - hlr, 4 - bin, 5 - bin-hex, 6 - ping-sms, 7 - mms, 8 - mail, 9 - call, 10 - viber, 11 - soc, 13 - telegram) // sender - имя отправителя (Sender ID) // query - строка дополнительных параметров, добавляемая в URL-запрос ("list=79999999999:Ваш пароль: 123\n78888888888:Ваш пароль: 456") // // возвращает <стоимость>, <количество sms> либо 0, -<код ошибки> в случае ошибки
string_t get_sms_cost(string_t phones, string_t mes, int translit, int format, string_t sender, string_t query);
// Проверка статуса отправленного SMS или HLR-запроса // // id - ID cообщения или список ID через запятую // phone - номер телефона или список номеров через запятую // all - вернуть все данные отправленного SMS, включая текст сообщения (0,1 или 2) // // // для одиночного SMS-сообщения: // <статус>, <время изменения>, <код ошибки доставки> // // для HLR-запроса: // <статус>, <время изменения>, <код ошибки sms>, <код IMSI SIM-карты>, <номер сервис-центра>, <код страны регистрации>, <код оператора>, // <название страны регистрации>, <название оператора>, <название роуминговой страны>, <название роумингового оператора> // // при all = 1 дополнительно возвращаются элементы: // <время отправки>, <номер телефона>, <стоимость>, <sender id>, <название статуса>, <текст сообщения> // // при all = 2 дополнительно возвращаются элементы <страна>, <оператор> и <регион> // // если all = 0, то для каждого сообщения или HLR-запроса дополнительно возвращается <ID сообщения> и <номер телефона> // // если all = 1 или all = 2, то в ответ добавляется <ID сообщения> // // либо 0, -<код ошибки> в случае ошибки
string_t get_status(string_t id, string_t phone, int all);
// Получение баланса // // без параметров // // возвращает баланс в виде строки или пустую строку в случае ошибки
string_t send_sms (string_t phones, string_t message, int translit, string_t time, int id, int format, string_t sender, string_t query, string_t files) { string_t res=NULL, arg=NULL;
if (SMSC_DEBUG) printf("%s\n",arg); res = _smsc_send_cmd("send", arg, files); free(arg); return res; }
void send_sms_mail(string_t phones, string_t mes, int translit, string_t time, int id, int format, string_t sender) { CURL *curl; CURLcode res = CURLE_OK; struct curl_slist *recipients = NULL;
curl = curl_easy_init(); string_t mail_body;
asprintf(&mail_body,"%s:%s:%d:%s:%d,%d,%s:%s:%s", SMSC_LOGIN, SMSC_PASSWORD, id, time, translit, format, sender, phones, mes); if (SMSC_DEBUG) printf("%s\n",mail_body);
if (curl) { curl_easy_setopt(curl, CURLOPT_URL, SMTP_SERVER); recipients = curl_slist_append(recipients, SMTP_FROM); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients); res = curl_easy_perform(curl); if (res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
struct MemoryStruct chunk; chunk.memory = malloc(1); // will be grown as needed by the realloc above chunk.memory[0] = 0; chunk.size = 0; // no data at this point
Исходный код библиотеки:
Attribute VB_Name = "smsc_api"
' SMSC.RU API (www.smsc.ru) версия 1.2 (03.07.2019)
Public Const SMSC_DEBUG As Byte = 0 ' флаг отладки
Public Const SMSC_CHARSET As String = "utf-8" ' кодировка сообщения (utf-8 или koi8-r), по умолчанию используется windows-1251
Public SMSC_LOGIN As String ' логин клиента
Public SMSC_PASSWORD As String ' пароль клиента
Public SMSC_HTTPS As Byte ' использовать HTTPS протокол
Public Const SMTP_SERVER As String = "smtp.mail.ru" ' адрес SMTP сервера
Public Const SMTP_USERNAME As String = "<smtp_user_name>" ' логин на SMTP сервере
Public Const SMTP_PASSWORD As String = "<smtp_password>" ' пароль на SMTP сервере
Public Const SMTP_FROM As String = "smtp_user_name@mail.ru" ' e-mail адрес отправителя
Public CONNECT_MODE As Byte ' режим соединения с интернетом: 0 - прямое, 1 - Proxy, 2 - настройки из Internet Exporer
Public PROXY_SERVER As String ' адрес Proxy-сервера
Public PROXY_PORT As Integer ' порт Proxy-сервера
Public PROXY_AUTORIZATION As Byte ' флаг использования авторизации на Proxy-сервере
Public PROXY_USERNAME As String ' логин на Proxy-сервере
Public PROXY_PASSWORD As String ' пароль на Proxy-сервере
Public Connection As Object
' Пауза в приложении
'
' Параметры:
' PauseTime - время паузы в секундах
'
Private Sub Sleep(PauseTime As Integer)
Start = Timer
Do While Timer < Start + PauseTime
DoEvents
Loop
End Sub
Public Function URLEncode(ByVal Str As String) As String
Dim Ret
Ret = ""
CharStr = " !""@№#;%:?*().,/$^&\+"
Str = Trim(Str)
For i = 1 To Len(Str)
S = Mid(Str, i, 1)
SymCode = Asc(S)
' Перевод из UNICODE в ASCII
If ((SymCode > 1039) And (SymCode < 1104)) Then
SymCode = SymCode - 848
ElseIf SymCode = 8470 Then
SymCode = 185
ElseIf SymCode = 1105 Then
SymCode = 184
ElseIf SymCode = 1025 Then
SymCode = 168
End If
fl_replace = 0
If InStr(1, CharStr, S, vbBinaryCompare) > 0 Then
Ret = Ret & "%" & Hex(Int(SymCode / 16)) & Hex(Int(SymCode Mod 16))
fl_replace = 1
End If
If (SymCode <= 127) And (fl_replace = 0) Then
Ret = Ret & S
ElseIf fl_replace = 0 Then
Ret = Ret + "%" + Hex(Int(SymCode / 16)) & Hex(Int(SymCode Mod 16))
End If
Next i
URLEncode = Ret
End Function
' Функция чтения URL.
'
Private Function SMSC_Read_URL(URL As String, Params As String) As String
Dim Ret As String
On Error GoTo 0
Connection.Open "POST", Trim(URL), 0
Connection.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
Connection.Send Trim(Params)
Ret = Connection.ResponseText()
If Err.Number <> 0 Then
MsgBox "Не удалось получить данные с сервера!", , "Ошибка"
SMSC_Read_URL = ""
Exit Function
End If
SMSC_Read_URL = Ret
End Function
' Функция вызова запроса. Формирует URL и делает 5 попыток чтения.
'
Private Function SMSC_Send_Cmd(Cmd As String, Optional Arg As String = "")
Dim URL As String, Params As String, Ret As String
' Функция получения стоимости SMS
'
' обязательные параметры:
'
' Phones - список телефонов через запятую или точку с запятой
' Message - отправляемое сообщение
'
' необязательные параметры:
'
' Translit - переводить или нет в транслит (1 или 0)
' Sender - имя отправителя (Sender ID)
' Query - дополнительные параметры
'
' возвращает массив (<стоимость>, <количество sms>) либо массив (0, -<код ошибки>) в случае ошибки
'
Public Function Get_SMS_Cost(Phones As String, Message As String, Optional Translit = 0, Optional sender = "", Optional Query = "")
' Функция проверки статуса отправленного SMS
'
' Id - ID cообщения
' Phone - номер телефона
'
' возвращает массив
' для отправленного SMS (<статус>, <время изменения>, <код ошибки sms>)
' для HLR-запроса (<статус>, <время изменения>, <код ошибки sms>, <код страны регистрации>, <код оператора абонента>,
' <название страны регистрации>, <название оператора абонента>, <название роуминговой страны>, <название роумингового оператора>,
' <код IMSI SIM-карты>, <номер сервис-центра>)
' либо список (0, -<код ошибки>) в случае ошибки
'
Public Function Get_Status(Id, Phone)
Dim m
m = SMSC_Send_Cmd("status", "phone=" & URLEncode(Phone) & "&id=" & Id)
' (status, time, err) или (0, -error)
Get_Status = m
End Function
' Инициализация подключения
'
Public Function SMSC_Initialize()
On Error GoTo 0
Set Connection = CreateObject("WinHttp.WinHttpRequest.5.1")
Connection.Option 9, 80
If Err.Number = 440 Or Err.Number = 432 Then
MsgBox "Не удалось создать объект ""WinHttp.WinHttpRequest.5.1""!" & Chr(13) & "Проверьте наличие системной библиотеки ""WinHttp.dll""", , "Ошибка"
Err.Clear
End If
End Function
Полнофункциональная надстройка для отправки SMS-сообщений на основе библиотеки.
Инструкция по установке надстройки:
1) Находясь в главном окне Excel, откройте меню Файл, далее Параметры.
2) Откройте вкладку Надстройки и нажмите кнопку Перейти.
3) В появившемся окне нажмите Обзор и выберите файл с надстройкой.
4) После того, как надстройка появится в окне Доступные надстройки, выделите ее и нажмите ОК.
5) В главном окне во вкладке надстройки появится кнопка Отправить SMS.
6) Чтобы отправить SMS на несколько номеров выделите столбец с номерами и нажмите Отправить SMS.
7) Для отправки индивидуальных сообщений в первом столбце расположите номера телефонов, а во втором тексты сообщений, выделите их и нажмите Отправить SMS.
В некоторых случаях из-за обновления системы безопасности Windows все файлы, полученные из интернета/почты, блокируются при загрузке в Excel. Это делается без каких-либо предупреждающих сообщений.
Если в процессе установки нашей надстройки не появляется кнопка "Отправить SMS" или вкладка "Надстройки", то снять блокировку можно следующим образом:
1. Закрыть все окна Excel.
2. В проводнике выполнить правый клик мыши на файле надстройки.
3. Выбрать пункт "Свойства".
4. На вкладке "Общие" поставить флаг "Разблокировать".
5. Нажать кнопки "Применить" - "OK" или просто "OK".
Для отправки SMS сообщений из Microsoft Access необходимо выполнить следующее:
1) Откройте файл smsc_api_access.accdb с помощью Microsoft Access версии 2007 или выше.
2) Откройте модуль smsc_api.
3) Укажите в строках Public Const SMSC_LOGIN As String, Public Const SMSC_PASSWORD As String Ваш логин и пароль соответственно и сохраните файл.
4) Перейдите на форму Отправка, заполните поля Телефон, Сообщение и, при необходимости, Sender ID и нажмите кнопку Отправить.
//*************************************************************************************** // ВНУТРЕННИЕ СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ //*************************************************************************************** // Процедура инициализации переменных // Процедура ИнициализацияПеременных()
//*************************************************************************************** // Функция преобразования строки вида х,у в список значений // Функция Строка2Список(Стр)
Перем Рез;
Рез = СоздатьОбъект("СписокЗначений"); й = 1;
Для й = 1 По 4 Цикл
Поз = Найти(Стр, ",");
Если Поз = 0 Тогда Рез.ДобавитьЗначение(Стр); Прервать; Иначе Рез.ДобавитьЗначение(Лев(Стр,Поз-1)); КонецЕсли;
Стр = Сред(Стр, Поз+1, СтрДлина(Стр)-Поз);
КонецЦикла;
Возврат Рез;
КонецФункции // Строка2Список()
//*************************************************************************************** Функция URLEncode(Стр1)
Если (КС <= 127) и (флЗаменили = 0) Тогда Рез = Рез + Символ; ИначеЕсли флЗаменили = 0 Тогда Рез = Рез + "%"+ Hex[Цел(КС/16)+1] + Hex[Цел(КС%16)+1]; КонецЕсли;
КонецЦикла;
Возврат Рез;
КонецФункции // URLEncode()
//******************************************************************************* // Переводит время в формате Unix DateTimeStamp в строку с датой, временем // // Пареметры: // ШтампВремени - штамп времени в формате Unix // Функция Unix2Date (ШтампВремени)
//******************************************************************************* // Осуществляет загрузку внешней компоненты WinHttp.dll // Функция УстановитьКомпоненту()
Попытка
Соединение = СоздатьОбъект("WinHttp.WinHttpRequest.5.1"); Соединение.Option(9, 80); Если ЕСТЬ_ПРОКСИ = 1 Тогда Соединение.SetProxy(2, СокрЛП(ПРОКСИ_АДРЕС) + ":" + СокрЛП(ПРОКСИ_ПОРТ)); КонецЕсли;
Исключение
Сообщить("Не удалось создать объект WinHttp.WinHttpRequest.5.1!" + РазделительСтрок + "Проверьте наличие системной библиотеки ""WinHttp.dll""!"); Возврат 0;
КонецПопытки;
Возврат 1;
КонецФункции // УстановитьКомпоненту()
//*************************************************************************************** // Функция чтения адреса // Функция _SMSC_ПрочитатьАдрес(Адрес, Параметры)
Перем Рез;
Попытка Соединение.Open("POST", СокрЛП(Адрес), 0); Если ЕСТЬ_ПРОКСИ = 1 Тогда Соединение.SetCredentials(СокрЛП(ПРОКСИ_ЛОГИН), СокрЛП(ПРОКСИ_ПАРОЛЬ), 1); КонецЕсли; Соединение.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); Соединение.Send(СокрЛП(Параметры)); Рез = Соединение.ResponseText(); Исключение Сообщить("Не удалось получить данные с сервера!", "!"); Возврат ""; КонецПопытки;
Возврат Рез;
КонецФункции //_SMSC_ПрочитатьАдрес()
//*************************************************************************************** // Функция вызова запроса. Формирует URL и делает 5 попыток чтения. // Функция _SMSC_ПослатьКоманду(Команда, Аргументы = "")
//*************************************************************************************** // Функция получения стоимости SMS // // обязательные параметры: // // Телефоны - список телефонов через запятую или точку с запятой // Сообщение - отправляемое сообщение // // необязательные параметры: // // Транслит - переводить или нет в транслит (1 или 0) // Отправитель - имя отправителя (Sender ID) // ДопПараметры - строка дополнительных параметров, добавляемая в URL-запрос ("list=79999999999:Ваш пароль: 123\n78888888888:Ваш пароль: 456") // // возвращает список (<стоимость>, <количество sms>) либо список (0, -<код ошибки>) в случае ошибки // Функция ПолучитьСтоимость(Телефоны, Сообщение, Транслит = 0, Отправитель = "", ДопПараметры = "")
Если (Рез2 >= 0) Тогда Сообщить ("Статус SMS = " + Рез1 + ?(ПустоеЗначение(Рез2) = 0, ", время изменения статуса - " + Unix2Date(Число(Ответ.ПолучитьЗначение(2))), "")); Иначе Сообщить ("Ошибка № " + Строка(-Рез2)); КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции // ПолучитьСтатус()
//*************************************************************************************** // Функция получения баланса // // без параметров // // возвращает баланс в виде строки или 0 в случае ошибки
Функция ПолучитьБаланс()
Ответ = _SMSC_ПослатьКоманду("balance"); // (balance) или (0, -error) Рез = Число(Ответ.ПолучитьЗначение(1));
Если (SMSC_Отладка = 1) Тогда
Если Рез >= 0 тогда Сообщить("Сумма на счете: " + Рез + " руб."); Иначе Сообщить("Ошибка № " + Строка(-Число(Ответ.ПолучитьЗначение(2)))); КонецЕсли;
Перем ЕСТЬ_ПРОКСИ; // Флаг использования PROXY-сервера Перем ПРОКСИ_АДРЕС; Перем ПРОКСИ_ПОРТ; Перем ПРОКСИ_ЛОГИН; Перем ПРОКСИ_ПАРОЛЬ;
Перем Соединение; Перем ФорматыСообщений;
//*************************************************************************************** // ВНУТРЕННИЕ СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ //***************************************************************************************
//*************************************************************************************** // Функция преобразования строки вида х,у в список значений // Функция Строка2Список(Стр)
Перем Рез;
Рез = Новый СписокЗначений; Сч = 1;
Для Сч = 1 По 4 Цикл
Поз = Найти(Стр, ",");
Если Поз = 0 Тогда Рез.Добавить(Стр); Прервать; Иначе Рез.Добавить(Лев(Стр,Поз-1)); КонецЕсли;
Стр = Сред(Стр, Поз+1, СтрДлина(Стр)-Поз);
КонецЦикла;
Возврат Рез;
КонецФункции // Строка2Список()
//*************************************************************************************** // Переводит время в формате Unix DateTimeStamp в строку с датой, временем // // Пареметры: // ШтампВремени - штамп времени в формате Unix // Функция Unix2Date (ШтампВремени)
Возврат Дата("19700101000000") + ШтампВремени;
КонецФункции // Unix2Date()
//*************************************************************************************** функция Hex(КС)
//*************************************************************************************** // Функция вызова запроса. Формирует URL и делает 3 попытки чтения. // Функция _SMSC_ПрочитатьАдрес(Сервер, РесурсНаСервере, _Параметры) Экспорт Перем Рез; Перем ХТТПОтвет;
ЕСТЬ_ПРОКСИ = Ложь;
Прокси = Неопределено; Если ЕСТЬ_ПРОКСИ Тогда Прокси = Новый ИнтернетПрокси; Прокси.НеИспользоватьПроксиДляЛокальныхАдресов = Истина; Прокси.Пользователь = ПРОКСИ_ЛОГИН; Прокси.Пароль = ПРОКСИ_ПАРОЛЬ; Прокси.Установить("http" + ?(SMSC_HTTPS=1, "s", ""), ПРОКСИ_АДРЕС, ПРОКСИ_ПОРТ); КонецЕсли; Попытка Если SMSC_HTTPS = 0 Тогда Соединение = Новый HTTPСоединение(Сервер, , , , Прокси, Ложь); Иначе Соединение = Новый HTTPСоединение(Сервер, , , , Прокси, 10, Новый ЗащищенноеСоединениеOpenSSL); Конецесли; Исключение Сообщить("Не удалось установить соединение с сервером:" + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); Возврат ""; КонецПопытки;
РесурсПараметры = РесурсНаСервере+"?"+_Параметры; Если СтрДлина(РесурсПараметры) < 2000 Тогда // GET
Попытка ХТТПОтвет = Соединение.Получить(РесурсПараметры, ИмяФайлаРезультата); Соединение = Неопределено; Исключение Сообщить("Не удалось получить данные с сервера", СтатусСообщения.Важное); Возврат ""; КонецПопытки;
//Формируем заголовок POST-запроса. ЗаголовокHTTP = Новый Соответствие(); ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded"); ФайлОтправки = Новый Файл(ИмяФайлаОтправки); РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер()); ЗаголовокHTTP.Вставить("Content-Length", Строка(РазмерФайлаОтправки));
Попытка ХТТПОтвет = Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки, РесурсНаСервере, ИмяФайлаРезультата, ЗаголовокHTTP); Соединение = Неопределено; Исключение Сообщить("Не удалось получить данные с сервера:" + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное); Возврат ""; КонецПопытки;
КонецЕсли;
Кодировка = ""; Если Найти(ХТТПОтвет.Заголовки.Получить("Content-Type"), "charset=utf-16be") > 0 Тогда Кодировка = "UTF-16BE"; КонецЕсли; ФайлРезультата = Новый ЧтениеТекста(ИмяФайлаРезультата, Кодировка); Рез = ФайлРезультата.ПрочитатьСтроку();
Возврат Рез;
КонецФункции //_SMSC_ПрочитатьАдрес()
//*************************************************************************************** // Функция вызова запроса. Формирует URL и делает 5 попыток чтения. // Функция _SMSC_ПослатьКоманду(Команда, Аргументы = "")
Сервер = "smsc.ru"; Ресурс = "/sys/" + Команда + ".php"; _Параметры = "login=" + СокрЛП(URLEncode(SMSC_LOGIN)) + "&psw=" + СокрЛП(URLEncode(SMSC_PASSWORD)) + "&fmt=1&charset=utf-16" + ?(Не ПустаяСтрока(Аргументы), "&" + СокрЛП(Аргументы), ""); Для Сч = 1 По 5 Цикл
Если Сч > 1 Тогда Сервер = "www" + Сч + ".smsc.ru"; КонецЕсли;
//*************************************************************************************** // Функция получения стоимости SMS // // обязательные параметры: // // Телефоны - список телефонов через запятую или точку с запятой // Сообщение - отправляемое сообщение // // необязательные параметры: // // Транслит - переводить или нет в транслит // Отправитель - имя отправителя (Sender ID) // ДопПараметры - строка дополнительных параметров, добавляемая в URL-запрос ("list=79999999999:Ваш пароль: 123\n78888888888:Ваш пароль: 456") // // возвращает список (<стоимость>, <количество sms>) либо список (0, -<код ошибки>) в случае ошибки // Функция ПолучитьСтоимость(Телефоны, Сообщение, Транслит = Ложь, Отправитель = "", ДопПараметры = "")
Если (Рез2 >= 0) Тогда Сообщить ("Статус SMS = " + Рез1 + ?(Рез2 > 0, ", время изменения статуса - " + Ответ[1].Значение, "")); Иначе Сообщить ("Ошибка № " + Строка(-Рез2)); КонецЕсли;
КонецЕсли;
Возврат Ответ;
КонецФункции // ПолучитьСтатус()
//*************************************************************************************** // Функция получения баланса // // без параметров // // возвращает баланс в виде строки или 0 в случае ошибки // Функция ПолучитьБаланс()
Ответ = _SMSC_ПослатьКоманду("balance"); // (balance) или (0, -error) Рез = Число(Ответ[0].Значение);
Если SMSC_DEBUG Тогда
Если Рез >= 0 тогда Сообщить("Сумма на счете: " + Рез + " руб."); Иначе Сообщить("Ошибка № " + Строка(-Число(Ответ[1].Значение))); КонецЕсли;
//*************************************************************************************** // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ //***************************************************************************************
if ($wait_sec >= 0) { $header = unpack("N4", $pdu); $pdu .= socket_read($this->socket, $header[1] - 16); // body }
return $pdu; }
private function bind($system_type = '') { $pdu = pack("a".strlen(SMSC_LOGIN)."xa".strlen(SMSC_PASSWORD)."xa".strlen($system_type)."xCCCx", SMSC_LOGIN, SMSC_PASSWORD, $system_type, 0x34, 5, 1); // body $pdu = pack("NNNN", strlen($pdu) + 16, 0x02/*BIND_TRANSMITTER*/, 0, $this->sequence_number).$pdu; // header + body
return $this->send_pdu($pdu); }
public function unbind() { $pdu = pack("NNNN", 16, 0x06/*UNBIND*/, 0, $this->sequence_number); $this->send_pdu($pdu); }
// Функция отправки SMS // // обязательные параметры: // // $phones - список телефонов через запятую или точку с запятой // $message - отправляемое сообщение // // необязательные параметры: // // $sender - имя отправителя (Sender ID). Для отключения Sender ID по умолчанию необходимо в качестве имени // передать пустую строку или точку // $valid - "время жизни" сообщения в минутах // $use_tlv - тип отправки. true - передача текста сообщения в tlv-поле message_payload, false - передача // текста сообщения в поле short_message // time - необходимое время доставки в виде строки (DDMMYYYYhhmm или timestamp)
public function send_sms($phone, $message, $sender = ".", $valid = "", $use_tlv = true, $time = "") // $message в кодировке SMSC_CHARSET { if (preg_match('/[`\x80-\xff]/', $message)) { // is UCS chars $message = iconv(SMSC_CHARSET, "UTF-16BE", $message); $coding = 2; // UCS2 } else $coding = 0; // 7bit
if (!$use_tlv && strlen($message) > 255) $use_tlv = true;
В данном разделе приведены модули и скрипты для различных интернет-сервисов, расширяющие возможности данных сервисов по отправке различных видов
уведомлений посредством SMS-сообщений. Также нашими специалистами разработаны внешние модули для различных CRM-систем и систем управления бизнесом,
таких как amoCRM, Webasyst и другие.
Скрипт позволяет отправлять уведомления о поступлении нового заказа на указанный список телефонов.
Для настройки уведомлений необходимо проделать следующие шаги:
Скопируйте файл smsc.php в каталог <Корневой_каталог_установки_OCStore>/system/smsgate/.
В административной панели управления перейдите в пункт Система – Настройки.
На странице Управление магазинами для выбранного магазина справа в колонке Действие нажмите ссылку Изменить.
На странице Настройки выберите закладку SMS.
В пункте Сервис отправки SMS выберите SMS-шлюз smsc.
В поле Псевдоним отправителя укажите имя отправителя (Sender ID), от которого будут приходить сообщения (имя отправителя должно быть
предварительно зарегистрировано в личном кабинете на данной странице).
В поле Номер телефона получателя укажите номер телефона получателя уведомлений о новом заказе. В поле Дополнительные номера
можно указать список номеров, на которые также будут отправляться уведомления.
В пункте Текст сообщения укажите текст отправляемого уведомления. При составлении текста сообщения можно использовать соответствующие
макросы.
В поле Логин на SMS шлюз укажите логин, а в поле Пароль на SMS шлюз – пароль, указанные при регистрации.
В пункте Включить SMS уведомления выберите Да.
Справа в верхней части страницы нажмите кнопку Сохранить.
Модуль позволяет отправлять SMS-уведомления администратору системы при регистрации нового пользователя, поступлении нового заказа,
поступлении нового письма через контактную форму. Также модуль позволяет настроить отправку уведомлений покупателю при оформлении нового заказа,
успешном завершении регистрации и при изменении статуса заказа (при установленной возможности оповещения покупателя). При настройке текстов
уведомлений можно использовать набор макросов для подстановки различных значений с базы данных. Имеется возможность указания разных текстов
сообщений для различных статусов заказа.
Для установки модуля необходимо выполнить следующие действия:
Установите OpenCart.
Для версии 1.x установите модуль vQmod 2.x (http://code.google.com/p/vqmod/downloads/list).
Для версий 1.x и 2.x cкопируйте файлы соответствующего модуля smsc_opencart в указанные каталоги.
Для версии 2.x в пункте "Установка расширений" загрузите модификацию smsc.ocmod.xml (для версии 3.x модификацию smsc.ocmod.zip). После установки
не забудьте в пункте "Модификаторы" очистить кеш нажав кнопку "Обновить".
Для настройки уведомлений необходимо проделать следующие шаги:
В административной панели управления перейдите в пункт Дополнения – Модули.
На странице Модули выберите модуль SMSC и справа в колонке Действия нажмите ссылку Установить.
После установки модуля выберите действие Изменить.
На странице модуля SMSC во вкладке Подключение в поле Логин укажите логин, а в поле Пароль – пароль,
указанные при регистрации в сервисе. В поле Имя отправителя укажите имя, от которого будут приходить уведомления. Имя отправителя
прежде должно быть зарегистрировано в личном кабинете на данной странице.
Во вкладке Администратор установите галочки для отправки соответствующих уведомлений администратору системы и укажите номер телефона
администратора. При составлении текста уведомления о новом заказе можно использовать специальные макросы.
Во вкладке Покупатель укажите, какие уведомления будут отправляться покупателю.
После установки настроек справа от названия модуля SMSC нажмите кнопку Сохранить.
Для отправки уведомлений покупателю об изменении статуса заказа необходимо в настройках заказа установить соответствующую галочку,
активирующую отправку оповещения покупателю. Для этого перейдите в пункт Продажи – Заказы, выберите требуемый заказ и в колонке
Действия нажмите ссылку Просмотр.
На странице Заказы выберите вкладку История заказа, затем установите требуемый статус заказа и галочку Уведомить покупателя.
После этого нажмите кнопку Добавить историю.
Модуль для IP.Board
Данная разработка позволяет расширить возможности стандартной формы регистрации нового пользователя, добавив в нее дополнительную проверку
принадлежности номера телефона пользователю посредством ввода SMS-кода. Модуль был протестирован для базовой версии 3.4.6, но с большой долей
вероятности будет работать и на других версиях форума.
Для установки модуля необходимо выполнить следующие действия:
Скопируйте файл send_code.php из папки upload архива ipboard_3.zip и файл библиотеки
smsc_api.php в корневой каталог установки форума.
В файле smsc_api.php установите константы SMSC_LOGIN и SMSC_PASSWORD в значения, соответствующие логину и паролю, указанные при
регистрации в сервисе, а константу SMSC_CHARSET в значение utf-8.
Установите хук smsc.xml из архива ipboard_3.zip. Для этого в админцентре форума выберите последовательно пункты меню
Система – Приложения – Управление хуками, нажмите кнопку Установить хук и выберите требуемый файл.
Для защиты от автоматических рассылок кода подтверждения телефона используется общая картинка (captcha), которая обновляется после каждой отправки
кода.
Модуль позволяет отправлять SMS – уведомления с информацией о заказе покупателям и уведомлять администратора магазина о поступившем заказе.
Для установки модуля необходимо выполнить следующие действия:
Установите Prestashop версии 1.3 или выше
В административной панели магазина перейдите на страницу Модули. Нажмите Добавить новый модуль и выберите архив с модулем.
Выберите из списка модуль SMSC и нажмите Установить. После установки откроется страница с настройками.
Настройка модуля:
В поле Логин введите логин, в поле Пароль - пароль, указанные при регистрации в сервисе. В поле Телефон введите телефон администратора, на который необходимо отправлять уведомления о поступивших заказах.
В полях Сообщение администратору и Сообщение покупателю можно указать тексты SMS – сообщений, которые будут отправляться. При составлении текста можно использовать макросы, как показано на рисунке. Все доступные макросы и их значение можно увидеть справа.
Модуль позволяет настраивать отправку SMS-уведомлений для различных событий в интернет-магазине, а также осуществлять рассылку по подписчикам.
Установить модуль можно двумя способами:
Перейдите по ссылке, указанной выше, нажмите Установить и следуйте инструкциям установщика.
В административной панели Вашего магазина перейдите на вкладку Marketplace, затем Каталог решений. Наберите в поиске SMSC.RU: SMS оповещения. После того,
как модуль будет найден, нажмите Установить и следуйте инструкциям установщика.
Настройка модуля:
В административной панели Вашего интернет-магазина перейдите на вкладку Настройки, затем Настройки модулей и выберите из выпадающего списка модуль SMSC.RU: SMS оповещения.
На вкладке Настройки шлюза укажите Ваш логин и пароль от шлюза smsc.ru
На вкладке Интернет-магазин задайте шаблоны для всех событий (допускается использование макросов).
В Поле отправителя можно указать имя отправителя, от которого будут приходить сообщения. Имя отправителя должно быть зарегистрировано в личном кабинете.
Приложение позволяет организовать отправку SMS, Viber, голосовых сообщений, а также сообщений в соцсети "Одноклассники", "ВКонтакте" или
пользователям "Mail.Ru Агент" из карточек лидов, сделок и контактов, массовых рассылок из списков данных сущностей, а также настроить отправку из роботов и бизнес-процессов.
Для установки приложения необходимо найти его в списке приложений по названию "СМС-центр", нажать кнопку "Установить" и следовать инструкциям установщика. После установки в форме настроек потребуется ввести корректные логин и пароль, указанные при регистрации в сервисе (либо указать пароль для http-протокола, созданный в личном кабинете сервиса), установить требуемые опции.
При отправке возможно использование макросов для подстановки соответствующих данных из карточек в текст сообщения, выбор имени отправителя, перевод текста сообщения в транслит. Также приложение позволяет получать статусы доставки сообщения (если при установке приложения включить галочку "Установить обработчик для статусов сообщений"). При отправке голосовых сообщений возможно получение комбинации клавиш, нажатой абонентом на клавиатуре телефона во время прослушивания сообщения.
Модуль для BillManager
Модуль позволяет организовать защиту от мошенников (подтверждение для определенных услуг), восстановление пароля, а также различные уведомления
(о продлении услуг, об окончании периода действия и т.п.) посредством SMS или голосовых сообщений (звонков).
Установка модуля:
Войдите в командную оболочку на Вашем сервере и выполните команду "wget http://smsc.ru/files/smsc_billmgr.zip" (для уведомлений через SMS)
или "wget http://smsc.ru/files/smsc_billmgr_voice.zip" (для уведомлений с помощью голосовых сообщений)
Распакуйте архив и перенесите файлы из папок etc и sbin в соответствующие папки BillManager (/usr/local/ispmgr/etc и /usr/local/ispmgr/sbin)
Выполните команду chmod o+x /usr/local/ispmgr/sbin/fpsmsc.php
Плагин для WordPress WooCommerce
Плагин позволяет настроить отправку SMS уведомлений клиентам с информацией о заказе, а также информировать администратора магазина о поступлении нового заказа и смене его статуса.
Обратите внимание, что для работы плагина требуется плагин WooCommerce! Скачать его можно здесь.
Установка плагина:
В административной панели перейдите на страницу Плагины и нажмите Добавить новый.
Перейдите на вкладку Загрузить, нажмите Обзор и выберите архив с плагином.
Нажмите Установить. После того, как плагин будет установлен, нажмите Активировать плагин.
Настройка плагина:
Наведите курсор на пункт меню WooCommerce и выберите SMS оповещения
В форме Настройки шлюза укажите Ваш логин, пароль и телефон, на который необходимо отправлять уведомления. Также Вы можете указать имя отправителя.
В форме Шаблоны сообщений укажите шаблоны для отправки сообщений при наступлении событий Новый заказ и Статус заказа изменен. При заполнении шаблонов
допускается использование макросов (допустимые макросы указаны справа).
Установите опции для отправки уведомлений администратору и/или клиентам.
Для возможности отправки и получения статусов SMS-сообщений по протоколу программы R-Keeper (UCS) необходимо вызвать скрипт:
https://smsc.ru/sys/rkeeper_api.php
и передать ему соответствующий XML документ. После принятия и обработки данных Сервер возвращает Клиенту подтверждение с
указанием результата обработки.
Модуль для Joomla! 3.6 (VirtueMart)
Модуль позволяет настроить отправку SMS-уведомлений администратору магазина и покупателям о поступлении нового заказа и смене статуса заказа.
Выбираем в меню "Расширения -> Менеджер расширений -> Установить".
Выбираем способ установки - из файла пакета, из каталога.
В зависимости от способа установки либо загружаем файл пакета, либо устанавливаем предварительно распакованные файлы из временной папки.
При успешной установке появится соответствующее сообщение и описание установленного пакета.
Настройка модуля:
Переходим в Менеджер плагинов (Расширения -> Менеджер плагинов).
Находим плагин "SMS Plugin by SMSC.RU".
Нажимаем на название плагина и открываем его настройки.
Если вы еще не зарегистрировались на сайте SMSC.RU - делаем это прямо сейчас.
Заносим данные пользователя, полученные на сайте SMSC.RU - логин, пароль, имя отправителя.
Добавляем телефон администратора магазина и редактируем на свое усмотрение сообщения, которые будут отправляться администратору магазина и покупателю при наступлении определенных событий - новом заказе или изменении статуса заказа.
Выбираем кнопками "Вкл" и "Выкл" саму возможность отправки сообщений.
Нажимаем "Сохранить и закрыть".
Выбираем галочкой плагин и нажимаем "Включить".
Плагин готов к работе.
Виджет для amoCRM
Виджет позволяет осущеcтвлять отправку SMS и Viber-сообщений в системе amoCRM из списков и карточек сделок, контактов и компаний. При формировании сообщений возможно указание имени отправителя, использование макросов и шаблонов, выбор времени отправки сообщений. Виджет поддерживает автоматическую отправку сообщений из цифровой воронки при возникновении различных событий.
Для установки виджета необходимо в личном кабинете amoCRM перейти в пункт "Настройки" - "Интеграции", найти наш виджет в общем списке, нажать на иконку виджета, затем ввести логин и пароль, указанные при регистрации в нашем сервисе (либо пароль для API (HTTP/S, SOAP, SMTP)), и установить галочку "Я подтверждаю согласие на передачу данных аккаунта amoCRM на сервер компании "СМС-центр"". После успешного сохранения настроек виджет готов к работе.
Плагин для Webasyst (Shop-Script)
Плагин позволяет осуществлять отправку уведомительных SMS-сообщений при возникновении различных событий, связанных со сменой статусов заказов, произведенных в интернет-магазине на основе Shop-Script. При создании уведомлений возможно использование макросов, характеризующих различные свойства товара (цена, название, количество и т.д.).
Установка плагина:
Заходим в административную панель Webasyst.
Выбираем в меню "Инсталлер - Плагины".
На открывшейся странице находим наш плагин "СМС-центр" и устанавливаем его.
Настройка плагина:
После установки плагина переходим в пункт "Магазин - Настройки". В самом низу страницы настроек заполняем поля "Логин" и "Пароль" значениями, указанными при регистрации в нашем сервисе (для пароля возможно указание значения из пункта API (HTTP/S, SOAP, SMTP)). После успешного сохранения настроек плагин готов к работе. Создать и настроить требуемые SMS-уведомления можно в пункте "Уведомления".
Проверка номеров телефонов
Для проверки формата номеров телефонов на стороне Клиента возможно использование регулярных выражений, перечисленных ниже.
По всем странам:
По СНГ:
Определение тарифной зоны
Для определения тарифной зоны на стороне Клиента возможно использование следующих регулярных выражений:
Форма для отправки SMS-сообщений
Для отправки SMS-сообщений со своего сайта можно воспользоваться следующим примером HTML-формы и соответствующего
PHP-скрипта, обрабатывающего данные этой формы.
Исходный код формы:
<html> <form method="post" action="send.php">
Для подтверждения номера мобильного телефона, например, при активации новой учетной записи на сайте
можно использовать следующий пример HTML-формы и PHP-скрипта, обрабатывающего данные формы. Во избежание отправки множественных запросов на форме
можно дополнительно разместить антиспам проверку (captcha).
Исходный код формы:
<html> <form method="post" action="act.php">
</form> <iframe name="ifr" frameborder="0" height="0" width="0" style="visibility:hidden"></iframe> </html>
Файл act.php, обрабатывающий данные формы и использующий библиотеку smsc_api.php:
<? echo "<script>parent.document.getElementById('_out').innerHTML = '";
include_once "smsc_api.php";
if (isset($_POST["sendsms"])) { $r = send_sms($_POST["phone"], ok_code($_POST["phone"]));
if ($r[1] > 0) echo "Код подтверждения отправлен на номер ".$_POST["phone"]; }
if (isset($_POST["ok"])) { $oc = ok_code($_POST["phone"]);
if ($oc == $_POST["code"]) echo "Номер активирован"; else echo "Неверный код подтверждения"; }
echo "'</script>";
function ok_code($s) { return hexdec(substr(md5($s."<секретная строка>"), 7, 5)); } ?>
Для избежания множественных запросов кода подтверждения с одного IP-адреса
и на один номер телефона рекомендуем сделать соответствующий контроль на
своем сервере. Для ограничения количества запросов на один номер телефона возможно
установить соответствующий лимит в "Настройках пользователя".
Также в форму подтверждения желательно добавить картинку с кодом (captcha)
для защиты от программных автоматических спам-рассылок.
Форма для подтверждения адреса электронной почты
Для подтверждения адреса электронной почты, например, при активации новой учетной записи на сайте
можно использовать следующий пример HTML-формы и PHP-скрипта, обрабатывающего данные формы. Во избежание отправки множественных запросов на форме
можно дополнительно разместить антиспам проверку (captcha).
Исходный код формы:
<html> <form method="post" action="act.php">
if ($r[1] > 0) echo "Код подтверждения отправлен на e-mail адрес ".$_POST["phone"]; }
if (isset($_POST["ok"])) { $oc = ok_code($_POST["phone"]);
if ($oc == $_POST["code"]) echo "E-mail адрес активирован"; else echo "Неверный код подтверждения"; }
echo "'</script>";
function ok_code($s) { return hexdec(substr(md5($s."<секретная строка>"), 7, 5)); } ?>
Для избежания множественных запросов кода подтверждения с одного IP-адреса
и на один адрес электронной почты рекомендуем сделать соответствующий контроль на
своем сервере. Также в форму подтверждения желательно добавить картинку с кодом (captcha)
для защиты от программных автоматических спам-рассылок.