雲mas發送短信使用http方式

1.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;
    }
 
}
 

2.發送短信請求實體

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()方法
}

3.發送短信響應實體

public class SendRes {
    private String rspcod;	//響應狀態碼
    private String msgGroup;	//消息批次號,由雲MAS平臺生成,用於驗證短信提交報告和狀態報告的一致性(取值msgGroup)注:如果數據驗證不通過msgGroup爲空
    private boolean success;	//數據校驗結果
 
    //get()和set()方法
}

4.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());
    }
}
 

5.簽名下載:導出全部用戶的簽名數據

6.配置好後對應的用戶名,企業號,簽名等可直接調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章