使用云之讯API借口发送短信(Java,Json版)

来源:互联网 发布:日式风衣知乎 编辑:程序博客网 时间:2024/06/06 08:27

因为给人做的项目需要用到短信通知功能,所以在左挑右选(某度广告)下选择了云之讯的API,计费大约五分钱一条。

因为是按照官方给的API自己手敲的代码,另外刚刚接触Java,所以逻辑上比较乱,代码比较糙,也懒的整理,但是胜在简单易懂,用的包也都不用去找(官方文档的demo还得找包是真的烦,特别是对于初学者来说)

废话少说,直接上代码,注释也都在上面了,稍微看看就能看懂(我把账号的信息用*****代替了,替换上自己的就能用)另外一定得让应用上线!否则会返回404!

package wzh.Http;import sun.misc.BASE64Encoder;import java.io.*;import java.math.BigInteger;import java.net.URL;import java.net.URLConnection;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.text.SimpleDateFormat;import java.util.Date;public class messageTest {    public static String EncodeByMd5(String str) throws NoSuchAlgorithmException, UnsupportedEncodingException {        //确定计算方法        MessageDigest md5 = MessageDigest.getInstance("MD5");        //获取数据        md5.update(str.getBytes());        //根据API要求获取32位MD5加密        String newstr=new BigInteger(1, md5.digest()).toString(16);        newstr=newstr.toUpperCase();        return newstr;    }    public static String EncodeByBase64(String str) throws UnsupportedEncodingException {        BASE64Encoder base64en = new BASE64Encoder();        String newstr = base64en.encode(str.getBytes());        return newstr;    }    /**     * 向指定 URL 发送POST方法的请求     *     * @param url   发送请求的 URL     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。     * @return 所代表远程资源的响应结果     */    public static String sendPost(String url, String[] param) {        //获取时间戳        SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式        String date = df.format(new Date());// new Date()为获取当前系统时间,也可使用当前时间戳        //两组参数分别为账户ID Account Sid 跟  Auth Token        String s = "********************" + "******************" + date;        try {            s = messageTest.EncodeByMd5(s);        } catch (NoSuchAlgorithmException e) {            e.printStackTrace();        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        url = url + s;        //设置Authorization信息   ****代表Account Sid        s = "**************" + ":" + date;        try {            s=messageTest.EncodeByBase64(s);        } catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        //设置发送的数据        String sjson = "{" +                " \"templateSMS\" : {" +                "    \"appId\"       : \"****************\"," +                "    \"param\"       : "+"\""+param[0]+","+param[1]+"\""+"," +     //我的模板短信有两个变量参数                "    \"templateId\"  : \"190899\"," +                "    \"to\"          : \"15666135849\"" +                "    }" +                "}";        System.out.println(sjson);        PrintWriter out = null;        BufferedReader in = null;        String result = "";        try {            URL realUrl = new URL(url);            // 打开和URL之间的连接            URLConnection conn = realUrl.openConnection();            // 设置通用的请求属性            conn.setRequestProperty("host", "api.ucpaas.com");            conn.setRequestProperty("accept", "application/json");            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");            conn.setRequestProperty("Authorization", s);            // 发送POST请求必须设置如下两行            conn.setDoOutput(true);            conn.setDoInput(true);            // 获取URLConnection对象对应的输出流            out = new PrintWriter(conn.getOutputStream());            // 发送请求参数            out.print(sjson);            // flush输出流的缓冲            out.flush();            // 定义BufferedReader输入流来读取URL的响应            in = new BufferedReader(                    new InputStreamReader(conn.getInputStream()));            String line;            while ((line = in.readLine()) != null) {                result += line;            }        } catch (Exception e) {            System.out.println("发送 POST 请求出现异常!" + e);            e.printStackTrace();        }        //使用finally块来关闭输出流、输入流        finally {            try {                if (out != null) {                    out.close();                }                if (in != null) {                    in.close();                }            } catch (IOException ex) {                ex.printStackTrace();            }        }        return result;    }    public static void main(String[] args) {        //发送 POST 请求        String[] pa = new String[2];        pa[0]="123456";        pa[1]="工程";        //Account Sid        String sr = messageTest.sendPost("https://api.ucpaas.com/2014-06-30/Accounts/**********/Messages/templateSMS?sig=", pa);        System.out.println(sr);    }}