转自:http://man1900.iteye.com/blog/653013
手机短信跟外部邮件是两个比较重要的任务提醒功能,特别是手机短信,他可以在任何情况下通知用户处理一些紧急的任务,在流程任务中,我们经常需要用短信通知相关的负责人员处理相关任务。
那么集成短信至系统中我们需要做哪一些工作,会不会相对比较麻烦?鉴于此,我们对两种比较常见的短信集成解决方案进行了分析。
方式一:利用短信模块(GSM Model)进行集成
这种方式已经存在已久,集成简单,其原理如下图所示:
这种 短信模块 市场上有很多,比较便宜,如西门子TC235,目前在 300元以下。购买一个,再买一张移动卡或联通卡装上,然后联接在服务器上。在服务器上安装短信软件,该软件就会定时去读取其对应的短信表,当发现待发送的短信,就会把该表中的信息往外发,当接收到短信时,其会把信息写至接收表中。
OA系统要实现收发短信,很简单,就放那两个表读写数据即可。
这种模式的短信收发跟我们用普通的手机收发是一样,需要往手机卡上充值,其短信费用会相对贵一些,可能会达1毛每条,另还需要缴手机卡的月租费用,但对于一些短信不多的企业,这种方式是可以省钱的,也不需要投入太多。
方式二:利用短信商的服务端口
这种方式是近两三年才比较流行,移动或联通集团把自己的短信平台,通过端口对外公开,企业可以向移动或联通批量购买一定的短信,移动或联通会开通一个短信账号,企业就可以把需要发送的短信,以xml方式提交至该开放的端口,该端口对应的短信服务器会帮忙企业把该短信发送出去。
其原理如下图所示:
由于该方式是批量购买短信,所以发送的费用比较便宜,广州有些代理商,1000元就可以购买1.6w多条短信,低至6分钱一条,并且不限使用时间,一值充2000元,更可低至5分甚至4分钱一条短信,这对于需要大量发送短信的企业来说,无疑是更好的选择。同时不需要什么附带的硬件,直接把数据提交至短信端口即可,前提是 Web Server需要联网。
下面介绍一下使用C#利用移动和联通的接口发送短信的代码:(转自:http://blog.sina.com.cn/s/blog_6033a6360100db5q.html)
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Text;
using System.Net;
using System.IO;
using cn.sh.unicom.groupsms;
///
/// Mobmsg 的摘要说明
///
public class Mobmsg
{
private string _MobNum;
private string _MobMsg;
public Mobmsg()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Mobmsg(string MobNum, string MobMsg)
{
this._MobNum = MobNum;
this._MobMsg = MobMsg;
}
public void SendMsg()
{
if (CheckType(this._MobNum))
ToMobile();
else
ToUnicom();
}
public void ToMobile()
{//移动的接口
Encoding encoding = Encoding.GetEncoding("gb2312");
string enterpriseid = "123456";//企业代码
string accountid = "123";
string pwd = "yourpwd";
string postData = "enterpriseid=" + enterpriseid + "&accountid=" + accountid + "&pswd=" + pwd + "&mobs=" + this._MobNum + "&msg=" + this._MobMsg;
string strUrl = "http://211.136.163.68:8000/httpserver";
byte[] data = encoding.GetBytes(postData);
// 准备请求...
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(strUrl);
myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
Stream newStream = myRequest.GetRequestStream();
// 发送数据
newStream.Write(data, 0, data.Length);
newStream.Close();
}
public void ToUnicom()
{//联通的接口
cn.sh.unicom.groupsms.Login myLogin = new cn.sh.unicom.groupsms.Login();
string MySessionID = "";
myLogin.username = "yourname"; //用户名123456789
myLogin.userType = "0";
myLogin.password = "yourpwd"; //密码
LoginMes mes1 = new LoginMes();
mes1.login = myLogin;
SmWSImplService Binding = new SmWSImplService();
OpResult Value1 = new OpResult();
try
{
Value1 = Binding.memberLogin(mes1);
}
catch
{
;
}
MySessionID = Value1.sessionId;//'得到sessionid
SendBatchSMS(Binding, MySessionID, this._MobMsg, "companycode");//companycode为企业代号1112345
Value1 = Binding.logout(mes1);
}
public bool CheckType(string MobileNum)
{
string ForeStr = MobileNum.Substring(0, 3);
int ForeNum = Convert.ToInt32(ForeStr);
if (ForeNum <= 134)
return false;
else
return true;
}
public void SendBatchSMS(SmWSImplService Binding, string SessionID, string SmsMsg, string AccountID)
{
BatchMsg MySendSM = new BatchMsg();
OpResult Value1 = new OpResult();
string[] SendAddrs = new string[1];
SendAddrs[0] = this._MobNum; //发送号码数组 手机号码
MySendSM.sessionId = SessionID;
MySendSM.msgContent = SmsMsg;
MySendSM.destAddrs = SendAddrs;
Value1 = Binding.SendBatchMessage(MySendSM);
MySendSM=null;
Value1 = null;
}
}
在调用联通的接口的时候还要添加一个 http://groupsms.unicom.sh.cn/websms/services/SmWSImpl?wsdl webservice
然后我们可以在其它页面使用
Mobmsg msg = new Mobmsg("要发送信息的手机号码","要发送的内容");
msg.SendMsg();
这样就可以了