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

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

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

Сообщение solowap » 17 апр 2013, 16:26

Ничего не понимаю. Почему обязательно должны быть деньги на счету? минимальная сумма к оплате - 300руб, но я хочу использовать услугу API, а написанно что она бесплатна. Зачем тогда мне деньги? Ладно там 50 руб, но это 300руб, не мало все-таки, посути впустую.
ПС тот скрипт, если заменить номер на намбер, выдает такое:
id;uid;count
2489844;87e5a4a8-9a91-4ac7-90c9-7c9a8b3d6c9b;1

ЧТо это? Так понимаю писать будет такое, если денег нет))
solowap
 
Сообщения: 11
Зарегистрирован: 16 апр 2013, 18:00

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

Сообщение solowap » 17 апр 2013, 16:41

Я так понял, это означает, что отправка прошла, но на телефон ничего не пришло. Номер надо без + верно?
solowap
 
Сообщения: 11
Зарегистрирован: 16 апр 2013, 18:00

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

Сообщение solowap » 17 апр 2013, 17:03

А, все. Понял. Спасибо за помощь. Цена одного смс - 0.12$ ?
solowap
 
Сообщения: 11
Зарегистрирован: 16 апр 2013, 18:00

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

Сообщение sd » 17 апр 2013, 18:37

solowap писал(а):А, все. Понял. Спасибо за помощь. Цена одного смс - 0.12$ ?

Цена разная в зависимости от направления. Если скажете номер, на который вы отправляете смс я скажу, правильная ли стоимость. Так же, если отправляете длинную смс, то она разбивается на части и тарифицируется каждая часть отдельно. Посомтреть как происходит разбивка можно здесь - "Список форумов ‹ Информационный раздел ‹ Техническая поддержка ‹ Тарификация предоставляемых услуг
Аватара пользователя
sd
 
Сообщения: 5184
Зарегистрирован: 31 июл 2009, 13:11

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

Сообщение BubnovRV » 18 апр 2013, 06:33

Даже если у вас смс-пакет, то денег на счету должно быть достаточно для отправки хотя бы рублей 10.

А это для чего? Мне кажется это неправильно, допустим я купил пакеты СМС и специально оставил на счету 0, чтобы предотвратить несанкционированное использование других услуг, а Comtube этому противится?
BubnovRV
 
Сообщения: 192
Зарегистрирован: 06 мар 2012, 05:41
Откуда: Новосибирск

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

Сообщение sd » 18 апр 2013, 06:48

BubnovRV писал(а):
Даже если у вас смс-пакет, то денег на счету должно быть достаточно для отправки хотя бы рублей 10.

А это для чего? Мне кажется это неправильно, допустим я купил пакеты СМС и специально оставил на счету 0, чтобы предотвратить несанкционированное использование других услуг, а Comtube этому противится?

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

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

Сообщение urabond » 19 апр 2013, 12:32

Мой код для отправки SMS на perl:

Код: Выделить всё
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Request::Common qw(GET);
use Digest::MD5 qw(md5_hex);

my $password = 'mypass';

my %params = (
charset => 'utf-8' ,
from => 'mysmsid' ,
message=> 'Hello World!' ,
to => 74957777777 ,
type => 'html', 
username => 'username'  , );

my $url;

foreach my $key ( sort keys %params ){

        my $value = $params{$key};
        $value =~ s/([^-A-Za-z0-9_.~*' ])/sprintf("%%%02X", ord($1))/eg;
        $value =~ tr/ /+/;
        $url .= $key . "=" . $value  . "&";

}


my $browser = new LWP::UserAgent;
my $req = GET  'http://api.comtube.ru/scripts/sms_api/sendsms.php?' . $url .'signature='. md5_hex($url . "&password=".$password );
my $response = $browser->request($req);

print $response->{_content} =~ m/desc:OK/  ? "Сообщение отправлено!" : "Что-то пошло не так!";
urabond
 
Сообщения: 1
Зарегистрирован: 26 апр 2012, 09:41

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

Сообщение sd » 19 апр 2013, 23:35

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

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

Сообщение BubnovRV » 20 апр 2013, 10:29

Ну и я внесу свою лепту, пример на C#
Код: Выделить всё
        // функция возвращает uid сообщения в случае успеха или 0 при ошибке
        private string SendMessageComtube(string telephone, string message, string naming)
        {
            UTF8Encoding enc = new UTF8Encoding();

            telephone = telephone.Replace("+", "");

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://api.comtube.ru/scripts/api/sms.php");

            request.Method = "POST";
            request.UserAgent = "Comtube SMS Client";
            request.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml";

            SortedDictionary<string, string> param = new SortedDictionary<string, string>();
            param.Add("action", "send");
            param.Add("message", message);
            param.Add("number", telephone);
            param.Add("senderid", naming);
            param.Add("username", login);

            string postData = buildUrlParamsWithSignature(param, password);

            byte[] byteArray = enc.GetBytes(postData);

            request.ContentType = "application/x-www-form-urlencoded;charset=" + enc.BodyName;
            request.KeepAlive = false;
            request.ContentLength = byteArray.Length;

            request.SendChunked = false;
            request.ServicePoint.Expect100Continue = false;
            request.ProtocolVersion = HttpVersion.Version11;

            try
            {
                // Поток для записи
                Stream dataStream = request.GetRequestStream();
                // Записываем данные
                dataStream.Write(byteArray, 0, byteArray.Length);

                // закрываем поток
                dataStream.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                // Получаем поток для чтения
                dataStream = response.GetResponseStream();

                Byte[] read = new Byte[response.ContentLength];
                int count = dataStream.Read(read, 0, (int)response.ContentLength);
                Encoding encode = System.Text.Encoding.GetEncoding(response.CharacterSet);
                String xml = encode.GetString(read);
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);

                dataStream.Close();
                response.Close();

                XmlNodeList items = doc.GetElementsByTagName("uid");
                if (items.Count > 0)
                {
                    return items[0].InnerText;
                }

            }
            catch (WebException ee)
            {
                Console.Write(ee.Response);
                if (ee.Status == WebExceptionStatus.ProtocolError)
                {
                    Console.WriteLine("Status Code : {0}", ((HttpWebResponse)ee.Response).StatusCode);
                    Console.WriteLine("Status Description : {0}", ((HttpWebResponse)ee.Response).StatusDescription);
                }
                return "0";
            }
        }

        public static string buildUrlParamsWithSignature(SortedDictionary<string, string> parms, string password)
        {
            string url = "";

            foreach (KeyValuePair<string, string> kvp in parms)
            {
                string val = "";
                if (kvp.Key == "message")
                {
                    for (int i = 0; i < kvp.Value.Length; i++)
                    {
                        Console.WriteLine(kvp.Value[i]);
                        if ((kvp.Value[i] >= '0' && kvp.Value[i] <= '9') || (kvp.Value[i] >= 'A' && kvp.Value[i] <= 'Z') || (kvp.Value[i] >= 'a' && kvp.Value[i] <= 'z'))
                        {
                            val += kvp.Value[i];
                        }
                        else
                        {
                            val += "%" + BitConverter.ToString(Encoding.UTF8.GetBytes(new char[] { kvp.Value[i] })).Replace("-", "%");
                        }
                    }
                    val = val.Replace("%20", "+").Replace("%2E", ".").Replace("%2D", "-").Replace("%5F", "_");
                }
                else
                    val = HttpUtility.UrlEncode(kvp.Value);

                url += kvp.Key + "=" + val + "&";
            }

            string sign = GetMD5Sum(url + "&password=" + HttpUtility.UrlEncode(password));

            url += "signature=" + sign.ToLower();

            return url;
        }

        private static string GetMD5Sum(string str)
        {
            MD5 md5 = System.Security.Cryptography.MD5.Create();
            byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(str);
            byte[] hash = md5.ComputeHash(inputBytes);

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < hash.Length; i++)
                sb.Append(hash[i].ToString("X2"));

            return sb.ToString();
        }


P.S. Есть еще функция проверки статуса сообщения, если надо могу тоже выложить.
BubnovRV
 
Сообщения: 192
Зарегистрирован: 06 мар 2012, 05:41
Откуда: Новосибирск

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

Сообщение sd » 20 апр 2013, 10:59

BubnovRV писал(а):Ну и я внесу свою лепту, пример на C#
P.S. Есть еще функция проверки статуса сообщения, если надо могу тоже выложить.

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

Пред.След.

Вернуться в API

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

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