通过移动的Mas接口发送短信
1. 首先,需要移动公司提供的用户名、密码、服务ID、接口Url等信息。
2. 将短信信息整理成XML格式的字符串,再转为byte数组,通过POST的方式,将短信发往Mas接口。需要引用"MSXML2"组件。
注意:发往Mas接口的byte数组的编码方式需要设置为"GBK",否则收到的短信将会是乱码。
byte[] data = System.Text.Encoding.GetEncoding("GBK").GetBytes(DecodeString);
3. 实现代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /// <summary> 2 /// 移动公司的Mas短信接口 3 /// </summary> 4 public class MasSerVice 5 { 6 string userID = System.Configuration.ConfigurationManager.AppSettings["userID"].ToString(); //用户名 7 string passWord = System.Configuration.ConfigurationManager.AppSettings["passWord"].ToString(); //密码 8 string serviceID = System.Configuration.ConfigurationManager.AppSettings["ServiceID"].ToString(); //服务ID 9 string postUrl = System.Configuration.ConfigurationManager.AppSettings["postUrl"].ToString(); //移动提供的Mas接口的Url 10 11 /// <summary> 12 /// 准备发送的XML字符串 13 /// </summary> 14 /// <param name="userID"></param> 15 /// <param name="passWd"></param> 16 /// <param name="mobileNo">手机号码,如果有多个号码,号码之间按逗号隔开,不超过100个</param> 17 /// <param name="smsContent">短信内容</param> 18 /// <returns></returns> 19 public string PrepareXml(string MobileNo, string smsContent) 20 { 21 string str = String.Format("<?xml version=\"1.0\" encoding=\"GB2312\"?>" + 22 "<svc_init ver=\"2.0.0\">" + 23 "<sms ver=\"2.0.0\">" + 24 @"<client> 25 <id>{0}</id> 26 <pwd>{1}</pwd> 27 <serviceid>{2}</serviceid> 28 </client> 29 <sms_info> 30 <phone>{3}</phone> 31 <content>{4}</content> 32 </sms_info> 33 </sms> 34 </svc_init>", userID, passWord, serviceID, MobileNo, smsContent); 35 36 return str; 37 } 38 39 /// <summary> 40 /// 发送短信 41 /// </summary> 42 /// <param name="mobileNo">手机号码,如果有多个号码,号码之间按逗号隔开,不超过100个</param> 43 /// <param name="smsContent">短信内容</param> 44 /// <returns></returns> 45 public string MessageSend(string mobileNo, string smsContent) 46 { 47 string result = String.Empty; 48 string postString = PrepareXml(mobileNo.Replace(',', ',').TrimEnd(new char[] { ',' }), smsContent); 49 try 50 { 51 string DecodeString = postString.Replace(" ", "+"); 52 53 byte[] data = System.Text.Encoding.GetEncoding("GBK").GetBytes(DecodeString); 54 MSXML2.ServerXMLHTTP xmlhttp = new MSXML2.ServerXMLHTTP(); 55 56 xmlhttp.open("POST", postUrl, false, null, null); 57 xmlhttp.setRequestHeader("Content-Length", data.Length.ToString()); 58 xmlhttp.setRequestHeader("Content-Type", "text/xml;charset=gb2312"); 59 xmlhttp.send(data); 60 xmlhttp.waitForResponse(1); 61 62 Byte[] b = (Byte[])xmlhttp.responseBody; //返回数据 63 64 string backXml = System.Text.Encoding.GetEncoding("gb2312").GetString(b); 65 66 System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument(); 67 xmldoc.LoadXml(backXml); 68 result = xmldoc.GetElementsByTagName("retcode")[0].InnerText; 69 } 70 71 catch (Exception ex) 72 { 73 result = ex.Message; 74 } 75 return result; 76 } 77 }
4. 调用接口:
new MasService().MessageSend("13812345678", "短信内容……");
如果返回的值为"00",即表示短信已经发送成功。
附:retmesg为返回代码说明信息
retcode返回值 |
说明 |
00 |
提交成功 |
01 |
手机号码数量和sms_id数量不匹配 |
26 |
超过短信最大发送量 |
25 |
手机号码格式有误 |
24 |
phone,content,sms_id标签内容为空 |
23 |
sms_info标签内容为空 |
22 |
账户认证失败 |
21 |
账号信息为空 |
12 |
client标签内容为空 |
11 |
提交的内容空 |
14 |
数据库连接失败 |
posted on 2013-11-22 14:56 nxgliming 阅读(2439) 评论(0) 编辑 收藏 举报