Перейти к содержимому


СМС-рассылки через сторонний СМС-шлюз

sms

Сообщений в теме: 9

#1 ralf.ipsystems

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 16 Декабрь 2011 - 19:33

В разделе "Модули" - "СМС рассылки (1.0)" добавляю СМС шлюз, в код которого пишу:

function send_sms()
{
  global $sms;
  // В тело функции необходимо вставить код отправки смс на выбранный шлюз.
  // В коде можно использовать следующие переменные:
  // sms["phone"] - номер абонента;
  // sms["text"] - текст сообщения;
  // sms["sender"] - подпись или номер отправителя.
  // Функция должна возвратить результат "OK" в случае удачной отправки или сообщение об ошибке.
  $data = "
	<?xml version='1.0' encoding='UTF-8' ?>
	<request method='send-sms' login='_логин_' passw='_пароль_'>
	<msg id='1' phone='$sms[phone]' sn='$sms[sender]'>$sms[text]</msg>
	</request>";


  $response = '';
  if ($fp = fsockopen ("wap.olympia.net.ua", 80, $errno, $errstr, 30)) {
   $request ="POST /websend/default.aspx HTTP/1.0\r\n";
   $request.="Host: wap.olympia.net.ua\r\n";
   $request.="Content-Type: text/xml\r\n";
   $request.="Content-Length: ".strlen($data)."\r\n";
   $request.=$data."\r\n\r\n";
  
   fputs($fp, $request);

   while (!feof($fp)) { $response.=fread($fp,8192); }
   fclose($fp);
  
return 'OK';
}
  else {
   return 'ERROR $errno - $errstr';
  }
}

Мануал по API от СМС шлюза:

Цитата

URL сервиса: http://wap.olympia.n...nd/default.aspx

Формат требуемого xml:

<?xml version="1.0" encoding="UTF-8" ?>
<request method="send-sms" login="LOGIN" passw="PASSWORD">
<msg id="1" phone="PHONE_NUMBER" sn="SENDER">TEXT_OF_MESSAGE</msg>
</request>

LOGIN - логин, зарегестрированный в системе
PASSWORD - пароль вашей учетной записи
PHONE_NUMBER - 12-значный номер телефона (напр.
380671234567)
SENDER - альфанумерическое имя, 11 символов латиницей
TEXT_OF_MESSAGE - текст сообщения в кодировке UTF-8

Ответ от нас:

<?xml version="1.0" encoding="UTF-8" ?>
<response method="send-sms">
<msg id="1" mid="MID" res="0"/>
</response>

MID - возвращается уникальный ID в нашей
системе
res - 0 (принято к отправке), -1 (не принято)

Проблема в том что если вышеописанный код запускать самостоятельно не через clientbase то все работает, если же запускаем через clientbase то сам clientbase сообщает что сообщение отправлено, хотя сообщение не приходит и в логах получаем:

Цитата

HTTP/1.1 200 OK
Connection: close
Date: Thu, 15 Dec 2011 21:02:35 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 481


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Декабрь 2011 - 11:09

1. Элементы массива внутри строки должны помещаться в фигурные скобки, см. мануал по PHP:
  $data = "
		<?xml version='1.0' encoding='UTF-8' ?>
		<request method='send-sms' login='_логин_' passw='_пароль_'>
		<msg id='1' phone='{$sms['phone']}' sn='{$sms['sender']}'>{$sms['text']}</msg>
		</request>";

2. Как я понял из описания шлюза и вашего кода, вы должны получить ответ от шлюза в переменную $response. Но где у вас обработка этого ответа? Из ответа вы должны выделить значение res и затем возвращать ОК только если оно равно нулю.

В остальном вроде все верно.

#3 ralf.ipsystems

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений

Отправлено 19 Декабрь 2011 - 10:39

1. Спасибо. Исправлено. Заработало. Также причиной проблемы были пробелы перед "<?xml".

Работающий код:
function send_sms()
{
  global $sms;
  // В тело функции необходимо вставить код отправки смс на выбранный шлюз.
  // В коде можно использовать следующие переменные:
  // sms["phone"] - номер абонента;
  // sms["text"] - текст сообщения;
  // sms["sender"] - подпись или номер отправителя.
  // Функция должна возвратить результат "OK" в случае удачной отправки или сообщение об ошибке.
  $data = "
<?xml version='1.0' encoding='UTF-8' ?>
    <request method='send-sms' login='_логин_' passw='_пароль_'>
    <msg id='1' phone='{$sms['phone']}' sn='{$sms['sender']}'>{$sms['text']}</msg>
    </request>";
 
  $response = '';
  if ($fp = fsockopen ("wap.olympia.net.ua", 80, $errno, $errstr, 30)) {
   $request ="POST /websend/default.aspx HTTP/1.0\r\n";
$request.="Host: wap.olympia.net.ua\r\n";
   $request.="Content-Type: text/xml\r\n";
   $request.="Content-Length: ".strlen($data)."\r\n";
   $request.=$data."\r\n\r\n";
  
   fputs($fp, $request);
   while (!feof($fp)) { $response.=fread($fp,8192); }
   fclose($fp);
  
return 'OK';
}
  else {
   return 'ERROR $errno - $errstr';
  }
}

2. Ответ от шлюза это уже второстепенная задача. Еще раз благодарю за помощь в решении основной проблемы.

#4 TIRO

    Участник

  • Пользователи
  • PipPip
  • 20 сообщений
  • Пол:Женщина

Отправлено 21 Февраль 2012 - 10:32

Подскажите, пожалуйста, какова в среднем трудоемкость подключения стороннего СМС-шлюза?

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Февраль 2012 - 11:14

А каким критерием то мерить? Смотря какой шлюз и смотря кто подключает. Для опытного программиста особой сложности думаю нет.

#6 TIRO

    Участник

  • Пользователи
  • PipPip
  • 20 сообщений
  • Пол:Женщина

Отправлено 21 Февраль 2012 - 11:49

Часами)), средняя для опытного программиста

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Февраль 2012 - 11:57

Ну если учитывать полное время, начиная с изучения документации провайдера на подключение шлюза через php, адаптацию и тестирование кода в Клиентской базе - то возможно и "часами". Хотя вполне может хватить и пары часов.

#8 TIRO

    Участник

  • Пользователи
  • PipPip
  • 20 сообщений
  • Пол:Женщина

Отправлено 21 Февраль 2012 - 12:39

Спасибо

#9 f-jeka

    Активный участник

  • Пользователи
  • PipPipPip
  • 196 сообщений

Отправлено 08 Март 2013 - 01:33

Не появилось готовых решений под сторонние смс-шлюзы?

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 11 Март 2013 - 12:17

Просмотр сообщенияf-jeka (08 Март 2013 - 01:33) писал:

Не появилось готовых решений под сторонние смс-шлюзы?

Нет, мы не предоставляем готовых решений по подключению сторонних шлюзов. Вместо этого предлагаем использовать наш шлюз.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных