阿里雲短信接口調用


1、打開阿里雲,登錄

 

 2、登錄之后進入賬號管理界面,搜索 短信服務

 

 點擊新手引導

 

 申請好短信簽名和模板,一般需要一小時

 打開AccessKey管理

 

記下Accesskeyid 和accessSecret

 

3、需要的maven包 阿里雲及Redis

<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.6</version>
</dependency>

<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<!--redis服務-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>

4、短信工具類

public class MessageUtils {

    /**
     * 發送短信消息方法,返回驗證碼
     * @param phone 用戶手機號
     * @return true 發送成功 ;false 發送失敗
     */
    public void  sendMsg(String phone) throws Exception {

        //設置超時時間-可自行調整
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        //初始化ascClient需要的幾個參數
        final String product = "Dysmsapi";//短信API產品名稱(短信產品名固定,無需修改)
        final String domain = "dysmsapi.aliyuncs.com";//短信API產品域名(接口地址固定,無需修改)
        //替換成你的AK
        final String accessKeyId = "";//你的accessKeyId,參考本文檔步驟2
        final String accessKeySecret = "";//你的accessKeySecret,參考本文檔步驟2

        //初始化ascClient,暫時不支持多region(請勿修改)
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
                accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient = new DefaultAcsClient(profile);
        //組裝請求對象
        SendSmsRequest request = new SendSmsRequest();
        //使用post提交
        request.setMethod(MethodType.POST);
        //必填:待發送手機號。支持以逗號分隔的形式進行批量調用,批量上限為1000個手機號碼,批量調用相對於單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式
        request.setPhoneNumbers(phone);
        //必填:短信簽名-可在短信控制台中找到
        request.setSignName("");
        //必填:短信模板-可在短信控制台中找到
        request.setTemplateCode("");
        String checkCode = CoreUtils.randomString(6, true);//此處是生成6位數驗證碼工具類
        //request.setTemplateParam("{\"code\":\"123\"}");//測試用,此處json一定要嚴格按照json格式書寫
        request.setTemplateParam("{\"code\":\"" + checkCode + "\"}");
        //可選-上行短信擴展碼(擴展碼字段控制在7位或以下,無特殊需求用戶請忽略此字段)
        //request.setSmsUpExtendCode("90997");
        //可選:outId為提供給業務方擴展字段,最終在短信回執消息中將此值帶回給調用者
        //request.setOutId("yourOutId");
        //請求失敗這里會拋ClientException異常
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
            //請求成功,短信已發送
            //將手機號和生成的隨機數存入redis 並設置redis的過期時間
            RedisClientServer.set(phone, phone+checkCode, 180);
        }
    }
}

 

5、生成隨機字符串工具類

public class CoreUtils {

    /**
     * 生成隨機字符串
     *
     * @param length
     * @return
     */
    public static String randomString(int length, boolean isNumeric) {
        String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        if (isNumeric) {
            base = "0123456789";
        }

        Random random = new Random();
        StringBuffer buffer = new StringBuffer(length);
        for (int i = 0; i < length; i++) {
            buffer.append(base.charAt(random.nextInt(base.length())));
        }

        return buffer.toString();
    }




}
View Code

 

6、Redis工具類

  1 public class RedisClientServer {
  2 
  3 
  4     private  static JedisPool jedisPool = null;
  5 
  6     private  static Jedis jedis = null;
  7 
  8     public  static Jedis jedis_object = null;
  9 
 10     private static String host = "127.0.0.1";
 11     private static String password = "root";
 12     private static Integer port = 6379;
 13 
 14 
 15     static{
 16         if(jedisPool == null){
 17             JedisPoolConfig config = new JedisPoolConfig();
 18             //設置最大連接數
 19             config.setMaxTotal(500);
 20             //設置最大空閑數
 21             config.setMaxIdle(20);
 22             //設置最小空閑數
 23             config.setMinIdle(8);
 24             //設置超時時間
 25             config.setMaxWaitMillis(3000);
 26             //Idle時進行連接掃描
 27             config.setTestWhileIdle(true);
 28             //表示idle object evitor兩次掃描之間要sleep的毫秒數
 29             config.setTimeBetweenEvictionRunsMillis(30000);
 30             //表示idle object evitor每次掃描的最多的對象數
 31             config.setNumTestsPerEvictionRun(10);
 32             //表示一個對象至少停留在idle狀態的最短時間,然后才能被idle object evitor
 33             //掃描並驅逐;這一項只有在timeBetweenEvictionRunsMillis大於0時才有意義
 34             config.setMinEvictableIdleTimeMillis(60000);
 35             //初始化連接池
 36             jedisPool = new JedisPool(config, host, port);
 37             jedis_object = new   Jedis( host, port);
 38         }
 39     }
 40 
 41     private  RedisClientServer() {
 42 
 43     }
 44 
 45     private static Jedis  getJedisInstance(){
 46 
 47         try {
 48             if(null == jedis){
 49                 jedis = jedisPool.getResource();
 50                 jedis.auth(password);
 51             }
 52         } catch (Exception e) {
 53         }
 54         return jedis;
 55     }
 56 
 57     /**
 58      * 向緩存中設置字符串內容
 59      *@author liudianpeng.com
 60      *@date
 61      */
 62     public static boolean set(String key, String value) throws Exception {
 63         Jedis jedis = null;
 64         try {
 65             jedis = getJedisInstance();
 66             jedis.set(key, value);
 67             return true;
 68         } catch (Exception e) {
 69         } finally {
 70             jedisPool.close();
 71         }
 72         return false;
 73     }
 74 
 75     /**
 76      * 向緩存中設置字符串內容 ,設置過期時間
 77      *@author liudianpeng.com
 78      *@date
 79      */
 80     public static boolean set(String key, String value,Integer seconds) throws Exception {
 81         Jedis jedis = null;
 82         try {
 83             jedis = getJedisInstance();
 84             jedis.set(key, value);
 85             jedis.expire(key, seconds);
 86             return true;
 87         } catch (Exception e) {
 88         } finally {
 89             jedisPool.close();
 90         }
 91         return false;
 92     }
 93 
 94     /**
 95      * 根據key 獲取內容
 96      *@author liudianpeng.com
 97      *@date
 98      */
 99     public static Object get(String key) {
100         Jedis jedis = null;
101         try {
102             jedis = getJedisInstance();
103             Object value = jedis.get(key);
104             return value;
105         } catch (Exception e) {
106         } finally {
107             jedisPool.close();
108         }
109         return null;
110     }
111 
112     /**
113      * 刪除緩存中得對象,根據key
114      *@author liudianpeng.com
115      *@date
116      */
117     public static boolean del(String key) {
118         Jedis jedis = null;
119         try {
120             jedis = getJedisInstance();
121             jedis.del(key);
122             return true;
123         } catch (Exception e) {
124             e.printStackTrace();
125         } finally {
126             jedisPool.close();
127         }
128         return false;
129     }
130 
131 
132     public static <T> T parseObject(String text, Class<T> clazz) {
133         return parseObject(text, clazz);
134     }
135 
136     /**
137      * 根據key 獲取對象
138      *@author liudianpeng.com
139      *@date
140      */
141     public static <T> T get(String key, Class<T> clazz) {
142         Jedis jedis = null;
143         try {
144             jedis = getJedisInstance();
145             String value = jedis.get(key);
146             return parseObject(value, clazz);
147         } catch (Exception e) {
148             e.printStackTrace();
149         } finally {
150             jedisPool.close();
151         }
152         return null;
153     }
154 
155     /**
156      *  設置key過期
157      *@author
158      *@date
159      */
160     public  static   boolean  expire(String key,int seconds){
161         Jedis jedis = null;
162         try {
163             jedis = getJedisInstance();
164             jedis.expire(key, seconds);
165             return  true;
166         } catch (Exception e) {
167             e.printStackTrace();
168         } finally {
169             jedisPool.close();
170         }
171         return false;
172     }
173 
174     /**
175      * 判斷是否存在key
176      *@author
177      *@date
178      */
179     public static Boolean exists(String key){
180         Jedis jedis = null;
181         try {
182             jedis = getJedisInstance();
183             return jedis.exists(key);
184         } catch (Exception e) {
185             e.printStackTrace();
186             return false;
187         }finally {
188             jedisPool.close();
189         }
190     }
191 
192 }
View Code

 

7、

 


免責聲明!

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



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