Борьба с Callatell CallBack в ASP.NET с использованием C#.NET
Я строю веб-приложение в ASP.NET с использованием C#.NET, которое отправляет SMS с помощью clickatell.
Я безуспешно пытаюсь получить статус обратно от clickatell, создав страницу CallBack под названием ClickatellCallBack.aspx Вот код позади страницы:
открытый частичный класс ClickatellCallBack: System.Web.UI.Page
{
защищенная пустота Page_Load(отправитель объекта, EventArgs e)
{
// Получить значения из QueryString.
строка apiID = Request.QueryString["api_id"];
string from = Request.QueryString["from"];
string to = Request.QueryString["to"];
string timestamp = Request.QueryString["timestamp"];
string apiMsgId = Request.QueryString["apiMsgId"];
string cliMsgId = Request.QueryString["cliMsgId"];
строка status = Request.QueryString["status"];
строка обвинения = Request.QueryString["обвинение"];// Insert the SMS Status values into the database. int smsStatusID = SMSManager.InsertSMSStatus(apiID, from, to, timestamp, apiMsgId, cliMsgId, status, charge);
}
}
По сути, эта страница извлекает значения строки запроса, отправленные с clickatell, и вставляет их в таблицу базы данных.
Я зарегистрировал следующий URL обратного вызова: http://www.mydomain.com/ClickatellCallBack.aspx с clickatell и выбрал тип обратного вызова: HTTP GET
В моей команде sendmsg я установил подтверждение доставки и запрос обратного вызова следующим образом: deliv_ack=1 и callback=3
Единственная проблема в том, что ничего не происходит. URL-адрес CallBack, по-видимому, не доступен для clickatell.
Я что-то пропустил? Я делаю что-то неправильно. Нужно ли реализовывать этот URL обратного вызова, используя что-то отличное от страницы ASP.NET? Есть ли какая-то настройка clickatell, которую я пропускаю?
Любая помощь будет принята с благодарностью.
С уважением
Вальтер
2 ответа
Я решил проблему, поместив параметры callback и delivery_ack с помощью команды startbatch, а не команды quicksend. Это похоже на работу. Так вот что у меня внутри C#.NET
функция, которая запускает пакет:
protected string get_batch_id(string session_id, string message_body)
{
// Declare a WebClient.
WebClient client = new WebClient();
// Add a User Agent Header.
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR1.0.3705;)");
// Add the session_id to the Query String.
client.QueryString.Add("session_id", session_id);
// Add the template to the Query String.
client.QueryString.Add("template", message_body);
// Add the callback to the Query String.
client.QueryString.Add("callback", "3");
// Add the deliv_ack to the Query String.
client.QueryString.Add("deliv_ack", "1");
// Declare the baseurl.
string baseurl = "http://api.clickatell.com/http_batch/startbatch";
// Open the baseurl.
Stream data = client.OpenRead(baseurl);
// Declare and instantiate a StreamReader to retrieve the results of executing the startbatch command.
StreamReader reader = new StreamReader(data);
// Parse and split the returned string into the returned_strings array.
string[] returned_strings = reader.ReadToEnd().Split(' ');
// Retrieve the batch_id from the (second element of the) returned_strings array.
string batch_id = returned_strings[1].ToString();
// Close the Stream.
data.Close();
// Close the Reader.
reader.Close();
// Return the batch_id.
return (batch_id);
}
Уф!
Поэтому мне также удалось получить следующую функциональность, успешно закодированную в ASP.NET с помощью C#.NET
:
- Отправить сообщение одному получателю;
- Отправить одно и то же сообщение нескольким получателям;
- Отправить персональное сообщение одному получателю;
- Отправить персональное сообщение нескольким получателям;
По пути я заметил, что не так много примеров кода ASP.NET
с помощью C#.NET
,
Я просто получаю ответ от Clickatell API, десериализуя объект javascript, который я получил из запроса, который я отправил в Clickatell API.
Я просто возвращаю его на свою веб-страницу, используя оператор return Ok().