移动云MAS提供了多种调用方式去发短信,本文采用HTTP方式使用C#程序调用短信发送功能。一开始要申请号云MAS企业账号,一般是 集团客户名称,用户名,密码。 使用这个账号 登录云MAS系统然后创建调用接口的账号,而不是使用登录云MAS平台的账号密码调用接口。
有了账后之后第一步便是登录,然后根据登录信息调用发送短信接口
地址是:
参数名称 | 说明 |
ec_name | 集团客户名称 |
user_name | 用户名 |
user_passwd | 密码 |
返回值 | 描述 |
mas_user_id | 用户登录id |
access_token | API输入参数签名密钥 |
access_token_expire_seconds | API输入参数签名超时时间,超过此阈值后API输入参数签名密钥作废,需要重新申请,调用HTTP API时应该在超时时间到达以前申请新的签名密钥 |
status | 验证状态,错误码请参考:3.1.1 |
HTTP客户端向云MAS平台发送请求,带上相应的请求参数,云MAS平台接收请求,并进行验证,验证通过后进行短信发送。
- 请求声明
测试环境:http:// 112.33.1.13:80/app/http/sendSms
正式环境:http://mas.ecloud.10086.cn/app/http/sendSms
- 参数详解
参数名称 | 说明 |
mas_user_id | 用户唯一标识 |
mobiles | 手机号码数组,逗号分隔。 |
content | 发送短信内容 |
sign | 网关签名编码,必填,签名编码在中国移动集团开通帐号后分配,可以在云MAS网页端管理子系统-SMS接口管理功能中下载。 |
serial | 扩展码,根据向移动公司申请的通道填写,如果申请的精确匹配通道,则填写空字符串(""),否则添加移动公司允许的扩展码 |
mac | API输入参数签名结果,签名算法:将mas_user_id,mobiles,content ,sign,serial, access_token按照顺序拼接,然后通过MD5+HEX计算后得出的值 |
- 返回值
- RET-CODE
返回值 | 描述 |
SC:4060 | 登录验证请求超速 |
SC:4010 | 用户 TOKEN 不存在,可能已失效或未登录 |
SC:4000 | HTTP MAC 校验错误,请注意签名参数顺序 |
SC:4140 | 手机号码数量超过200 |
SC:4141 | 短信内容字符数超过5000 |
SC:4011 | 用户信息缺失,可能已失效或未登录 |
SC:5001 | 接口处理异常,请联系技术支持或稍候再试 |
SC:0000 | 短信成功提交至云MAS平台 |
SC:7002 | 非法号码批次 |
SC:7003 | 重复号码 |
SC:112 | 签名错误或普通短信不允许使用模板短信的签名编码 |
-
- MSG-GROUP
返回短信批次号
- MSG-GROUP
C#代码
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace MES.Service.SMS
{
public class SMS
{
//账号信息是在申请完账号,在平台开通发短信接口账号时就有了一下的信息
string ec_name { set; get; }
string user_name { set; get; }
string user_passwd { set; get; }
string url { set; get; }
string sign { set; get; }
public SMS(string url,string ec_name,string user_name,string user_passwd,string sign)
{
this.url = url;
this.ec_name = ec_name;
this.user_name = user_name;
this.user_passwd = user_passwd;
this.sign = sign;
}
public Result GetAuthorize()
{
HttpClient myHttpClient = new HttpClient();
string strResult = "";
Result result=new Result();
//提交当前地址的webapi
myHttpClient.BaseAddress = new Uri(url);
var content = new FormUrlEncodedContent(new Dictionary<string, string>()
{
{"ec_name",ec_name},
{"user_name",user_name},
{"user_passwd",user_passwd }
});
var response = myHttpClient.PostAsync("authorize", content).Result;
if (response.IsSuccessStatusCode)
{
// 登陆成功返回值{\"status\":\"Success\",\"access_token_expire_seconds\":\"7200\",\"mas_user_id\":\"b32fa74d-21c4-4378-9399-375565f0ef59\",\"access_token\":\"obrBEXGK8KOcwPJ8mCVmnwpBHubEVw\"}"
strResult = response.Content.ReadAsStringAsync().Result;
if (strResult.Contains("Success"))
{
result= JsonConvert.DeserializeObject<Result>(strResult);
}
else
{
result.status = "Fail";
result.errorMassage = strResult;
}
}
else
{
result.status = "Fail";
result.errorMassage = response.StatusCode.ToString();
}
return result;
}
public Result SendMsg(SMSObject content)
{
Result result = new Result();
string str = content.mas_user_id + content.mobiles + content.content + sign + content.serial + content.access_token;
content.mac = Md5Hex(str);
string strJson = JsonConvert.SerializeObject(content);
//string _data = EncryptBase64(strJson);
var _data = new FormUrlEncodedContent(new Dictionary<string, string>()
{
{"mas_user_id",content.mas_user_id},
{"mobiles",content.mobiles},
{"content",content.content },
{"sign",sign },
{"serial","" },
{"mac",content.mac }
});
_data.Headers.ContentType.CharSet = "UTF-8";// = new MediaTypeHeaderValue("application/x-www-form-urlencoded; charset=UTF-8");
HttpClient myHttpClient = new HttpClient();
string strResult = "";
//提交当前地址的webapi
myHttpClient.BaseAddress = new Uri(url);
var response = myHttpClient.PostAsync("sendSms", _data).Result;
if (response.IsSuccessStatusCode)
{
//发送成功返回字符串实例{\"RET-CODE\":\"SC:0000\",\"MSG-GROUP\":\"be654d4c-2e9a-4e8b-9ef4-3930dabd6f18\"}
strResult = response.Content.ReadAsStringAsync().Result;
if (strResult.Contains("SC:0000"))//SC:0000 发送成功的返回代码
{
result.status = "Success";
}
else
{
result.status = "Fail";
result.errorMassage = strResult;
}
}
else
{
result.status = "Fail";
result.errorMassage = response.StatusCode.ToString();
}
return result;
}
/// <summary>
///
/// </summary>
/// <param name="mobiles"></param>
/// <param name="content"></param>
/// <returns></returns>
public Result sendMsg(string mobiles,string content)
{
SMSObject smsObject = new SMSObject();
Result result = GetAuthorize();
if (result.status == "Success")
{
smsObject.access_token = result.access_token;
smsObject.mas_user_id = result.mas_user_id;
smsObject.mobiles = mobiles; //如果是多个号码中间加逗号13049718607,17629216670
smsObject.content = content; ";
Result resultSendMsg = SendMsg(smsObject);
if (resultSendMsg.status == "Success")
{
return resultSendMsg;
}
else
{
return resultSendMsg;
}
}
else
{
return result;
}
}
private static string Md5Hex(string data)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
byte[] dataHash = md5.ComputeHash(Encoding.UTF8.GetBytes(data));
StringBuilder sb = new StringBuilder();
foreach (byte b in dataHash)
{
sb.Append(b.ToString("x2").ToUpper());
}
return sb.ToString();
}
}
public class SMSObject
{
public string mas_user_id { set; get; }
//public string apId { set; get; }
//public string secretKey { set; get; }
public string mobiles { set; get; }
public string content { set; get; }
public string serial { set; get; }
public string mac { set; get; }
public string access_token { set; get; }
}
public class Result
{
public string status { set; get; }
public string access_token_expire_seconds { set; get; }
public string mas_user_id { set; get; }
public string access_token { set; get; }
public string errorMassage { set; get; }
}
}