天天看點

【Java】SpringBoot接入阿裡雲短信服務

1、引入maven依賴:

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.0.6</version> <!-- 注:如提示報錯,先更新基礎包版,無法解決可聯系技術支援 -->
</dependency>

<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
           

2、參數常量定義 SmsKeyConstant.java :

package com.ygxk.lws.core.sms;

/**
 * @Description 阿裡雲短信服務使用的Key的常量定義
 * @Author Li Wei Shan
 * @Date 2020-11-17 13:35
 * @Version 1.0
 **/
public class SmsKeyConstant {
    public static final String PRODUCT = "Dysmsapi";//短信API産品名稱(短信産品名固定,無需修改)
    public static final String DOMAIN = "dysmsapi.aliyuncs.com";//短信API産品域名(接口位址固定,無需修改)
    //替換成你的AK
    public static final String ACCESS_KEY_ID = "xxx";//你的accessKeyId
    public static final String ACCESS_KEY_SECRET = "xxx";//你的accessKeySecret
}
           

3、短信服務工具類 SmsService.java :

package com.ygxk.lws.core.sms;

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

/**
 * @Description 阿裡雲短信服務
 * @Author Li Wei Shan
 * @Date 2020-11-17 13:36
 * @Version 1.0
 **/
public class SmsService {
    /**
     * @Description 阿裡雲短信服務 發送短信驗證碼
     * @Author Li Wei Shan
     * @Date 2020/11/17
     * @Version 1.0
     * @return*/
    public static String sendCode(String mobile, String code, int type) throws ClientException {
        String setTemplateCode;
        //根據類型選擇短信模闆
        switch (type) {
            case 1://注冊
                setTemplateCode = "SMS_155275111";
                break;
            case 2://找回密碼
                setTemplateCode = "SMS_155275222";
                break;
            default :
                setTemplateCode = "SMS_155275333";
                break;
        }

        //設定逾時時間-可自行調整
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        //初始化ascClient,暫時不支援多region(請勿修改)
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", SmsKeyConstant.ACCESS_KEY_ID,
                SmsKeyConstant.ACCESS_KEY_SECRET);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", SmsKeyConstant.PRODUCT, SmsKeyConstant.DOMAIN);
        IAcsClient acsClient = new DefaultAcsClient(profile);

        //組裝請求對象
        SendSmsRequest request = new SendSmsRequest();
        //使用post送出
        request.setMethod(MethodType.POST);
        //必填:待發送手機号。支援以逗号分隔的形式進行批量調用,批量上限為1000個手機号碼,批量調用相對于單條調用及時性稍有延遲,驗證碼類型的短信推薦使用單條調用的方式;發送國際/港澳台消息時,接收号碼格式為國際區号+号碼,如“85200000000”
        request.setPhoneNumbers(mobile);
        //必填:短信簽名-可在短信控制台中找到
        request.setSignName("你的短信簽名");
        //必填:短信模闆-可在短信控制台中找到,發送國際/港澳台消息時,請使用國際/港澳台短信模版
        request.setTemplateCode(setTemplateCode);
        //可選:模闆中的變量替換JSON串,如模闆内容為"親愛的${name},您的驗證碼為${code}"時,此處的值為
        //友情提示:如果JSON中需要帶換行符,請參照标準的JSON協定對換行符的要求,比如短信内容中包含\r\n的情況在JSON中需要表示成\\r\\n,否則會導緻JSON在服務端解析失敗
//參考:request.setTemplateParam("{\"變量1\":\"值1\",\"變量2\":\"值2\",\"變量3\":\"值3\"}")

        //短信驗證碼
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("code",code);
        request.setTemplateParam(String.valueOf(jsonObject));
        //可選-上行短信擴充碼(擴充碼字段控制在7位或以下,無特殊需求使用者請忽略此字段)
        //request.setSmsUpExtendCode("90997");

        //可選:outId為提供給業務方擴充字段,最終在短信回執消息中将此值帶回給調用者
        request.setOutId(mobile);

//請求失敗這裡會抛ClientException異常
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        return sendSmsResponse.getCode();
    }
}