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


Публикации ralf.ipsystems

2 публикаций создано ralf.ipsystems (учитываются публикации только с 29-Март 23)


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

Отправлено от ralf.ipsystems в 16 Декабрь 2011 - 19:33 in Как это сделать

В разделе "Модули" - "СМС рассылки (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



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

Отправлено от ralf.ipsystems в 19 Декабрь 2011 - 10:39 in Как это сделать

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. Ответ от шлюза это уже второстепенная задача. Еще раз благодарю за помощь в решении основной проблемы.