Как отправить SMS через веб-приложение Asp.net
Как отправить смс из веб-приложения asp.net?
Нужно ли покупать у любого провайдера?
Есть ли ограничение на количество отправляемых СМС?
Должен ли код отправки SMS записываться в другом потоке, чтобы в случае какого-либо исключения / задержки основной поток не пострадал?
Кто-нибудь может предоставить пример кода, а также понятие о том, как он работает?
3 ответа
Вам нужно будет использовать какого-либо поставщика услуг телефонии для достижения этой цели. Я лично большой поклонник Twilio. Они очень разумные цены и предоставляют API с языковыми обертками API. В частности, в.NET их несколько, в том числе и официальный.
Образцы кода и пошаговые руководства доступны здесь.
Влияние на производительность минимально, поскольку вы по сути создаете сообщение XML, которое передается конечной точке Twilio. Тяжелая работа лежит на ваших плечах, так как это скорее система передачи и получения сообщений XML.
Надеюсь, это поможет, это очень простая платформа для работы.
здесь просто настройте свой онлайн-провайдер смс */ здесь "way2sms - это настройка"
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
namespace SMSAPI
{
class SmsSender
{
void send(string uid, string pwd, string no, string msg)
{
String content = "username="+uid+"&password="+pwd;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://wwwa.way2sms.com/auth.cl");
request.KeepAlive = false;
byte[] byteArray = Encoding.UTF8.GetBytes(content);
CookieContainer cookies = new CookieContainer();
request.CookieContainer = cookies;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5";
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.Referer = "http://wwwg.way2sms.com//entry.jsp";
request.Method = "POST";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
foreach (Cookie cook in response.Cookies)
{
cookies.Add(cook);
}
Stream stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
string serverData = reader.ReadToEnd();
reader.Close();
content = "custid=undefined&HiddenAction=instantsms&Action=custfrom450000&login=&pass=&MobNo="+no+"&textArea="+msg;
request = (HttpWebRequest)WebRequest.Create("http://wwwa.way2sms.com/FirstServletsms?custid=");
byteArray = Encoding.UTF8.GetBytes(content);
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5";
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.CookieContainer = cookies;
request.Method = "POST";
dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
response = (HttpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
reader = new StreamReader(stream);
serverData = reader.ReadToEnd();
reader.Close();
request = (HttpWebRequest)WebRequest.Create("http://wwwa.way2sms.com/jsp/logout.jsp");
byteArray = Encoding.UTF8.GetBytes(content);
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5";
request.ContentLength = byteArray.Length;
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.CookieContainer = cookies;
request.Method = "POST";
dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
response = (HttpWebResponse)request.GetResponse();
stream = response.GetResponseStream();
reader = new StreamReader(stream);
serverData = reader.ReadToEnd();
reader.Close();
}
catch (ArgumentException e)
{
Console.WriteLine("arg exception");
Console.Read();
}
catch (WebException e)
{
Console.WriteLine("web exception");
Console.Read();
}
catch (Exception e)
{
Console.WriteLine("exception");
Console.Read();
}
}
static void Main(string[] args)
{
SmsSender sms = new SmsSender();
sms.send("username", "password", "phno_recipient", "message");
}
}
}
Я использовал TcpClient, который реализует Disposable и создал класс SmsHelper
public class SmsHelper
{
public void SendSms(string toNumber, string content)
{
bool connected;
TcpClient smsServer = OpenConnection("xyz.xy.x.xyz", xyzd, out connected);//require ip and port
if (connected)
{
string sms = content;
SendSmsToClient(smsServer, Properties.Settings.Default.FromNumber, toNumber, sms);
}
}
protected static TcpClient OpenConnection(string ip, int port, out bool connected)
{
string response = string.Empty;
string message = string.Empty;
TcpClient tcpClient = new TcpClient();
try
{
ASCIIEncoding ascEn = new ASCIIEncoding();
tcpClient.Connect(ip, port);
Stream stream = tcpClient.GetStream();
byte[] bb = new byte[100];
stream.Read(bb, 0, 100);
string connect = ascEn.GetString(bb);
if (!String.IsNullOrEmpty(connect))
{
//authenticating to smsServer
string str = "action: login\r\nusername: xxxxx\r\nsecret: integration\r\n\r\n";
byte[] ba = ascEn.GetBytes(str);
stream.Write(ba, 0, ba.Length);
stream.Flush();
byte[] resp = new byte[100];
stream.Read(resp, 0, 100);
response = ascEn.GetString(resp);
stream.Read(resp, 0, 100);
message = ascEn.GetString(resp);
if (response.Contains("Success") && message.Contains("Authentication accepted"))
{
Console.WriteLine("Authenticated");
stream.Flush();
connected = true;
return tcpClient;
}
else
{
Console.WriteLine("Credentials error Cant Authenticate");
tcpClient.Close();
connected = false;
return tcpClient;
}
}
connected = false;
return tcpClient;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
connected = false;
return tcpClient;
}
protected static void CloseConnection(TcpClient client)
{
client.Close();
Console.WriteLine("Connection Closed process terminated...");
}
protected static void SendSmsToClient(TcpClient client, string fromNumber, string toNumber, string smsBody)
{
string response = string.Empty;
string message = string.Empty;
string eventMsg = string.Empty;
ASCIIEncoding asen = new ASCIIEncoding();
Stream stm = client.GetStream();
string smsSend = string.Format("action: smscommand\r\ncommand: gsm send sms {0} {1} \r\n\r\n", fromNumber, toNumber);
byte[] smsCmd = asen.GetBytes(smsSend);
stm.Write(smsCmd, 0, smsCmd.Length);
stm.Flush();
byte[] smsResp = new byte[1000];
stm.Read(smsResp, 0, 1000);
response = asen.GetString(smsResp);
if (!String.IsNullOrEmpty(response))
{
stm.Read(smsResp, 0, 1000);
message = asen.GetString(smsResp);
if (!String.IsNullOrEmpty(message))
{
stm.Read(smsResp, 0, 1000);
eventMsg = asen.GetString(smsResp);
if (!String.IsNullOrEmpty(eventMsg))
{
String[] list = eventMsg.Split('\n');
foreach (string value in list)
{
if (value.StartsWith("--END"))
{
stm.Flush();
}
}
}
}
}
}
}