Php отправить смс на телефон
Отправка форм с чужого сайта
Здравствуйте,вот задачка: Допустим нам даны 10 id-шников разных людей в вк Задача автоматически.
2. заключить договор с сотовым оператором (обычно недешиво)
3. рассылать смс на смс ящики, требует у абонента соответствующей подключенной услуги ясно. Тогда вот есче вопрос, помогите написать на пыхе скрипт регистрации iсq. Bomboos, Для регистрации icq тоже капчу нужно распознавать, а дальше отсылаешь нужные данные и все.
не понимаю в чем проблема отправки смс с сайта.
вот статья на эту тему: Отправка СМС с сайта
Ну вот тебе готовое вставляй работает
Код для запуска формы отправки SMS с Вашего сайта
Скрипт, размещаемый в заголовке страницы между тегами <head> и </head>.
Строка для запуска формы отправки sms - первый вариант (текстовая ссылка)Строка для запуска формы отправки sms - второй вариант (рисунок)
Рисунок можете ставить любой, писать в ссылке что хотите.
Запуск формы с дополнительными параметрами
Форму можно запускать со следующими дополнительными параметрами:
setfrom*- устанавливает почтовый адрес, который виден на экране телефона перед текстом sms. Адрес не обязательно должен быть реальным, но в нем обязательно должен присутствовать знак "@" и в наборе символов после этого знака должна присутствовать точка. Он может состоять из латинских букв и цифр, например: [email protected] Длина адреса не должна превышать 19 символов. Такая подстановка адреса поддерживается не всеми мобильными операторами!*
links*- устанавливает, показывать или нет наши ссылки "на главную", "в дурдом" и "справка". Если links=no ссылки не показываются (по умолчанию links=yes).*
Отправка SMS с Вашего e-mail
Вы можете также приобрести наш скрипт отправки sms (без базы мобильных операторов). Это позволит Вам организовать отправку sms непосредственно с Ваших почтовых ящиков, контролировать доставку sms, а также получать ответы с мобильных телефонов.
Язык программирования: PHP
Метод отправки sms: EmailToSMS
Скрипт оптимизирован для уменьшения нагрузки на web-сервер
Обзор
Мы разобьём это - по одному за раз:
Email на SMS
- Номер телефона или уникальный идентификатор мобильного устройства, с которым вы хотите связаться.
- И доменное имя беспроводной сети (многие могут быть найдены в this списке email на SMS-адреса)
Для большинства носителей можно придерживаться следующего соглашения:
PHP's mail функция
Можете почитать ещё here.
В ранней версии функциональности мы могли бы написать следующий PHP-код:
Тест-драйв
Добавление удобства
Разметка
Избегая основ, давайте рассмотрим эту идею и обернём вокруг неё пользовательский интерфейс. Сначала мы создадим простую форму:
Стиль
Далее мы брызнем CSS:
Это даст нам следующий простой вид:
Скрипт
Самой важной частью этого является скрипт PHP. Мы напишем этот фрагмент кода:
Окончательный код
Исправление проблем
Ошибка локального домена
Чтобы использовать mail функцию, у вас должен быть почтовый сервер. Если вы запускаете это на web host, то, вероятно, всё в порядке. Но если вы не уверены, я рекомендую поговорить с администратором. Это относится и к персональным компьютерам. Но если вы получите такие ошибки, как ..
. вам придется установить и настроить почтовый сервер. Это выходит за рамки данного урока. Однако, если вы работаете на своей локальной машине, переход на нечто вроде XAMPP может решить эту проблему. Или попробуйте установить Mercury Mail вместе с WAMP, MAMP или LAMP (или SAMP или OAMP и пр.) систему (много разных «AMP»).
PHPMailer
Его использование так же просто, как включение класса в ваш скрипт.
Это должно распечатывать что-то вроде:
Может потребоваться немного больше, чтобы настроить соединение в зависимости от вашей ситуации. Если вы планируете использовать Gmail, Google предоставил information on connecting.
Заключение
-
Использование SMS Gateway Provider
- Это может быть дорогостоящим и медленным способом, поскольку вам нужно купить модем и заключить контракт с беспроводной сетью
- Ещё можно использовать AT (Hayes) command set.
Постановка задачи
Первое, что нужно для себя понять, какими свойствами и возможностями должен обладать наш код, что мы хотим от него получить и как с ним взаимодействовать. Для этого я поставил для себя пару вопросов и постарался максимально на них ответить.
На чем будем писать backend
Тут все просто, что умеем, на том и пишем, поэтому в моем случае – PHP
Авторизация
Конечно. Сервис будет смотреть в интернет, поэтому авторизация обязательна.
Один пользователь – одна sim-карта?
Конечно нет. У нас сервис для личного пользования и мы хотим иметь один логин, но при этом отправлять с нескольких номеров. Но если появится необходимость выделить один шлюз под конкретный сервис, мы должны иметь возможность добавления пользователей.
Задача на разработку поставлена, цель ясна, итак приступим
Первое что мы сделаем, определим структуру база данных. Без нее, при наших потребностях никак. Использовать будем MySQL.
Дальше нужно будет написать пару классов, к которым мы были обращаться.
Приступим к созданию БД и создание таблиц
Я буду использовать несколько таблиц для:
Стоит подробнее остановиться на таблице с данными шлюза и используемых полей – smsc_gateway. Здесь мы используем:
В итоге мы получаем такую последовательность действий.
Пользователь отправляет запрос с параметрами:
. /smsc.php?login=&pass=&tel=&msg=&flash=1&replacemessages_id=1
Вот, что происходит под капотом smsc.php
Новая версия smsc.php, доработанная по комментариям (добавлены проверки на массив и на ключи входящих параметров. Улучшена безопасность при получении входных параметровПервым делом мы подключаем файл с настройками – config.php:
делаем небольшую проверку на XSS, а далее проверяем авторизацию, вызывая метод класса Users_Auth::do($PDO):
Если получили false – авторизация не удалась, возвращаем код и описание ошибки в json, если необходимо.
Дальше мы используем простой скрипт, который поставим в cron и будем вызывать раз в 5-10 секунд (по вкусу) – send_queue.php
Извлекаем из тела json uuid пользователя, обращаемся к таблице и получаем список активных шлюзов. Идем в таблицу со счётчиком и проверяем, не превышен ли лимит на отправку. Если мы получили активный шлюз и счётчик не превышен, ставим на него тег — lock, чтобы никакой другой процесс уже не смог параллельно к нему обратиться. Все вызовы происходит внутри метода send(), но логика раскидана по другим методам класса. По указанному выше описанию работы метода эти обращения легко видны.
Далее мы создаем объект класса $send_proc = new Gammu_SMS($param) с параметрами и обращаемся к методу $send_proc->send($attr) с атрибутами
Весь код метода send():
Для PHP
function send_sms ( $phones , $message , $translit = 0 , $time = 0 , $id = 0 , $format = 0 , $sender = false , $query = "" , $files = array())
static $formats = array( 1 => "flash=1" , "push=1" , "hlr=1" , "bin=1" , "bin=2" , "ping=1" , "mms=1" , "mail=1" , "call=1" , "viber=1" , "soc=1" );
// (id, cnt, cost, balance) или (id, -error)
// SMTP версия функции отправки SMS
function get_sms_cost ( $phones , $message , $translit = 0 , $format = 0 , $sender = false , $query = "" )
static $formats = array( 1 => "flash=1" , "push=1" , "hlr=1" , "bin=1" , "bin=2" , "ping=1" , "mms=1" , "mail=1" , "call=1" , "viber=1" , "soc=1" );
// (cost, cnt) или (0, -error)
if ( SMSC_DEBUG ) if ( $m [ 1 ] > 0 )
echo "Стоимость рассылки: $m [ 0 ] . Всего SMS: $m [ 1 ] \n" ;
else
echo "Ошибка №" , - $m [ 1 ], "\n" ;
>
// (status, time, err, . ) или (0, -error)
if (! strpos ( $id , "," )) if ( SMSC_DEBUG )
if ( $m [ 1 ] != "" && $m [ 1 ] >= 0 )
echo "Статус SMS = $m [ 0 ] " , $m [ 1 ] ? ", время изменения статуса - " . date ( "d.m.Y H:i:s" , $m [ 1 ]) : "" , "\n" ;
else
echo "Ошибка №" , - $m [ 1 ], "\n" ;
foreach ( $m as $k => $v )
$m [ $k ] = explode ( "," , $v );
>
// Функция получения баланса
//
// без параметров
//
// возвращает баланс в виде строки или false в случае ошибки
function get_balance ()
$m = _smsc_send_cmd ( "balance" ); // (balance) или (0, -error)
if ( SMSC_DEBUG ) if (!isset( $m [ 1 ]))
echo "Сумма на счете: " , $m [ 0 ], "\n" ;
else
echo "Ошибка №" , - $m [ 1 ], "\n" ;
>
return isset( $m [ 1 ]) ? false : $m [ 0 ];
>
// Функция вызова запроса. Формирует URL и делает 5 попыток чтения через разные подключения к сервису
$ret = _smsc_read_url ( $url , $files , 3 + $i );
>
while ( $ret == "" && $i < 5 );
if ( $ret == "" ) if ( SMSC_DEBUG )
echo "Ошибка чтения адреса: $url \n" ;
$ret = "," ; // фиктивный ответ
>
if ( $cmd == "status" ) parse_str ( $arg , $m );
if ( strpos ( $m [ "id" ], "," ))
$delim = "\n" ;
>
return explode ( $delim , $ret );
>
function _smsc_read_url ( $url , $files , $tm = 5 )
$ret = "" ;
$post = SMSC_POST || strlen ( $url ) > 2000 || $files ;
if ( function_exists ( "curl_init" ))
static $c = 0 ; // keepalive
if (! $c ) $c = curl_init ();
curl_setopt_array ( $c , array(
CURLOPT_RETURNTRANSFER => true ,
CURLOPT_CONNECTTIMEOUT => $tm ,
CURLOPT_TIMEOUT => 60 ,
CURLOPT_SSL_VERIFYPEER => 0 ,
CURLOPT_HTTPHEADER => array( "Expect:" )
));
>
curl_setopt ( $c , CURLOPT_POST , $post );
if ( $post )
list( $url , $post ) = explode ( "?" , $url , 2 );
if ( $files ) parse_str ( $post , $m );
foreach ( $m as $k => $v )
$m [ $k ] = isset( $v [ 0 ]) && $v [ 0 ] == "@" ? sprintf ( "\0%s" , $v ) : $v ;
$post = $m ;
foreach ( $files as $i => $path )
if ( file_exists ( $path ))
$post [ "file" . $i ] = function_exists ( "curl_file_create" ) ? curl_file_create ( $path ) : "@" . $path ;
>
curl_setopt ( $c , CURLOPT_POSTFIELDS , $post );
>
curl_setopt ( $c , CURLOPT_URL , $url );
$ret = curl_exec ( $c );
>
elseif ( $files ) if ( SMSC_DEBUG )
echo "Не установлен модуль curl для передачи файлов\n" ;
>
else if (! SMSC_HTTPS && function_exists ( "fsockopen" ))
$m = parse_url ( $url );
if (! $fp = fsockopen ( $m [ "host" ], 80 , $errno , $errstr , $tm ))
$fp = fsockopen ( "212.24.33.196" , 80 , $errno , $errstr , $tm );
if ( $fp ) stream_set_timeout ( $fp , 60 );
fwrite ( $fp , ( $post ? "POST $m [ path ] " : "GET $m [ path ] ? $m [ query ] " ). " HTTP/1.1\r\nHost: smsc.ru\r\nUser-Agent: PHP" .( $post ? "\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: " . strlen ( $m [ 'query' ]) : "" ). "\r\nConnection: Close\r\n\r\n" .( $post ? $m [ 'query' ] : "" ));
while (! feof ( $fp ))
$ret .= fgets ( $fp , 1024 );
list(, $ret ) = explode ( "\r\n\r\n" , $ret , 2 );
fclose ( $fp );
>
>
else
$ret = file_get_contents ( $url );
>
Читайте также: