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


Альтернативный шлюс СМС рассылок

смс рассылка шлюз

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

#1 alexey.malgin

    Новичок

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

Отправлено 10 Декабрь 2013 - 05:38

Здравствуйте,

требуется интегрироваться со сторонним смс шлюзом. После добавления функции send_sms через вашу форму, результат рассылки всегда "Провален", и сообщение об ошибке пустое, хотя оно формируется как описано в комментариях: "ERROR:".$response_message

Подскажите, пожалуйста, возможно у вас изменился шаблон поведения этой функции? Как сделать чтоб смс рассылки через сторонний шлюз все-таки заработали? Как получить нормальное сообщение об ошибке, в слечае проблем на стороне шлюза? Или как увидеть реальный ответ шлюза?

Клиент: sistema2.clientbase.ru
Шлюз: Чили

Функция:
function send_sms() {
		global $sms;
		$apikey = '...';
		$json = file_get_contents('http://chilisms.ru/smsapi/message/send?apikey='.$apikey.'&recipients='.$sms['phone'].'&text='.urlencode($sms['text']).'&signature='.$sms['sender']);
		$json = json_decode($json, true);
		if ('ok' == $json['status'] ) {
						$message = "OK";
		} else {
						$message = "ERROR:".$json['message'];
		}
		return $message;		
}


#2 CbCoder

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

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

Отправлено 10 Декабрь 2013 - 10:01

Если сообщение об ошибке пустое, значит в переменной $json['message'] у вас пусто. Возможно не ту переменную используете, это вам необходимо уточнять в инструкции к шлюзу.

Остальное вроде все корректно с точки зрения наших правил. Вы пробовали посылать сообщение просто по http адресу, вне КБ? Уходит-приходит?

#3 alexey.malgin

    Новичок

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

Отправлено 10 Декабрь 2013 - 11:28

Просмотр сообщенияCbCoder (10 Декабрь 2013 - 10:01) писал:

Если сообщение об ошибке пустое, значит в переменной $json['message'] у вас пусто. Возможно не ту переменную используете, это вам необходимо уточнять в инструкции к шлюзу.

Я представитель этого самого шлюза, по этому и хочу знать что приходит от него в ответ. Переменная там точно есть.

Просмотр сообщенияCbCoder (10 Декабрь 2013 - 10:01) писал:

Остальное вроде все корректно с точки зрения наших правил. Вы пробовали посылать сообщение просто по http адресу, вне КБ? Уходит-приходит?

Да, разумеется, обычным GET запросом все корректно обрабатывается. Кстати, какой тип запроса используется у вас? Возможно в этом проблема, хотя мы должны принимать и POST и GET.

#4 CbCoder

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

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

Отправлено 10 Декабрь 2013 - 14:35

Цитата

Кстати, какой тип запроса используется у вас?

Где у нас, не совсем понял? Тип запроса абсолютно никакого значения для программы Клиентская база не имеет, отсылать сообщение вы можете любым каким угодно способом (на PHP, разумеется). Для программы имеет значение только возвращаемый вами через return результат, да и то больше для вашего же удобства (чтобы видеть в логе результат отправки). Обязательной является только инструкция global $sms, т.к. иначе вы не сможете использовать данные сообщения (текст, адресат и отправитель), все остальное полностью произвольно и зависит только от инструкций провайдера шлюза.

Цитата

Я представитель этого самого шлюза, по этому и хочу знать что приходит от него в ответ. Переменная там точно есть.

Если вы представитель шлюза, то про ответ вы сами должны все знать. Мы уж точно лучше вас знать не можем что ваш шлюз возвращает. Попробуйте протестировать фунцию на голом скрипте (не в КБ), например:

<?php
function send_sms() {
	global $sms;
	$apikey = '...';
	$json = file_get_contents('http://chilisms.ru/smsapi/message/send?apikey='.$apikey.'&recipients='.$sms['phone'].'&text='.urlencode($sms['text']).'&signature='.$sms['sender']);
	$json = json_decode($json, true);
	if ('ok' == $json['status'] ) {
		$message = "OK";
	} else {
		$message = "ERROR:".$json['message'];
	}
	return $message;				
}

$sms['phone'] = 1111; // здесь вводите нужный номер получателя
$sms['text'] = "test"; // здесь вводите нужный текст сообщения
$sms['sender'] = "my_signature"; // здесь вводите подпись отправителя

$result = send_sms(); // отправляем сообщение
echo $result; // выводим результат отправки
?>

Если не сработает, выводите на экран текст запроса, может он неверно формируется. Если верно, выводите текст ответа для анализа, и т.д. Короче, стандартная отладка.

#5 alexey.malgin

    Новичок

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

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

Во вложении работающий тестовый скрипт, который отправляет смс. Но если вставить код функции из этого скрипта - результат такой же, как описано выше: статус рассылки/сообщения "Провалено", текст ошибки пустой.

Денег на аккаунте хватит на несколько смс - можете попробовать сами. Чтобы получить ошибку - измените параметр $sms['sender']. Свой телефон, разумеется, можно менять.

Прикрепленные файлы

  • Прикрепленный файл  index.php   647байт   190 Количество загрузок:


#6 CbCoder

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

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

Отправлено 11 Декабрь 2013 - 18:13

У меня и тестовый файл не сработал, хотя по прямой ссылке ушло. Очевидно, причина в том что file_get_contents далеко не всегда и не везде работает с http адресами, в зависимости от настроек конкретного веб-сервера, и как правило как раз таки не работает. Поэтому мы в программе используем для этой цели класс snoopy. Соответственно, и в вашей функции нужно его использовать:

function send_sms()
{
	global $sms;
	$apikey = '...';
	$snoopy = new Snoopy;
	$snoopy->fetch('http://chilisms.ru/smsapi/message/send?apikey='.$apikey.'&recipients='.$sms['phone'].'&text='.urlencode($sms['text']).'&signature='.$sms['sender']);
	$json = json_decode($snoopy->results, true);
	if ('ok' == $json['status'] ) {
		$message = "OK";
	} else {
		$message = "ERROR:".$json['message'];
	}
	return $message;
}

По крайней мере у меня после этого изменения все прекрасно отослалось.





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

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