Протокол SOAP

1. Параметры подключения

WSDL (любой из ниже перечисленных)

2. Соглашения

2.1 Входные параметры

Для межъязыковой совместимости все наборы входных параметров обернуты классами. Далее по тексту:

  • Если не указаны входные параметры, значит метод не имеет их

2.2 Возвращаемые данные

Методы делятся на два типа :

  • не возвращают никаких данных — данные методы используются для сигнализации
  • возвращают структурированные данные

Базовый класс для всех возвращаемых данных содержит:

errorCode — целое знаковое число
errorDescription — строка описания

Принято следующее соглашение, верное для всех методов:

  • Если errorCode = 0 значит операция выполнилась успешно и, в зависимости от метода, производный класс может содержать дополнительную информацию
  • Если вызов метода завершился ошибкой, то errorCode отлично от 0, и в поле errorDescription хранится описание ошибки, и, в зависимости от метода, производный класс может содержать дополнительную информацию

Далее по тексту :

  • Если не указано возвращаемое значение, значит метод возвращает базовый класс
  • Сигнальные методы указываются отдельно

3. Методы

3.1 Управление сессией

3.1.1 logon

Начало логической сессии работы с системой Если на текущий момент сессия уже была начата, то она закрывается и производится попытка начать новую сессию (которая может не увенчаться успехом)

Входные параметры:

  • userName — логин пользователя
  • password — пароль пользователя

3.1.2 logoff (сигнальный)

Вызов данного сигнального метода сообщает системе о прекращении работы с ней

3.1.3 getSessionState

Метод проверки текущего состояния сессии

Возвращаемые значения:

  • boolResult — состояние сессии
  • strResult — если состояние сессии активно, то возвращается имя пользователя, который начал сессию

3.2 Управление группами контактов

Пользователю доступно управление только публичными группами контактов.

3.2.1 addPhoneGroup

Добавление группы

Входные параметры:

  • name — название группы
  • code — код группы (данный код не требуется для работы по средствам SOAPпротокола, но может быть использован в других протоколах, например HTTP)

Возвращаемое значение:

  • intResult — идентификатор группы

3.2.2 removePhoneGroup

Удаление группы по её идентификатору

Входные параметры:

  • id — идентификатор группы

3.2.3 modifyPhoneGroup

Изменение настроек группы

Входные параметры:

  • id — идентификатор группы
  • newName — новое название группы, если параметр передан пустым, то данное поле меняться не будет
  • newCode — новый код группы, если параметр передан пустым, то данное поле меняться не будет

3.2.4 clearPhoneGroup

Удаляет всех контактов из группы. Не физическое удаление контактов, а удаление связи Контакт — Группа (все контакты, не входящие ни в одну группу, автоматически удаляются в течение дня)

Входные параметры:

  • id — идентификатор группы

Возвращаемое значение:

  • intResult — количество удаленных контактов

3.2.5 getPhoneGroupList

Получение списка групп контрагента

Возвращаемое значение:

  • listIntResult — список идентификаторов групп

3.2.6 getPhoneGroupInfo

Получение информации о группе по её идентификатору

Входные параметры:

  • id — идентификатор группы

Возвращаемые значения:

  • strResult — название группы
  • str2Result — код группы

3.3 Управление контактами

3.3.1 addPhone

Добавление контакта

Входные параметры:

  • phone — телефон
  • name — название контакта для отображения
  • desc — описание контакта
  • eMail — почтовый ящик
  • gender — пол (возможны варианты f либо m)
  • fName — имя
  • mName — отчество
  • lName — фамилия
  • position — занимаемая должность
  • iCQ — номер ICQ
  • custom1 — произвольное текстовое поле
  • custom2 — произвольное текстовое поле
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • groupId — список идентификаторов групп, в которые добавить контакт

Возвращаемое значение:

  • intResult — идентификатор контакта

Если список групп пустой, то контакт будет добавлен без вхождения в группы, но будет автоматически удален системой при следующей чистке.

3.3.2 modifyPhone

Изменения данных контакта

Входные параметры:

  • id — идентификатор телефона
  • phone — новый номер телефона, если пустое, то значение поля не меняется
  • name — новое название контакта для отображения, если пустое, то значение поля не меняется
  • desc — новое описание контакта, если пустое, то значение поля не меняется
  • eMail — новый почтовый ящик, если пустое, то значение поля не меняется
  • gender — новый пол (возможны варианты f либо m), если пустое, то значение поля не меняется
  • fName — новое имя, если пустое, то значение поля не меняется
  • mName — новое отчество, если пустое, то значение поля не меняется
  • lName — новое фамилия, если пустое, то значение поля не меняется
  • position — новая занимаемая должность, если пустое, то значение поля не меняется
  • iCQ — новый номер ICQ, если пустое, то значение поля не меняется
  • custom1 — новое значение произвольного текстового поля, если пустое, то значение поля не меняется
  • custom2 — новое значение произвольного текстового поля, если пустое, то значение поля не меняется
  • allowSince — новое время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399), если пустое, то значение поля не меняется
  • allowTill — новое время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399), если пустое, то значение поля не меняется

3.3.3 addPhoneToGroup

Добавление контакта в группу

Входные параметры:

  • phoneId — идентификатор контакта
  • groupId — идентификатор группы

3.3.4 removePhoneFromGroup

Удаление контакта из группы

Входные параметры:

  • phoneId — идентификатор контакта
  • groupId — идентификатор группы

3.3.5 getPhoneListInGroup

Получение списка контактов в группе

Входные параметры:

  • id — идентификатор группы

Возвращаемое значение:

  • listIntResult — список идентификаторов контактов

3.3.6 getGroupListByPhoneId

Получение списка групп, в которые входит контакт

Входные параметры:

  • id — идентификатор контакта

Возвращаемое значение:

  • listIntResult — список идентификаторов групп

3.3.7 searchPhone

Поиск по контактам (по части вхождения в телефоне, или имени, или фамилии, или отчестве, или названии)

Входные параметры:

  • searchString — часть строки для поиска (не допускается пустое, при поиске обрезается до 32 символов)

Возвращаемое значение:

  • listIntResult — список идентификаторов контактов

3.3.8 getPhoneInfo

Получение информации о контакте

Входные параметры:

  • id — идентификатор контакта

Возвращаемое значение:

  • phone — телефон
  • name — название контакта для отображения
  • desc — описание контакта
  • eMail — почтовый ящик
  • gender — пол (возможны варианты f либо m)
  • fName — имя
  • mName — отчество
  • lName — фамилия
  • position — занимаемая должность
  • iCQ — номер ICQ
  • custom1 — произвольное текстовое поле
  • custom2 — произвольное текстовое поле
  • allowSince — время раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)

3.3.9 setBirthdayToPhone

Установка дня рождения контакта либо обновление ранее установленной даты

Входные параметры:

  • id — идентификатор контакта
  • specialDate — дата дня рождения

3.3.10 removeBirthdayFromPhone

Удаление дня рождения контакта

Входные параметры:

  • id — идентификатор контакта

3.3.11 getPhoneBirthday

Получение дня рождения контакта

Входные параметры:

  • id — идентификатор контакта

Возвращаемое значение:

  • dTResult — дата рождения контакта

3.4 Информация по счетам

3.4.1 getAccountList

Получение списка счетов контрагента

Возвращаемое значение:

  • listIntResult — список типов счетов контрагента

3.4.2 getAccountInfo

Получение информации о счете по его типу

Входные параметры:

  • id — идентификатор группы

Возвращаемые значения:

  • name — название
  • actualBalance — фактический остаток
  • overDraft — размер овердрафта
  • active — признак активности
  • suspended — признак замороженности счета

3.5 Простая отправка сообщений

3.5.1 sendSimpleSms

Простая отправка SMS сообщения

Входные параметры:

  • sender — имя отправителя
  • phone — номер получателя
  • text — текст (без возможности использовать подстановки)
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента

Возвращаемое значение:

  • strResult — идентификатор сообщения

3.5.2 sendSimpleFlashSms

Простая отправка flash SMS сообщения

Входные параметры:

  • sender — имя отправителя
  • phone — номер получателя
  • text — текст (без возможности использовать подстановки)
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента

Возвращаемое значение:

  • strResult — идентификатор сообщения

3.5.3 sendSimpleWapPushSms

Простая отправка WAP push SMS сообщения

Входные параметры:

  • sender — имя отправителя
  • phone — номер получателя
  • text — текст (без возможности использовать подстановки)
  • uRL — url
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента
  • expiredTime — время истечения действия ссылки

Возвращаемое значение:

  • strResult — идентификатор сообщения

3.6 Отправка сообщений контакту

3.6.1 sendSms

Отправка SMS сообщения контакту

Входные параметры:

  • id — идентификатор получателя
  • sender — имя отправителя
  • text — текст (с возможностью использования подстановок)
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента

Возвращаемое значение:

  • strResult — идентификатор сообщения

3.6.2 sendFlashSms

Отправка flash SMS сообщения контакту

Входные параметры:

  • id — номер получателя
  • sender — имя отправителя
  • text — текст (с возможностью использования подстановок)
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента

Возвращаемое значение:

  • strResult — идентификатор сообщения

3.6.3 sendWapPushSms

Отправка WAP push сообщения контакту

Входные параметры:

  • id — номер получателя
  • sender — имя отправителя
  • text — текст (с возможностью использования подстановок)
  • uRL — url
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента
  • expiredTime — время истечения действия ссылки

Возвращаемое значение:

  • strResult — идентификатор сообщения

3.7 Отправка сообщений группе

3.7.1 sendSmsToGroup

Отправка СМС сообщения группе

Входные параметры:

  • id — идентификатор группы
  • sender — имя отправителя
  • text — текст (с возможностью использования подстановок)
  • gender — пол получателя для фильтрации контактов в группе, если пол не указан, то сообщение отправляется всей группе
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента

Возвращаемое значение:

  • id — идентификатор группы рассылки
  • sentCount — количество контактов, которым было отправлено сообщение
  • notSentCount — количество контактов, которым НЕ было отправлено сообщение

INFO Если группа содержит более 1000 контактов, вызов метода вернет ошибку, и сообщения отправлены не будут.

3.7.2 sendFlashSmsToGroup

Отправка flash СМС сообщения группе

Входные параметры:

  • id — идентификатор группы
  • sender — имя отправителя
  • text — текст (с возможностью использования подстановок)
  • gender — пол получателя для фильтрации контактов в группе, если пол не указан, то сообщение отправляется всей группе
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента

Возвращаемое значение:

  • id — идентификатор группы рассылки
  • sentCount — количество контактов, которым было отправлено сообщение
  • notSentCount — количество контактов, которым НЕ было отправлено сообщение

INFO Если группа содержит более 1000 контактов, вызов метода вернет ошибку, и сообщения отправлены не будут

3.7.3 sendWapPushSmsToGroup

Отправка WAP push сообщения группе

Входные параметры:

  • id — идентификатор группы
  • sender — имя отправителя
  • text — текст (с возможностью использования подстановок)
  • gender — пол получателя для фильтрации контактов в группе, если пол не указан, то отправляется всей группе
  • uRL — url
  • allowSince — время, раньше которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • allowTill — время, после которого нельзя посылать сообщения (в секундах от начала дня — значения между 0 и 86399)
  • usePhoneTime — признак, указывающий, что ограничение по времени определяется по времени абонента
  • expiredTime — время истечения действия ссылки

Возвращаемое значение:

  • id — идентификатор группы рассылки
  • sentCount — количество контактов, которым было отправлено сообщение
  • notSentCount — количество контактов, которым НЕ было отправлено сообщение

INFO Если группа содержит более 1000 контактов, вызов метода вернет ошибку, и сообщения отправлены не будут.

3.8 Получение статусов отправленных сообщений

3.8.1 getSingleStatus

Запрос статуса одиночного сообщения

Входные параметры:

  • id — идентификатор сообщения

Возвращаемое значение:

  • status — состояние сообщения
  • count — количество частей сообщений для тарификации
  • closeTime — время получения финального статуса (время может быть возращено в формате UTC)

Статусы могут быть следующие:

SMS_STATUS_SCHEDULED = 0 — сообщение в очереди отправки
SMS_STATUS_ENROUTE = 1 — сообщение передано оператору
SMS_STATUS_DELIVERED = 2 — сообщение доставлено абоненту (финальный статус)
SMS_STATUS_EXPIRED = 3 — сообщение было передано оператору, но не доставлено абоненту в отведенный период времени (финальный статус)
SMS_STATUS_DELETED = 4 — сообщение удалено (финальный статус)
SMS_STATUS_UNDELIVERABLE = 5 — сообщение не доставлено (финальный статус)
SMS_STATUS_ACCEPTED = 6 — сообщение принято
SMS_STATUS_UNKNOWN = 7 — состояние сообщения не известно (финальный статус)
SMS_STATUS_REJECTED = 8 — сообщение отклонено оператором (финальный статус)
SMS_STATUS_ABORTED = 20 — сообщение отменено (финальный статус)
SMS_STATUS_ERROR = 21 — сообщение не было отправлено из-за ошибки (финальный статус)
SMS_STATUS_TIMEOUT = 22 — сообщение не было передано оператору, и истек период отправки данного сообщения (финальный статус)

3.8.2 getGroupStatus

Запрос статуса сообщений по идентификатору группы рассылки

Входные параметры:

  • id — идентификатор рассылки по группе (не путать с идентификатором группы)

Возвращаемое значение:

  • list — список статусов, который содержит следующие поля:
    • id — идентификатор сообщения
    • status — статус сообщения
    • count — количество частей в сообщение
    • closeTime — время закрытия сообщения (время может быть возращено в формате UTC)

Статусы могут быть следующие:

SMS_STATUS_SCHEDULED = 0 — сообщение в очереди отправки
SMS_STATUS_ENROUTE = 1 — сообщение передано оператору
SMS_STATUS_DELIVERED = 2 — сообщение доставлено абоненту (финальный статус)
SMS_STATUS_EXPIRED = 3 — сообщение было передано оператору, но не доставлено абоненту в отведенный период времени (финальный статус)
SMS_STATUS_DELETED = 4 — сообщение удалено (финальный статус)
SMS_STATUS_UNDELIVERABLE = 5 — сообщение не доставлено (финальный статус)
SMS_STATUS_ACCEPTED = 6 — сообщение принято
SMS_STATUS_UNKNOWN = 7 — состояние сообщения не известно (финальный статус)
SMS_STATUS_REJECTED = 8 — сообщение отклонено оператором (финальный статус)
SMS_STATUS_ABORTED = 20 — сообщение отменено (финальный статус)
SMS_STATUS_ERROR = 21 — сообщение не было отправлено из-за ошибки (финальный статус)
SMS_STATUS_TIMEOUT = 22 — сообщение не было передано оператору, и истек период отправки данного сообщения (финальный статус)

3.9 Входящие сообщения

3.9.1 getInboxList

Получение списка идентификаторов входящих ящиков

Возвращаемое значение:

  • listIntResult — список идентификаторов входящих ящиков

3.9.2 getInboxInfo

Получение информации по входящему ящику

Входные параметры:

  • id — идентификатор ящика

Возвращаемое значение:

  • number — входящий номер
  • prefix — результирующий префикс
  • active — состояние активности
  • desc — описание
  • confirmed — состояние подтверждения

3.9.3 getInSms

Получение списка входящих сообщений

Входные параметры:

  • text — фильтр текста (будут выведены только сообщения, содержащие данный текст) (может быть пустым, если пусто, то сообщения не фильтруются по данному признаку)
  • status — фильтр статуса (может быть пустым, если пусто, то сообщения не фильтруются по данному признаку)
  • since — нижняя граница периода (может быть пустым, если пусто, то сообщения не фильтруются по данному признаку)
  • till — верхняя граница периода (может быть пустым, если пусто, то сообщения не фильтруются по данному признаку)
  • id — идентификатор ящика (список идентификаторов можно получить с помощью функции getInboxList)

Возвращаемое значение:

  • list — список входящих сообщений, которые содержат следующие поля:
    • id — идентификатор сообщения
    • status — статус
    • sender — номер отправителя
    • target — номер получателя
    • text — текст сообщения
    • created — дата поступления сообщения

Статусы сообщений:

N — New — новый, автоматически после получения помечается на R
R — Read — прочитанный
A — Reply — на это сообщение ответили через WEB интерфейс
F — Forward — данное сообщение было переправлено по протоколу пользователю
M — Forward and Reply — на данное сообщение ответили WEB интерфейс, и также оно было переправлено по протоколу пользователю

4. Пример использования

4.1 C#

Для начала необходимо из WSDL, расположенном на сервере, получить все классы для работы, для этого необходимо воспользоваться утилитой wsdl, входящей в состав Microsoft SDKs:

″C:\Program Files\Microsoft SDKs\Windows\v7.0\Bin\wsdl″ /l:cs /protocol:SOAP /out:″C:\SOAPTelAccess.cs″ http://soap.qtelecom.ru/public/soap/index.php?wsdl

— создается файл, который содержит основной класс TelAccess, предоставляющий все выше описанные методы, и дополнительные вспомогательные классы, необходимые для работы. Работа по данному протоколу разделена на два уровня — физическая и логическая сессия, обеспечением физической сессии занимаются системные компоненты. Для поддержания единой физической сессии первым делом необходимо создание cookie:

CookieContainer cookie = new CookieContainer();

— данный cookie неообходимо будет указывать для всех объектов класс TelAccess:

TelAccess soapclient = new TelAccess(); soapclient.CookieContainer = cookie;

— если не использовать cookie, сервер будет считать для разных объектов класса TelAccess различные физические сессии Начало логической сессии происходит посредством авторизация методом logon:

InputLogon Param = new InputLogon(); Param.userName = ″10234.3″; Param.password = ″123″; ReturnValueBase rv = soapclient.logon(Param);

— если авторизация прошла успешно, то в rv.errorCode возвращается 0, в противном случае код ошибки, а в rv.errorDescription текстовое описание ошибки. Если в течение 1 минуты не было вызвано ни одного метода, логическая сессия будет закрыта автоматически. Также логическую сессию можно закрыть сигнальным методом logoff. Узнать состояние логической сессии можно, вызвав метод getSessionState

ReturnValueBooleanString rv = TA.getSessionState().@return;

— если метод выполнился успешно, то логическая переменная rv.boolResult говорит о том, активна ли сейчас логическая сессия, а rv.strResult о том, какой пользователь инициировал данную логическую сессию.

INFO При первом вызове любого метода происходит инициализация всех необходимых объектов и компонентов в C#, это может занять до 10-15 секунд, дальнейшие вызовы методов происходят без задержек.

Пример 1

Отправка простого сообщения:

 CookieContainer cookie = new CookieContainer();
            TelAccess soapclient = new TelAccess();
 
            soapclient.CookieContainer = cookie;
 
            // Init session
            InputLogon Param1 = new InputLogon();
            Param1.userName = "11234.5" ;
            Param1.password = "123" ;
            ReturnValueBase rv1 = soapclient.logon(Param1);
 
            if (rv1.errorCode != 0)
                throw new Exception(rv1.errorDescription);
 
            // Send simple sms
            InputSendSimpleSms Param2 = new InputSendSimpleSms();
            Param2.sender = "test-sms" ;
            Param2.phone = "79876543210" ;
            Param2.text = "Тестовое сообщение" ;
            Param2.allowSince = 3600;
            Param2.allowSinceSpecified = true;
            Param2.allowTill = 72000;
            Param2.allowTillSpecified = true;
            Param2.usePhoneTime = checkBoxUsePhoneTime.Checked;
            Param2.usePhoneTimeSpecified = true;
 
            ReturnValueString rv2 = soapclient.sendSimpleSms(Param2);
            if (rv2.errorCode != 0)
                throw new Exception(rv2.errorDescription);
            else
                MessageBox.Show("Message id: "  + rv2.strResult);
 
            // Close session
            soapclient.logoff();

Пример 2

Добавление группы:

CookieContainer cookie = new CookieContainer();
            TelAccess soapclient = new TelAccess();
 
            soapclient.CookieContainer = cookie;
 
            // Logon
            InputLogon Param1 = new InputLogon();
            PParam1.userName = "11234.5";
            Param1.password = "123";
            ReturnValueBase rv1 = soapclient.logon(Param1);
 
            if (rv1.errorCode != 0)
                throw new Exception(rv1.errorDescription);
 
            // Add phone group
            InputAddPhoneGroup Param2 = new InputAddPhoneGroup();
            Param2.name = "Test group";
 
            ReturnValueInt rv2 = soapclient.addPhoneGroup(Param2);
            if (rv2.errorCode != 0)
                throw new Exception(rv2.errorDescription);
            else
                MessageBox.Show("Group id: " + rv2.intResult);

Пример 3

Добавление контакта (опционально помещение данного контакта в 4 некоторые группы контактов):

CookieContainer cookie = new CookieContainer();
            TelAccess soapclient = new TelAccess();
 
            soapclient.CookieContainer = cookie;
 
            // Logon
            InputLogon Param1 = new InputLogon();
            PParam1.userName = "11234.5";
            Param1.password = "123";
            ReturnValueBase rv1 = soapclient.logon(Param1);
 
            if (rv1.errorCode != 0)
                throw new Exception(rv1.errorDescription);
 
            // Add phone group
            InputAddPhoneGroup Param2 = new InputAddPhoneGroup();
            Param2.name = "Test group";
 
            ReturnValueInt rv2 = soapclient.addPhoneGroup(Param2);
            if (rv2.errorCode != 0)
                throw new Exception(rv2.errorDescription);
            else
                MessageBox.Show("Group id: " + rv2.intResult);

4.2 PHP

Для работы по протоколу SOAP в PHP необходимо подключить модуль php_soap в php.ini

Для Windows надо добавить следующие строчки в php.ini [PHP_SOAP] extension=php_soap.dll

Для Linux надо добавить следующие строчки в php.ini [PHP_SOAP] extension=soap.so

Пример 1

Отправка простого сообщения:

<?php
$objClient = new SoapClient("http://soap.qtelecom.ru/public/soap/", array('trace' => true)); 
 
$params = array('param' => array('userName' => "XXXXX.X", 'password' => "your_password"));
$objData =  $objClient->logon($params);
if ($objData->return->errorCode == 0)
{
	$params = array('param' => array('sender' => "test-sms", 'phone' => "79991234567", 'text' => "SOAP test"));
	$objData =  $objClient->sendSimpleSms($params);
	print "Message send. ID ".$objData->return->strResult;
	$objClient->logoff();
}
else
{
	echo "Error: ".$objData->return->errorDescription;
}
?>

4.3 Java (axis2)

Для создания всех необходимых классов можно воспользоваться утилитой, входящей в состав axis2

wsdl2java -uri http://soap.qtelecom.ru/public/soap/index.php

Пример 1

Отправка простого сообщения:

package SoapClient;
 
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import telecom.srv.sms.*;
import telecom.srv.sms.TelAccessStub.*;
 
public class Test
{
	public static void main(String args[])  
	{
		try 
		{
			TelAccessStub soalclient = new TelAccessStub();
 
			Options options = soalclient._getServiceClient().getOptions();
			options.setManageSession(true);
			soalclient._getServiceClient().setOptions(options);
 
			InputLogon inparam1 = new InputLogon();
			inparam1.setUserName("11234.5");
			inparam1.setPassword("123");
			Logon param1 = new Logon();
			param1.setParam(inparam1);
 
			ReturnValueBase rv1 = soalclient.logon(param1).get_return();
			if (rv1.getErrorCode() != 0)
				throw new Exception(rv1.getErrorDescription());
 
			InputSendSimpleSms inparam2 = new InputSendSimpleSms();
			inparam2.setSender("Test");
			inparam2.setPhone("79876543210");
			inparam2.setText("Java test message");
 
			SendSimpleSms param2 = new SendSimpleSms();
			param2.setParam(inparam2);
 
			ReturnValueString rv2 = soalclient.sendSimpleSms(param2).get_return();
			if (rv2.getErrorCode() != 0)
				throw new Exception(rv2.getErrorDescription());
 
			System.out.println("Message id:" + rv2.getStrResult());
 
			soalclient.logoff();
		} 
		catch (AxisFault e) 
		{
			e.printStackTrace();
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
}

Пример 2

Добавление группы:

package SoapClient;
 
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import telecom.srv.sms.*;
import telecom.srv.sms.TelAccessStub.*;
 
public class Test
{
	public static void main(String args[])  
	{
		try 
		{
			TelAccessStub soalclient = new TelAccessStub();
 
			Options options = soalclient._getServiceClient().getOptions();
			options.setManageSession(true);
			soalclient._getServiceClient().setOptions(options);
 
			InputLogon inparam1 = new InputLogon();
			inparam1.setUserName("11234.5");
			inparam1.setPassword("123");
			Logon param1 = new Logon();
			param1.setParam(inparam1);
 
			ReturnValueBase rv1 = soalclient.logon(param1).get_return();
			if (rv1.getErrorCode() != 0)
				throw new Exception(rv1.getErrorDescription());
 
			InputAddPhoneGroup inparam2 = new InputAddPhoneGroup();
			inparam2.setName("Java test group");
			AddPhoneGroup param2 = new AddPhoneGroup();
			param2.setParam(inparam2);
 
			ReturnValueInt rv2 = soalclient.addPhoneGroup(param2).get_return();
 
			if (rv2.getErrorCode() != 0)
				throw new Exception(rv2.getErrorDescription());
 
			System.out.println("Group id:" + rv2.getIntResult());
 
			soalclient.logoff();
		} 
		catch (AxisFault e) 
		{
			e.printStackTrace();
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
}

Пример 3

Добавление контакта (опционально помещение данного контакта в 4 некоторые группы контактов):

package SoapClient;
 
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import org.apache.axis2.client.Options;
import telecom.srv.sms.*;
import telecom.srv.sms.TelAccessStub.*;
 
public class Test
{
	public static void main(String args[])  
	{
		try 
		{
			TelAccessStub soalclient = new TelAccessStub();
 
			Options options = soalclient._getServiceClient().getOptions();
			options.setManageSession(true);
			soalclient._getServiceClient().setOptions(options);
 
			InputLogon inparam1 = new InputLogon();
			inparam1.setUserName("11234.5");
			inparam1.setPassword("123");
			Logon param1 = new Logon();
			param1.setParam(inparam1);
 
			ReturnValueBase rv1 = soalclient.logon(param1).get_return();
			if (rv1.getErrorCode() != 0)
				throw new Exception(rv1.getErrorDescription());
 
			InputAddPhone inparam2 = new InputAddPhone();
			inparam2.setPhone("79876543210");
			inparam2.setFname("Test");
			inparam2.setLname("Testov");
			inparam2.setCustom1("Тестовый клиент");
			inparam2.setIcq("111222333");
			int [] groupid = new int[2];
			groupid[0] = 2770;
			groupid[1] = 2771;
			inparam2.setGroupId(groupid);
 
			AddPhone param2 = new AddPhone();
			param2.setParam(inparam2);
 
			ReturnValueInt rv2 = soalclient.addPhone(param2).get_return();
 
			if (rv2.getErrorCode() != 0)
				throw new Exception(rv2.getErrorDescription());
 
			System.out.println("Phone id:" + rv2.getIntResult());
 
			soalclient.logoff();
		} 
		catch (AxisFault e) 
		{
			e.printStackTrace();
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
}