移动云Mas发送普通短信和模板短信

//实体类

public class SubmitReq {
    private String ecName;//客户名称
    private String apId;//用户名
    private String secretKey;//密码
    private String mobiles;//手机号码逗号分隔。(如“1813728****,1813727****,1813726****”)
    private String content;//发送短信内容
    private String sign;//网关签名编码,必填,签名编码在中国移动集团开通帐号后分配,可以在云MAS网页端管理子系统-SMS接口管理功能中下载。
    private String addSerial;//扩展码,根据向移动公司申请的通道填写,如果申请的精确匹配通道,则填写空字符串(""),否则添加移动公司允许的扩展码。
    private String templateId;//模板ID
    private String mac;//API输入参数签名结果,签名算法:将ecName,apId,secretKey,mobiles,content ,sign,addSerial按照顺序拼接,然后通过md5(32位小写)计算后得出的值。
    private String params;

    public String getParams() {
        return params;
    }
    
    public void setParams(String params) {
        this.params = params;
    }
    
    public String getTemplateId() {
        return templateId;
    }
    
    public void setTemplateId(String templateId) {
        this.templateId = templateId;
    }
    
    public String getEcName() {
        return ecName;
    }
    
    public void setEcName(String ecName) {
        this.ecName = ecName;
    }
    
    public String getApId() {
        return apId;
    }
    
    public void setApId(String apId) {
        this.apId = apId;
    }
    
    public String getSecretKey() {
        return secretKey;
    }
    
    public void setSecretKey(String secretKey) {
        this.secretKey = secretKey;
    }
    
    public String getMobiles() {
        return mobiles;
    }
    
    public void setMobiles(String mobiles) {
        this.mobiles = mobiles;
    }
    
    public String getContent() {
        return content;
    }
    
    public void setContent(String content) {
        this.content = content;
    }
    
    public String getSign() {
        return sign;
    }
    
    public void setSign(String sign) {
        this.sign = sign;
    }
    
    public String getAddSerial() {
        return addSerial;
    }
    
    public void setAddSerial(String addSerial) {
        this.addSerial = addSerial;
    }
    
    public String getMac() {
        return mac;
    }
    
    public void setMac(String mac) {
        this.mac = mac;
    }
}

 

//短信发送测试

//短信发送测试

import java.io.UnsupportedEncodingException;

import org.apache.commons.codec.binary.Base64;
import com.huazi.projects.entity.SubmitReq;
    public class SmsSend {
    private static String apId="*****";//用户名
    private static String secretKey="*****";//用户密码
    private static String ecName = "*****";//集团名称(分组)
    private static String sign = "*****";//签名编码
    private static String addSerial = "";//拓展码
    public static String url = "http://112.35.1.155:1992/sms/tmpsubmit";//请求url 该接口为模板短信 //http://112.35.1.155:1992/sms/norsubmit  //普通短信接口

    public static void main(String[] args) {
    
        //String[] param = {"*****","****"};//模板相关的变量参数
        String mobiles = "*******";//手机号,多个手机号用英文的 , 隔开
        
        String templateId = "*****"," ;   //模板ID
        SmsSend.smsSend(templateId , param, mobiles);
    }

 

    //模板信息
    public static String smsSend(String templateId, String[] param,String mobiles) {
        String params = null;
        if(param != null){
            params = JsonUtil.object2json(param);
        }else{
            params = "[]";
        }
        SubmitReq submitReq = new SubmitReq();
        submitReq.setApId(apId);
        submitReq.setEcName(ecName);
        submitReq.setSecretKey(secretKey);
        submitReq.setParams(params);
        submitReq.setMobiles(mobiles);
        submitReq.setSign(sign);
        submitReq.setAddSerial(addSerial);
        submitReq.setTemplateId(templateId);
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(submitReq.getEcName());
        stringBuffer.append(submitReq.getApId());
        stringBuffer.append(submitReq.getSecretKey());
        stringBuffer.append(submitReq.getTemplateId());
        stringBuffer.append(submitReq.getMobiles());
        stringBuffer.append(submitReq.getParams());
        stringBuffer.append(submitReq.getSign());
        stringBuffer.append(submitReq.getAddSerial());
        String encode = "";
        try {
        
            //接口要求参数为MD5加密后的值
            submitReq.setMac(Md5Util.MD5(stringBuffer.toString()));
            String reqText = JsonUtil.object2json(submitReq);
            
            //
            encode =new String(Base64.encodeBase64Chunked(reqText.getBytes("UTF-8")));  //有中文时使用UTF-8 
        } catch (UnsupportedEncodingException e1) {
            
            e1.printStackTrace();
        }
        
        String resStr = "";
        try {
            resStr = new String(HttpUtil.post(HttpUtil.ContentType_JSON_UTF8,url,encode.getBytes()));//http链接
        } catch (Exception e) {
            
            e.printStackTrace();
        }
        return resStr;
    }

    //普通信息
    public static String norsubmit(String url ,String content ,String mobiles){
        SubmitReq submitReq = new SubmitReq();
        submitReq.setApId(apId);
        submitReq.setEcName(ecName);
        submitReq.setSecretKey(secretKey);
        submitReq.setContent(content);//短信内容
        submitReq.setMobiles(mobiles);
        submitReq.setSign(sign);
        submitReq.setAddSerial(addSerial);
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(submitReq.getEcName());
        stringBuffer.append(submitReq.getApId());
        stringBuffer.append(submitReq.getSecretKey());
        stringBuffer.append(submitReq.getMobiles());
        stringBuffer.append(submitReq.getContent());
        stringBuffer.append(submitReq.getSign());
        stringBuffer.append(submitReq.getAddSerial());
        String encode = "";
        String resStr = "";
        try {
            submitReq.setMac(Md5Util.MD5(stringBuffer.toString()));
            String reqText = JsonUtil.object2json(submitReq);
            encode =new String(Base64.encodeBase64Chunked(reqText.getBytes("UTF-8")));
            resStr = new String(HttpUtil.post(HttpUtil.ContentType_JSON_UTF8,url,encode.getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return resStr;
    }
}

//httpUtil工具类

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Authenticator;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.HttpURLConnection;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.util.Map;
import java.util.Map.Entry;

public class HttpUtil {

    public static final String ContentType_BIN = "application/octet-stream";
    public static final String ContentType_FORM = "application/x-www-form-urlencoded";
    public static final String ContentType_XML_UTF8 = "text/plaint; charset=utf-8";
    public static final String ContentType_JSON_UTF8 = "application/json; charset=utf-8";
    public static final String ContentType_HTML = "text/html";
    public static final String ContentType_TXT = "text/plain";

    public static byte[] post(String contentType, String url, byte[] content) throws IOException {
        return doRequest(contentType, "POST", url, content, null);
    }
    
    public static byte[] get(String contentType, String url) throws IOException {
        return doRequest(contentType, "GET", url, null, null);
    }
    
    public static byte[] doRequest(String contentType, String method, String url, byte[] content, Map<String, String> headers) throws IOException {
        URL u = null;
        HttpURLConnection conn = null;
        
        //尝试发送请求
        try {
            u = new URL(url);
            conn = (HttpURLConnection) u.openConnection();
            conn.setRequestMethod(method);
            conn.setRequestProperty("Content-Type", contentType);
            if (headers != null && ! headers.isEmpty()) {
                for(Entry<String, String> item: headers.entrySet()){
                    conn.setRequestProperty(item.getKey(), item.getValue());
                }
            }
            
            conn.setConnectTimeout(60000); //1 min
            conn.setReadTimeout(600000);    //10 min
            conn.setUseCaches(false);
            if (content != null && content.length >0) {
                conn.setDoOutput(true);
                java.io.OutputStream paramOut = conn.getOutputStream();
                paramOut.write(content);
                paramOut.flush();
                paramOut.close();
            }
            
            ByteArrayOutputStream out = new ByteArrayOutputStream(102400);
            InputStream buffIn = new java.io.BufferedInputStream(conn.getInputStream());
            int buffsize = 8192;
            int bytesRead = 0;
            byte[] buffer = new byte[buffsize];
            while ((bytesRead = buffIn.read(buffer, 0, buffsize)) != -1) 
            out.write(buffer, 0, bytesRead);
            out.flush();
            buffer = null;
            return out.toByteArray();
        } finally {
            if (conn != null) {
                conn.disconnect();
            }
        }
    }
    
    static {
        CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
    }
    
    public static void setBasicAuth(String username, String passwd){
        Authenticator.setDefault(new BasicAuthenticator(username, passwd));
    }
    
    private static class BasicAuthenticator extends Authenticator {
        String userName;
        String password;
        
        public BasicAuthenticator(String userName, String password) {
            this.userName = userName;
            this.password = password;
        }
    
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(userName, password.toCharArray());
        }
    }

}

//MD5Util工具类

package com.huazi.projects.util;

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.encodeBase64(rawHmac).toString();
    }

    /**
     * 校验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());
    }
}

 

posted @ 2018-12-29 11:39  昵称是默默呐  阅读(5505)  评论(0编辑  收藏  举报