亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Java第三方實現發送短信功能

發布時間:2023-03-24 16:12:36 來源:億速云 閱讀:125 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“怎么使用Java第三方實現發送短信功能”,內容詳細,步驟清晰,細節處理妥當,希望這篇“怎么使用Java第三方實現發送短信功能”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    一、介紹

    在項目開發中,短信發送功能在很多地方都用得到,例如:通知短信、驗證碼、營銷短信、推廣短信等等,近期阿里云等云服務商的短信服務針對個人用戶不友好(需求企業資質),現在給大家介紹一款的產品:樂訊通,針對個人用戶較為友好,可以很便捷的進行開發測試。

    二、使用步驟

    1. 平臺注冊

    使用手機號注冊即可。

    注意:注冊成功后,默認密碼就是手機號。
    可在 “系統管理”->"密碼管理"中進行密碼的修改 。

    2. 短信簽名和短信模板

    平時比較常見的驗證碼短信格式為:【碼賽客1024】:注冊驗證碼為312562,請勿泄露給他人。
    前面括號中的就是短信簽名,后邊部分就是短信模板,因此可以分析出格式為:【短信簽名】:短信模板。

    2.1 設置簽名
    文字短信 -> 短信設置 -> 簽名管理 -> 添加新的簽名
    2.2 設置模板
    文字短信 -> 短信設置 -> 簽名管理 -> 添加新的模板
    模板設置需要注意的是,模板中使用{}作為占位符,例如:
    【短信簽名】:注冊驗證碼為{s6},請勿泄露給他人。
    其中的{s6}會被替換為驗證碼,而6指的是字符最大長度,超過則無法發送。

    3. 基于官方API文檔實現短信發送

    3.1 官方demo

    API文檔 -> 開發引導 -> 代碼示例 -> Java ,代碼如下

    package com.ljs;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.Console;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.lang.reflect.MalformedParameterizedTypeException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.security.MessageDigest;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Calendar;
    import java.util.Collection;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.ListIterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.TreeMap;
    
    import javax.lang.model.element.VariableElement;
    import javax.management.monitor.MonitorSettingException;
    import javax.print.attribute.standard.DateTimeAtCompleted;
    
    import org.junit.Test;
    
    public class MyTest {
        public static void main(String[] args) throws ParseException {
        	//時間戳
            long timestamp = System.currentTimeMillis();
            System.out.println(timestamp);
            //url
            String url = "http://www.lokapi.cn/smsUTF8.aspx"; 
            //簽名,在發送時使用md5加密
            String beforSign = "action=sendtemplate&username=18586975869&password="+getMD5String("18586975869")+"&token=389c1a49&timestamp="+timestamp;
            //參數串
            String postData = "action=sendtemplate&username=18586975869&password="+getMD5String("18586975869")+"&token=389c1a49&templateid=CF2D56FC&param=18586975869|666666&rece=json&timestamp="+timestamp+"&sign="+getMD5String(beforSign);
            //調用其提供的發送短信方法
            String result = sendPost(url,postData); 
            System.out.println(result);
        }  
        //發送短信的方法
        public static String sendPost(String url, String param) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打開和URL之間的連接
                URLConnection conn = realUrl.openConnection();
                // 設置通用的請求屬性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent",
                        "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 發送POST請求必須設置如下兩行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 獲取URLConnection對象對應的輸出流
                out = new PrintWriter(conn.getOutputStream());
                // 發送請求參數
                out.print(param);
                // 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;
        }  
        //用來計算MD5的函數  
        public static String getMD5String(String rawString){    
            String[] hexArray = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
            try{
                MessageDigest md = MessageDigest.getInstance("MD5");
                md.update(rawString.getBytes());
                byte[] rawBit = md.digest();
                String outputMD5 = " ";
                for(int i = 0; i<16; i++){
                    outputMD5 = outputMD5+hexArray[rawBit[i]>>>4& 0x0f];
                    outputMD5 = outputMD5+hexArray[rawBit[i]& 0x0f];
                }
                return outputMD5.trim();
            }catch(Exception e){
                System.out.println("計算MD5值發生錯誤");
                e.printStackTrace();
            }
            return null;
        }
        /**
         * 生成秘鑰
         * 
         * @param tm
         * @param key
         * @return
         */
        public static String createSign(TreeMap<String, String> tm, String key) {
            StringBuffer buf = new StringBuffer(key);
            for (Map.Entry<String, String> en : tm.entrySet()) {
                String name = en.getKey();
                String value = en.getValue();
                if (!"sign".equals(name) && !"param".equals(name) && value != null && value.length() > 0 && !"null".equals(value)) {
                    buf.append(name).append('=').append(value).append('&');
                }
            }
            String _buf = buf.toString();
            return _buf.substring(0, _buf.length() - 1);
        }
    
        /**
          * 將文件轉成base64 字符串
          * @param path文件路徑
          * @return  * 
          * @throws Exception
          */
         public static String encodeBase64File(String path) throws Exception {
              File file = new File(path);;
              FileInputStream inputFile = new FileInputStream(file);
              byte[] buffer = new byte[(int) file.length()];
              inputFile.read(buffer);
              inputFile.close();
              //return new BASE64Encoder().encode(buffer);
    		  return "";
         }
    }
    3.2 文字短信-模板發送

    1.請求地址,UTF8編碼請求地址:http://www.lokapi.cn/smsUTF8.aspx
    2.請求協議:http
    3.請求方式:采用post方式提交請求
    4.請求報文:action=sendtemplate&username=zhangsan&password=E10ADC3949BA59ABBE56E057F20F883E&token=894gbhy&templateid=638fgths&param=手機號1|參數1|參數2@手機號2|參數1|參數2&rece=json&timestamp=636949832321055780&sign=96E79218965EB72C92A54
    5.參數說明

    參數名稱 是否必須 描述示例
    action操作類型(固定值)action=sendtemplate
    username賬戶名username=zhangsan
    password賬戶密碼,密碼必須MD5加密并且取32位大寫password=E10ADC3949BA59ABBE56E057F20F883E
    token產品總覽頁面對應產品的Tokentoken=894gbhy
    templateid 模板管理報備的模板IDtemplateid=638fgths
    param 發送參數,可發送一個或多個手機號,建議單次提交最多5000個號碼17712345678|張三|2541@13825254141|李四|2536
    dstime設置要發送短信的時間,精確到秒(yyyy-MM-dd HH:mm:ss)2017-01-05 16:23:23
    rece 否 返回類型json、xml,默認(json)rece=json
    timestamp 時間戳,13位時間戳,單位(毫秒)timestamp=636949832321055780
    sign簽名校驗sign=96E79218965EB72C92A54

    param參數詳細說明

    發送一個手機號模板為【手機號1|參數1|參數2】
    發送多個手機號模板為【手機號1|參數1|參數2@手機號2|參數3|參數4@&hellip;】
    第一列必須為手機號,參數1,參數2對應短信模板里的參數順序,英文豎線隔開, 比如短信模板為【簽名】您好,{s6},您的驗證碼是:{s6},參數1就對應您好后邊的{s6},參數2對應驗證碼是后邊的{s6}, 多個手機號以@隔開。

    若模板內沒有參數則只輸入手機號即可。

    sign參數詳細說明

    簽名由參數action,username,password,token,timestamp進行MD5加密組成
    比如這些值拼接后為action=sendtemplate&username=zhangsan&password=E10ADC3949BA59ABBE56E057F20F883E&token=588aaaaa&timestamp=636949832321055780,那么就MD5加密這個參數字符串得到結果后作為sign的值sign=96E79218965EB72C92A54

    基于官方java代碼和參數說明,替換自己的值,即可實現發送。

    6.返回結果

    //成功返回
    {
        "returnstatus":"success",
        "code":"0",
        "taskID":[
            {
                "tel_17712345678":"15913494519502337"
            }
        ]
    }
    //失敗返回
    {
        "returnstatus":"error",
        "code":"-51",
        "remark":"訪問超時!"
    }

    三、封裝發送短信工具類

    1.添加 fastjson 的依賴,用于把返回結果轉為對象,方便處理。

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.75</version>
    </dependency>

    2.工具類如下

    public class SendSMSUtil {
        /**
         * 封裝的發驗證碼的方法
         * @param account 平臺賬戶
         * @param password 平臺密碼
         * @param token 平臺token
         * @param templateid 短信模板id
         * @param phone 短信接收方手機號
         * @param code  驗證碼
         * @return
         */
        public static MsgResult sendMsgPost(String account,String password,String token,String templateid,String phone,String code){
            //時間戳
            long timestamp = System.currentTimeMillis();
            //System.out.println(timestamp);
            //url
            String url = "http://www.lokapi.cn/smsUTF8.aspx";
            //簽名
            String beforSign = "action=sendtemplate&username="+account+"&password="+getMD5String(password)+"&token="+token+"&timestamp="+timestamp;
            //參數串
            String postData = "action=sendtemplate&username="+account+"&password="+getMD5String(password)+"&token="+token+"&templateid="+templateid+"&param="+phone+"|"+code+"&rece=json&timestamp="+timestamp+"&sign="+getMD5String(beforSign);
            //發送請求
            String result = sendPost(url,postData);
            //將json結果轉為對象,方便判斷
            MsgResult msgResult = JSON.parseObject(result, MsgResult.class);
            return msgResult;
        }
        //原本的發送方法
        public static String sendPost(String url, String param) {
            PrintWriter out = null;
            BufferedReader in = null;
            String result = "";
            try {
                URL realUrl = new URL(url);
                // 打開和URL之間的連接
                URLConnection conn = realUrl.openConnection();
                // 設置通用的請求屬性
                conn.setRequestProperty("accept", "*/*");
                conn.setRequestProperty("connection", "Keep-Alive");
                conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 發送POST請求必須設置如下兩行
                conn.setDoOutput(true);
                conn.setDoInput(true);
                // 獲取URLConnection對象對應的輸出流
                out = new PrintWriter(conn.getOutputStream());
                // 發送請求參數
                out.print(param);
                // 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;
        }
    
        //用來計算MD5的函數
        public static String getMD5String(String rawString){
            String[] hexArray = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
            try{
                MessageDigest md = MessageDigest.getInstance("MD5");
                md.update(rawString.getBytes());
                byte[] rawBit = md.digest();
                String outputMD5 = " ";
                for(int i = 0; i<16; i++){
                    outputMD5 = outputMD5+hexArray[rawBit[i]>>>4& 0x0f];
                    outputMD5 = outputMD5+hexArray[rawBit[i]& 0x0f];
                }
                return outputMD5.trim();
            }catch(Exception e){
                System.out.println("計算MD5值發生錯誤");
                e.printStackTrace();
            }
            return null;
        }
    }

    用于接收返回值的對象

    public class MsgResult{
        //返回描述
        private String returnstatus;
        //返回狀態碼
        private Integer code;
        //錯誤消息
        private String remark;
    
        public String getReturnstatus() {
            return returnstatus;
        }
    
        public void setReturnstatus(String returnstatus) {
            this.returnstatus = returnstatus;
        }
    
        public Integer getCode() {
            return code;
        }
    
        public void setCode(Integer code) {
            this.code = code;
        }
    
        public String getRemark() {
            return remark;
        }
    
        public void setRemark(String remark) {
            this.remark = remark;
        }
    
        @Override
        public String toString() {
            return "MsgResult{" +
                    "returnstatus='" + returnstatus + '\'' +
                    ", code=" + code +
                    ", remark='" + remark + '\'' +
                    '}';
        }
    }

    3.調用測試

    public class SendSMSTest {
        public static void main(String[] args) throws ParseException {
        	//使用工具類發送短信,返回封裝的對象
            MsgResult msgResult = SendSMSUtil.sendMsgPost("平臺賬號","平臺密碼","token","短信模板id","接受方手機號","驗證碼");
            //進行判斷
            if("success".equals(msgResult.getReturnstatus()) && msgResult.getCode()==0){
                System.out.println("發送成功");
            }else{
                System.out.println("發送失敗,原因是:"+msgResult.getRemark());
            }
        }
    }

    讀到這里,這篇“怎么使用Java第三方實現發送短信功能”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    松桃| 丹凤县| 南丰县| 林周县| 巴塘县| 茂名市| 朝阳县| 石城县| 太谷县| 石棉县| 四子王旗| 旺苍县| 东乌珠穆沁旗| 吴忠市| 新沂市| 长顺县| 元氏县| 新昌县| 鄢陵县| 东城区| 桦甸市| 桐柏县| 昭觉县| 万州区| 鄄城县| 肥城市| 寻乌县| 阿荣旗| 乌鲁木齐县| 临潭县| 常德市| 固镇县| 托里县| 奉化市| 莎车县| 象州县| 额尔古纳市| 深泽县| 彭泽县| 滦平县| 芦溪县|