集成手机短信的方式

转自: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(); 
这样就可以了  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值