中国移动云MAS平台 HTTP(JAVA版) 接口发送普通短信 您所在的位置:网站首页 mas集团 中国移动云MAS平台 HTTP(JAVA版) 接口发送普通短信

中国移动云MAS平台 HTTP(JAVA版) 接口发送普通短信

2024-04-04 15:56| 来源: 网络整理| 查看: 265

下载用户操作手册 和 HTTP接口文档 深入了解云MAS

 

一、创建HTTP短信接口

1、登录中国移动云MAS平台,新建短信接口

1)简要说明

      新建短信接口(简称SMS接口),是为集团客户创建可以使用接口发送短信的用户。该用户只能通过指定协议(CMPP2.0、CMPP2.0s、CMPP3.0、SDK、HTTP)连接网关,连接网关成功后,该用户可以通过接口进行发送短信。

2)业务流程

    界面展示:参见图3-20-1-1新建SMS接口。    用户名:若指定为协议,则用户名不可重名,必须唯一;若指定为sdk,则用户名可重名。限制6位字符    用户密码:6-20位字符组成。    IP地址:是接入用户的IP地址,用来鉴权用户的,这个IP地址暂时没有使用。    所属分组:所属分组记录当前用户所在组织架构。    生效|失效日期:非必填字段。    协议:五种选择方式,CMPP2.0、CMPP2.0s、CMPP3.0、SDK、HTTP。选择SDK、HTTP时,不需要对用户名重名做全局校验;选择CMPP2.0、CMPP2.0s、CMPP3.0协议时,需要对用户名是否重名做校验。    回执状态: SMS接口用户是否接收回执,若选择开通则在发送成功时,会发送回执状态报告。    SDK状态:只对当前SDK用户可用。开启代表当前SDK用户可用,关闭代表SDK用户不可用。  安全认证:IP白名单认证,暂未生效。

  

2、接口创建好之后,注意标记的地方,后面用的到

开启:新建的SMS接口开启方可使用。

关闭:已开启的接口用户可以进行关闭,选择后进行关闭,关闭后该用户有效,但是不能操作。

接口文档下载:下载集团客户SMS接口用户的所有接口文档。

签名下载:导出全部用户的签名数据

 

二、JAVA开发工具类(详情阅读 HTTP.docx)

1、model 类

    

/** * 发送短信请求实体 */ public class SendReq { private String ecName; //集团客户名称 private String apId; //用户名 private String secretKey; //密码 private String mobiles; //手机号码逗号分隔。(如“18137282928,18137282922,18137282923”) private String content; //发送短信内容 private String sign; //网关签名编码,必填,签名编码在中国移动集团开通帐号后分配,可以在云MAS网页端管理子系统-SMS接口管理功能中下载。 private String addSerial; //扩展码,根据向移动公司申请的通道填写,如果申请的精确匹配通道,则填写空字符串(""),否则添加移动公司允许的扩展码。 private String mac; //API输入参数签名结果,签名算法:将ecName,apId,secretKey,mobiles,content ,sign,addSerial按照顺序拼接,然后通过md5(32位小写)计算后得出的值。 //get()和set()方法 } /** * 发送短信响应实体 */ public class SendRes { private String rspcod; //响应状态码 private String msgGroup; //消息批次号,由云MAS平台生成,用于验证短信提交报告和状态报告的一致性(取值msgGroup)注:如果数据验证不通过msgGroup为空 private boolean success; //数据校验结果 //get()和set()方法 }

2、SMSUtils 发送短信工具类

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.text.SimpleDateFormat; import java.util.Calendar; import org.apache.commons.codec.binary.Base64; import com.alibaba.fastjson.JSON; import cn.com.jandar.common.dto.SendReq; import cn.com.jandar.common.dto.SendRes; public class SMSUtils { private static String apId="smsmas"; private static String secretKey="123456"; private static String ecName = "xxxxxx"; //集团名称 private static String sign = "xxxx"; //网关签名编码 private static String addSerial = ""; //拓展码 填空 public static String url = "http://112.35.1.155:1992/sms/norsubmit";//请求url /** * 多用户发送短信信息 * @param mobiles 手机号码逗号分隔 * @param content 短信内容 * @return 返回1表示成功,0表示失败 * @throws IOException */ public static int sendMsg(String mobiles,String content) throws IOException{ Calendar calendar = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowDatestr = sdf.format(calendar.getTimeInMillis()); content += nowDatestr; //短信内容后跟个日期时间(可有可无),需求要求 SendReq sendReq = new SendReq(); sendReq.setApId(apId); sendReq.setEcName(ecName); sendReq.setSecretKey(secretKey); sendReq.setContent(content); sendReq.setMobiles(mobiles); sendReq.setAddSerial(addSerial); sendReq.setSign(sign); StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append(sendReq.getEcName()); stringBuffer.append(sendReq.getApId()); stringBuffer.append(sendReq.getSecretKey()); stringBuffer.append(sendReq.getMobiles()); stringBuffer.append(sendReq.getContent()); stringBuffer.append(sendReq.getSign()); stringBuffer.append(sendReq.getAddSerial()); //System.out.println(stringBuffer.toString()); sendReq.setMac(Md5Util.MD5(stringBuffer.toString()).toLowerCase()); //System.out.println(sendReq.getMac()); String reqText = JSON.toJSONString(sendReq); String encode = Base64.encodeBase64String(reqText.getBytes("UTF-8")); //System.out.println(encode); String resStr = sendPost(url,encode); System.out.println("发送短信结果:"+resStr); SendRes sendRes = JSON.parseObject(resStr,SendRes.class); if(sendRes.isSuccess() && !"".equals(sendRes.getMsgGroup()) && "success".equals(sendRes.getRspcod())){ return 1; }else{ return 0; } } /* //main方法测试发送短信,返回1表示成功,0表示失败 public static void main(String[] args) throws IOException{ String msg = "这是发送短信的内容!"; int result = sendMsg("183xxxx65xx,183xxxx12xx",msg); System.out.println("==="+result); }*/ /** * 向指定 URL 发送POST方法的请求 * * @param url * 发送请求的 URL * @param param * 请求参数 * @return 所代表远程资源的响应结果 */ private static String sendPost(String url, String param) { OutputStreamWriter out = null; BufferedReader in = null; String result = ""; try { URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("contentType","utf-8"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)"); conn.setDoOutput(true); conn.setDoInput(true); out = new OutputStreamWriter(conn.getOutputStream()); out.write(param); out.flush(); in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += "\n" + line; } } catch (Exception e) { e.printStackTrace(); } finally { try { if (out != null) { out.close(); } if (in != null) { in.close(); } } catch (IOException ex) { ex.printStackTrace(); } } return result; } }

 用到 MD5 和 base64加密,json字符串转对象和对象转json字符串,使用的是 com.alibaba.fastjson.JSON(也可以使用其他架包)。 

注意: 

apId和secretKey一般不会搞错,

但是集团名称ecName一定要写对,否则就会提示{“msgGroup”:”“,”rspcod”:”InvalidUsrOrPwd”,”success”:false},无效的用户名和密码,

还有一个就是mac字段sendReq.setMac(Md5Util.MD5(stringBuffer.toString()).toLowerCase());

MD5加密过后一定要把它变成小写.toLowerCase(),否则也会出错。

 

3、MD5解密工具类

import java.security.MessageDigest; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * MD5加密/验证工具类 * * @author bluesky * */ public class Md5Util { static final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; /** * 生成MD5码 * * @param plainText * 要加密的字符串 * @return md5值 */ public final static String MD5(String plainText) { try { byte[] strTemp = plainText.getBytes("UTF-8"); MessageDigest mdTemp = MessageDigest.getInstance("MD5"); mdTemp.update(strTemp); byte[] md = mdTemp.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } } /** * 生成MD5码 * * @param plainText * 要加密的字符串 * @return md5值 */ public final static String MD5(byte[] plainText) { try { byte[] strTemp = plainText; MessageDigest mdTemp = MessageDigest.getInstance("MD5"); mdTemp.update(strTemp); byte[] md = mdTemp.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } } /** * 先进行HmacSHA1转码再进行Base64编码 * @param data 要SHA1的串 * @param key 秘钥 * @return * @throws Exception */ public static String HmacSHA1ToBase64(String data, String key) throws Exception { SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(signingKey); byte[] rawHmac = mac.doFinal(data.getBytes()); return Base64.encodeBase64String(rawHmac); } /** * 校验MD5码 * * @param text * 要校验的字符串 * @param md5 * md5值 * @return 校验结果 */ public static boolean valid(String text, String md5) { return md5.equals(MD5(text)) || md5.equals(MD5(text).toUpperCase()); } /** * * @param params * @return */ public static String MD5(String... params) { StringBuilder sb = new StringBuilder(); for (String param : params) { sb.append(param); } return MD5(sb.toString()); } }

注意:String encode = Base64.encodeBase64String(reqText.getBytes("UTF-8")); 

多了解 中国移动云MAS平台的操作手册与接口文档,对开发帮忙很大

参考文章:中国移动 云MAS平台HTTP2.1(HTTP版)发送普通短信 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有