移動雲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());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM