API для отправки SMS сообщений

В данном форуме описаны все API, поддерживаемые нашими услугами.

Re: API для отправки SMS сообщений

Сообщение malec » 17 дек 2012, 19:11

Если первый символ в сообщение ПРОБЕЛ система возвращает код 200
в статистике данное сообщение не отображается как и не приходит

Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<result>
<id>1778089</id>
<uid>acda09db-9b15-4646-bbb7-cc4f35927833</uid>
<count>1</count>
<code>200</code>
<desc>OK</desc>
</result>


Деньги не снимают, вроде как.

текст сообщения из 2х символов: (пробел и восклицательный знак)

URL:
Код: Выделить всё
http://api.comtube.ru/scripts/api/sms.php?action=send&message=+%21&number=79055068007&type=xml&username=malec&signature=b820b0c7aca59e6a588904074469b3fd

P.S. Если первый символ не пробел то проблем не возникает
P.S.2 Сообщение есть, но висит в исходящих, это так пробел на него действует?
Изображение
Аватара пользователя
malec
 
Сообщения: 47
Зарегистрирован: 17 янв 2012, 18:19

Re: API для отправки SMS сообщений

Сообщение sd » 17 дек 2012, 19:41

Интересный вопрос. Попробую воспроизвести. Если баг подтвердиться, то исправлю.
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение malec » 21 дек 2012, 11:00

Есть загвоздка, не знаю в чем проблема, но в подписи (senderid) нижнее подчеркивание определяется (уже в телефоне) как символ §
Хотя с таким же методом перевода текста в escape все нормально работает.
Вот URL
Код: Выделить всё
http://api.comtube.ru/scripts/api/sms.php?action=send&message=test_masage&number=79037903698&senderid=Best_System&type=xml&username=malec&signature=4035467e9041b367bb6d5ddcfef10000


если отправлять с сайта то все нормально
Последний раз редактировалось malec 21 дек 2012, 11:20, всего редактировалось 1 раз.
Изображение
Аватара пользователя
malec
 
Сообщения: 47
Зарегистрирован: 17 янв 2012, 18:19

Re: API для отправки SMS сообщений

Сообщение sd » 21 дек 2012, 11:16

Так ведь для значения любого параметра надо делать urlencode. Вероятно, причина в этом.

P.S. Кстати, никогда на форум не выкладывайте весь урл целиком. Убирайте или искажайте подпись. А то найдутся те, кто этой ссылкой обнулит ваш баланс.
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение malec » 21 дек 2012, 11:25

sd писал(а):Так ведь для значения любого параметра надо делать urlencode. Вероятно, причина в этом.

P.S. Кстати, никогда на форум не выкладывайте весь урл целиком. Убирайте или искажайте подпись. А то найдутся те, кто этой ссылкой обнулит ваш баланс.


А разве у символа "_" есть URL cod ну типа "%5F"?
Изображение
Аватара пользователя
malec
 
Сообщения: 47
Зарегистрирован: 17 янв 2012, 18:19

Re: API для отправки SMS сообщений

Сообщение sd » 21 дек 2012, 11:29

malec писал(а):
sd писал(а):Так ведь для значения любого параметра надо делать urlencode. Вероятно, причина в этом.

P.S. Кстати, никогда на форум не выкладывайте весь урл целиком. Убирайте или искажайте подпись. А то найдутся те, кто этой ссылкой обнулит ваш баланс.


А разве у символа "_" есть URL cod ну типа "%5F"?

Вот совсем точно сказать не могу, но почти уверен, что да.
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение donexpress_premium » 29 дек 2012, 13:38

Пример кода для отправки SMS vb.NET (включая формирование сигнатуры):
Код: Выделить всё
Public Module SMS
    Private c_login As String = "DEMOLOGIN"
    Private c_password As String = "demoPASS"

    Public Function SendSMS(from As String, tonum As String, message As String) As Boolean
        Dim wc As New Net.WebClient

        Dim v As New Specialized.NameValueCollection
        With v
            .Add("action", "send")
            .Add("message", message)
            .Add("number", tonum)
            .Add("senderid", from)
            .Add("username", c_login)
        End With

        Dim url As String = "http://api.comtube.ru/scripts/api/sms.php?"
        Dim params As String = GetParams(v, True)
        Dim sign As String = Signature(params, c_password)

        url &= params & "signature=" & sign
        Dim res As String = wc.DownloadString(url)
    End Function

#Region "Сервисные функции"
    Private Function GetParams(pcollection As Specialized.NameValueCollection, encoded As Boolean) As String
        Dim res As String = ""

        Dim keys() As String = pcollection.AllKeys
        Array.Sort(keys)

        For Each i As String In keys
            res &= i & "=" & urlencode(pcollection(i)) & "&"
        Next

        Return res
    End Function

    Private Function urlencode(str As String) As String
        Dim p() As String = Split(Web.HttpUtility.UrlEncode(str), "%")
        Dim res As String = p(0)
       
        For X As Integer = 1 To p.Length - 1
            res &= "%" & Mid(p(X), 1, 2).ToUpper & Mid(p(X), 3)
        Next

        Return res
    End Function

    Private Function ToHex(d() As Byte) As String
        Dim res As String = ""
        For Each i As Byte In d
            res &= Hex(i).PadLeft(2, "0")
        Next
        Return res.ToLower
    End Function

    Private Function Signature(urlparams As String, password As String) As String
        Dim md5() As Byte = System.Security.Cryptography.MD5.Create.ComputeHash(System.Text.Encoding.Default.GetBytes(urlparams & "&password=" & urlencode(password)))
        Return ToHex(md5)
    End Function
#End Region

End Module


Код должен работать в пустом проекте, дополнительные ссылки (imports): System.Web.
Обращаю ваше внимание на то что Web.HttpUtility.UrlEncode и Uri.EscapeDataString это не одно и тоже использовать надо именно 1ый вариант. Так же у чистого Web.HttpUtility.UrlEncode есть проблема - hex коды в нижнем регистре а у PHP в верхнем. соответсвенно приходится вставлять костыль :).
Последний раз редактировалось donexpress_premium 29 дек 2012, 14:44, всего редактировалось 2 раз(а).
donexpress_premium
 
Сообщения: 69
Зарегистрирован: 15 июл 2011, 16:06

Re: API для отправки SMS сообщений

Сообщение donexpress_premium » 29 дек 2012, 13:43

Уважаемый COMTUBE

Прошу рассмотреть более щадящий вариант подстановки номера отправителя в обновленном API. В старом API можно самому писать все кроме номера. Понимаю, что вопрос мошенничества нельзя снимать с повестки, но доступ после предоставления документов, соглашений, для постоянных/публичных клиентов и т.д. предоставить все-таки можно. У нас есть рассылки тематические для наших сотрудников делать запрос по каждой теме вам - дело нудное и тоскливое, особенно когда в старом API все УЖЕ и так работет.

Надеюсь на понимание. Спасибо!
donexpress_premium
 
Сообщения: 69
Зарегистрирован: 15 июл 2011, 16:06

Re: API для отправки SMS сообщений

Сообщение sd » 29 дек 2012, 13:51

donexpress_premium писал(а):Уважаемый COMTUBE

Прошу рассмотреть более щадящий вариант подстановки номера отправителя в обновленном API. В старом API можно самому писать все кроме номера. Понимаю, что вопрос мошенничества нельзя снимать с повестки, но доступ после предоставления документов, соглашений, для постоянных/публичных клиентов и т.д. предоставить все-таки можно. У нас есть рассылки тематические для наших сотрудников делать запрос по каждой теме вам - дело нудное и тоскливое, особенно когда в старом API все УЖЕ и так работет.

Надеюсь на понимание. Спасибо!

Да, мы думаем об этом. В принципе, у нас уже есть способ снимать ограничения по SenderID для избранных пользователей. Я вас сейчас добавил в список доверенных клиентов. Так что можете попробовать установить произвольный SenderID. Обращаю, однако, ваше внимание, что при поступлении жалоб я эту возможность отключу.

Также хочу сказать, что старое API после нового года перестанет работать. Ну и возможности установить произвольный номер не будет.
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

Re: API для отправки SMS сообщений

Сообщение donexpress_premium » 29 дек 2012, 14:00

Супер! Спасибо, все работает. Мы не занимаемся рекламными рассылками, тем более - фишинговыми.
Кстати как идея - создайте blacklist отправителей, т.е. имена отправителей - которые являются потенциально склонные к злоупотреблениям: 900 (сбербанк), sberbank и т.д. соответственно, которые нельзя установить никому кроме настоящих представителей. Так же чтобы один ваш клиент не мог представится другим... это уж как "прожиточный минимум".
donexpress_premium
 
Сообщения: 69
Зарегистрирован: 15 июл 2011, 16:06

Пред.След.

Вернуться в API

Просмотр страницы «Кто сейчас на форуме COMTUBE»

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28