WSDL (любой из ниже перечисленных)
Для межъязыковой совместимости все наборы входных параметров обернуты классами. Далее по тексту:
Методы делятся на два типа :
Базовый класс для всех возвращаемых данных содержит:
errorCode — целое знаковое число errorDescription — строка описания
Принято следующее соглашение, верное для всех методов:
Далее по тексту :
Начало логической сессии работы с системой Если на текущий момент сессия уже была начата, то она закрывается и производится попытка начать новую сессию (которая может не увенчаться успехом)
Входные параметры:
Вызов данного сигнального метода сообщает системе о прекращении работы с ней
Метод проверки текущего состояния сессии
Возвращаемые значения:
Пользователю доступно управление только публичными группами контактов.
3.2.1 addPhoneGroup
Добавление группы
Входные параметры:
Возвращаемое значение:
3.2.2 removePhoneGroup
Удаление группы по её идентификатору
Входные параметры:
3.2.3 modifyPhoneGroup
Изменение настроек группы
Входные параметры:
3.2.4 clearPhoneGroup
Удаляет всех контактов из группы. Не физическое удаление контактов, а удаление связи Контакт — Группа (все контакты, не входящие ни в одну группу, автоматически удаляются в течение дня)
Входные параметры:
Возвращаемое значение:
3.2.5 getPhoneGroupList
Получение списка групп контрагента
Возвращаемое значение:
3.2.6 getPhoneGroupInfo
Получение информации о группе по её идентификатору
Входные параметры:
Возвращаемые значения:
3.3.1 addPhone
Добавление контакта
Входные параметры:
Возвращаемое значение:
Если список групп пустой, то контакт будет добавлен без вхождения в группы, но будет автоматически удален системой при следующей чистке.
3.3.2 modifyPhone
Изменения данных контакта
Входные параметры:
3.3.3 addPhoneToGroup
Добавление контакта в группу
Входные параметры:
3.3.4 removePhoneFromGroup
Удаление контакта из группы
Входные параметры:
3.3.5 getPhoneListInGroup
Получение списка контактов в группе
Входные параметры:
Возвращаемое значение:
3.3.6 getGroupListByPhoneId
Получение списка групп, в которые входит контакт
Входные параметры:
Возвращаемое значение:
3.3.7 searchPhone
Поиск по контактам (по части вхождения в телефоне, или имени, или фамилии, или отчестве, или названии)
Входные параметры:
Возвращаемое значение:
3.3.8 getPhoneInfo
Получение информации о контакте
Входные параметры:
Возвращаемое значение:
3.3.9 setBirthdayToPhone
Установка дня рождения контакта либо обновление ранее установленной даты
Входные параметры:
3.3.10 removeBirthdayFromPhone
Удаление дня рождения контакта
Входные параметры:
3.3.11 getPhoneBirthday
Получение дня рождения контакта
Входные параметры:
Возвращаемое значение:
3.4.1 getAccountList
Получение списка счетов контрагента
Возвращаемое значение:
3.4.2 getAccountInfo
Получение информации о счете по его типу
Входные параметры:
Возвращаемые значения:
3.5.1 sendSimpleSms
Простая отправка SMS сообщения
Входные параметры:
Возвращаемое значение:
3.5.2 sendSimpleFlashSms
Простая отправка flash SMS сообщения
Входные параметры:
Возвращаемое значение:
3.5.3 sendSimpleWapPushSms
Простая отправка WAP push SMS сообщения
Входные параметры:
Возвращаемое значение:
3.6.1 sendSms
Отправка SMS сообщения контакту
Входные параметры:
Возвращаемое значение:
3.6.2 sendFlashSms
Отправка flash SMS сообщения контакту
Входные параметры:
Возвращаемое значение:
3.6.3 sendWapPushSms
Отправка WAP push сообщения контакту
Входные параметры:
Возвращаемое значение:
3.7.1 sendSmsToGroup
Отправка СМС сообщения группе
Входные параметры:
Возвращаемое значение:
INFO Если группа содержит более 1000 контактов, вызов метода вернет ошибку, и сообщения отправлены не будут.
3.7.2 sendFlashSmsToGroup
Отправка flash СМС сообщения группе
Входные параметры:
Возвращаемое значение:
INFO Если группа содержит более 1000 контактов, вызов метода вернет ошибку, и сообщения отправлены не будут
3.7.3 sendWapPushSmsToGroup
Отправка WAP push сообщения группе
Входные параметры:
Возвращаемое значение:
INFO Если группа содержит более 1000 контактов, вызов метода вернет ошибку, и сообщения отправлены не будут.
3.8.1 getSingleStatus
Запрос статуса одиночного сообщения
Входные параметры:
Возвращаемое значение:
Статусы могут быть следующие:
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
Запрос статуса сообщений по идентификатору группы рассылки
Входные параметры:
Возвращаемое значение:
Статусы могут быть следующие:
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.1 getInboxList
Получение списка идентификаторов входящих ящиков
Возвращаемое значение:
3.9.2 getInboxInfo
Получение информации по входящему ящику
Входные параметры:
Возвращаемое значение:
3.9.3 getInSms
Получение списка входящих сообщений
Входные параметры:
Возвращаемое значение:
Статусы сообщений:
N — New — новый, автоматически после получения помечается на R
R — Read — прочитанный
A — Reply — на это сообщение ответили через WEB интерфейс
F — Forward — данное сообщение было переправлено по протоколу пользователю
M — Forward and Reply — на данное сообщение ответили WEB интерфейс, и также оно было переправлено по протоколу пользователю
Для начала необходимо из 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);
Для работы по протоколу 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; } ?>
Для создания всех необходимых классов можно воспользоваться утилитой, входящей в состав 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(); } } }