C#对接中国移动短信接口
中国移动短信接口(宣传一下)
移动短信平台地址: http://mas.10086.cn/login,输入用户名密码就可以登录了。
我们一般在使用的时候往往需要动态展示短信内容,或者加入自己项目链接,所以这边一定要联系你们的客服经理开通模板短信。
本博主也是联系以后开通的,
接下来就是新建模板跟审核了,一般情况下“适用规则”是可以满足要求的,如果不行的话,还得再找客服经理申请大字段(个人感觉还是比较麻烦的,毕竟走流程要花费时间嘛),新建完成就提交审核,审核完毕就获得模板ID了,第一步完成。
调用接口还需要其他参数,我们接着往下,主页-管理-接口管理-新建接口。本博主已经建好了,就直接给大家看一下,用户名密码自己设置,ip地址我设置的是我服务器的局域网ip(感觉这一项好像没什么用),其他的可以参考博主设置就行。完成后,记得把这个接口的签名下载下来,第二步完成。
上面的配置很简单,就是为调用接口服务的,小本本拿出来记录了哈,网址里面可以下载接口文档,博主是采用的HTTPS接口,首要任务就是拿到连接地址(博主是加了美女客服QQ要到的),再来看看报文内容(是不是都全了,哈哈)
准备工作完成,上C#代码了。本博主短信动态字段有点多,按照要求需要拼接,
//发送短信,phoneList是需要发送的短信LIST
for (int i = 0; i < phoneList.Count; i++) {
StringBuilder paramss = new StringBuilder();
paramss.Append('[');
paramss.Append('"' + GuestUserNameList[i] + '"' + ',');
paramss.Append('"' + bdateBegin.ToString("yyyy年MM月dd日HH:mm") + '"' + ',');//{[starttime:中文+英文+数字+符号,总长度50]}
paramss.Append('"' + bdateEnd.ToString("yyyy年MM月dd日HH:mm") + '"' + ',');
paramss.Append('"' + urldetail + '"' + ']');
bool b = xfService.sendsms(phoneList[i], paramss, "这里是模板ID 4aae25ed5ad370f58164");
if (b) {//记录发送短信
BaseEntity_Sms insertObj = new BaseEntity_Sms();
insertObj.PhoneNum = phoneList[i];
insertObj.CreateDate = dNow;
insertObj.SmsType = "访客";
ccms_business.insertSms(insertObj);
}
}
/// <summary>
/// 短信接口
/// </summary>
public bool sendsms(String mobiles, StringBuilder paramss, String templateId) {
bool bRet = false;
JObject jsonObj = new JObject();
jsonObj.Add("ecName", "填短信平台的公司:南通最牛逼的有限公司");
jsonObj.Add("apId", "attend");
jsonObj.Add("templateId", templateId);
jsonObj.Add("mobiles", mobiles);
jsonObj.Add("params", paramss.ToString());
jsonObj.Add("sign", "这里是短信接口签名pwa4T");
jsonObj.Add("addSerial", "");
StringBuilder sbFormatString = new StringBuilder();
sbFormatString.Append("{0}{1}{2}{3}{4}{5}{6}");
jsonObj.Add("mac", MD5Str.MD5Encrypt(String.Format(sbFormatString.ToString(), "填短信平台的公司:南通最牛逼的有限公司", "attend", "短信接口的密码!@#$",
templateId, mobiles, paramss.ToString(), "这里是短信接口签名pwa4T", ""), new UTF8Encoding()));
//这边要注意base64加密,否则报错
string _data = Base64Encode(Encoding.UTF8, jsonObj.ToString());
JObject rejsonObj = null;
try {
String sResult = HttpWebRequestHelper.GetDatahttps(_data, "https://问客服MM要地址/sms/tmpsubmit");
rejsonObj = JObject.Parse(sResult);
Console.WriteLine(rejsonObj.ToString());
if ("success".Equals(rejsonObj.GetValue("rspcod").ToString())) {
bRet = true;
}
}
catch (Exception ex) {
throw new Exception("XFRemoteService 接口调用:ERROR => " + ex.Message);
}
return bRet;
}
//本博主取名有点恶趣味,别介意
public static string GetDatahttps(string JSONData, string Url) {
byte[] bytes = Encoding.UTF8.GetBytes(JSONData);
HttpWebRequest request = null;
//HTTPSQ请求
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(Url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version11;
request.Method = "POST";
request.ContentType = "application/json";
request.UserAgent = DefaultUserAgent;
//request.
Stream reqstream = request.GetRequestStream();
reqstream.Write(bytes, 0, bytes.Length);
//声明一个HttpWebRequest请求
request.Timeout = 90000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.UTF8;
StreamReader streamReader = new StreamReader(streamReceive, encoding);
string strResult = streamReader.ReadToEnd();
streamReceive.Dispose();
streamReader.Dispose();
return strResult;
}
然后就没有然后了,完成,测试中会遇到success但是无法收到短信的问题,一般都是自己参数有问题,可以联系客服MM查看报错原因,但是呢依然是收取短信费用的。。。。。比我还恶趣味。