Как подключиться к SmartResponder на C#

Здесь приводится описание подключения вашего сайта на ASP.NET  к сервису почтовых рассылок (email-рассылок) SmartResponder. Мы не будет останавливаться подробно на вопросе о том как пользоваться сервисом SmartResponder.ru, зато постараемся подробнее описать подключение SmartResponder.ru через API к сайту на ASP.NET. Примеры кода приводим на языке C#.

SmartResponder API C#

 

Сразу сделаем такое замечание. Мы выбрали для собственных целей тариф “BRONZE”. На данный момент он устраивает. Есть также бесплатный тариф, в нём отсутствует функция импорта ранее наработанных адресов.

Список тарифов можно посмотреть здесь:
https://smartresponder.ru/l_ru/user/reg_tarif.html

Для настройки функций синхронизации с системой SmartResponder вам понадобится включить возможность использования API в настройках личного кабинета:
 

API smartresponder

Теперь открываем документацию по API и разбираемся с общим принципом работы:
http://smartresponder.ru/api.html

Обратите внимание на следующие особенности подключения к API SmartResponder:

1 API-интерфейсы следует вызывать по HTTP-протоколу методом POST (в случаях запросов, не требующих передачи входных данных, чувствительных к кодировке UTF-8, допускается вызов методом GET).

2 API-интерфейсы доступны любому автору рассылок, имеющему оплаченный аккаунт. То есть функции API вы не сможете использовать на free-аккаунте!

3 Защита от несанкционированного доступа обеспечивается двумя способами: по ключу или по контрольной сумме. Мы в примерах будем использовать более простой вариант – по ключу.

3 Для всех входных и выходных данных API-интерфейсов используется кодировка UTF-8!

4 Ответ сервера вы можете получать как в формате XML или JSON (задать значение переменной ”format”).
 

Пример интеграции со SmartResponder на C#

Для интеграции со SmartResponder с сайтом на ASP.NET используем в примере только две функции – добавление и обновление подписчика.
Начнем с «хвоста». На ваш запрос система SmartResponder шлет ответ в виде:

     


Опишем класс под этот ответ:

 

public class smartResponder
    {
        public class response
        {
            public string result { get; set; }
            public string id { get; set; }

            [XmlElement("error")]
            public response_error error { get; set; }

            public class response_error
            {
                [XmlAttribute]
                public string code { get; set; }

                [XmlAttribute]
                public string message { get; set; }
            }
         
        }
    }

 

 И напишем сервис под наши задачи:

public class SmartResponderService
    {
        private static Logger logger = LogManager.GetCurrentClassLogger();

        public smartResponder.response addUser(string email, string FIO, string phone)
        {
            string responseString = "";
            char[] separator = new char[] {' '};
            string[] FIO_parts = (FIO ?? "").Split(separator, StringSplitOptions.RemoveEmptyEntries);

            string first_name = "", middle_name = "", last_name = "";
            if (FIO_parts.Count() > 1)
                first_name = FIO_parts[1];

            if (FIO_parts.Count() > 2)
                middle_name = FIO_parts[2];

            if (FIO_parts.Count() > 0)
                last_name = FIO_parts[0];

            string api_key = ConfigurationManager.AppSettings["SmartResponder_api_key"];
            string delivery_id = ConfigurationManager.AppSettings["delivery_id"] ?? "";
            string url = "http://api.smartresponder.ru/subscribers.html";
            
            string dataString = ("action=create&email=" + email
                + "&first_name=" + first_name + "&middle_name=" + middle_name + "&last_name=" + last_name
                + "&phones=" + phone
                + "&delivery_id=" + delivery_id + "&api_key=" + api_key);

            WebClient webClient = new WebClient();
            webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            responseString = Encoding.UTF8.GetString(webClient.UploadData(url,"POST", Encoding.UTF8.GetBytes(dataString)));

            XmlSerializer ds = new XmlSerializer(typeof(smartResponder.response));


            smartResponder.response myResponse = new smartResponder.response();
            try
            {
                TextReader tr = new StringReader(responseString);
                myResponse=  (smartResponder.response)ds.Deserialize(tr);
            }
            catch { }

            return myResponse;
        }

        // обновить пользователя
        public smartResponder.response updateUser(int smartResponder_ID, string email, string FIO, string phone)
        {
            string responseString = "";
            char[] separator = new char[] { ' ' };
            string[] FIO_parts = (FIO ?? "").Split(separator, StringSplitOptions.RemoveEmptyEntries);

            string first_name = "", middle_name = "", last_name = "";
            if (FIO_parts.Count() > 1)
                first_name = FIO_parts[1];

            if (FIO_parts.Count() > 2)
                middle_name = FIO_parts[2];

            if (FIO_parts.Count() > 0)
                last_name = FIO_parts[0];

            string api_key = ConfigurationManager.AppSettings["SmartResponder_api_key"];
            
            string url = "http://api.smartresponder.ru/subscribers.html";

            string dataString = ("action=update&email=" + email
                + "&first_name=" + first_name + "&middle_name=" + middle_name + "&last_name=" + last_name
                + "&phones=" + phone + "&id=" + smartResponder_ID + "&api_key=" + api_key);

            WebClient webClient = new WebClient();
            webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            responseString = Encoding.UTF8.GetString(webClient.UploadData(url, "POST", Encoding.UTF8.GetBytes(dataString)));

            XmlSerializer ds = new XmlSerializer(typeof(smartResponder.response));


            smartResponder.response myResponse = new smartResponder.response();
            try
            {
                TextReader tr = new StringReader(responseString);
                myResponse = (smartResponder.response)ds.Deserialize(tr);
            }
            catch { }

            return myResponse;
        }

    }

 

Ответ от SmartResponder анализируете примерно таким образом:

smartResponder.response sr_response = new SmartResponderService().addUser
(_user.contactEmail, _user.FIO, _user.phone);
int sr_ID = 0;
if (Int32.TryParse(sr_response.id ?? "", out sr_ID))
{
	_user.smartResponder_ID = sr_ID;

	userRepo.Save();
}
 

 Для завершения интеграции на C# ASP.NET и API SmartResponder.ru добавьте в вашу таблицу пользователей поле int? SmartResponder_ID. Если оно не равно null, и его значение задано, значит нам получилось экспортировать пользователя из сайта на ASP.NET в сервис почтовых рассылок SmartResponder!


Комментарии

  • [18.07.2013] Спасибо, понятно всё объяснили. Как раз искал описание интеграции со SmartResponder

Ваш комментарий:

Сколько будет 2 + 2 ?