亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

短信發(fā)送”功能在企業(yè)應用系統(tǒng)開發(fā)中應該說算是很常見的了,典型的案例 如 “用戶登錄時可以通過手機號接收平臺發(fā)送的驗證碼進行登錄”、“用戶通過手機號接收平臺發(fā)送的短信驗證碼從而找回密碼”、“雙重驗證用戶身份時需要用手機號接收平臺發(fā)送的驗證碼已確認用戶身份”等等都是比較常見的,本文將基于阿里云SMS短信發(fā)送服務 在JAVA Spring Boot應用系統(tǒng)實現(xiàn)短信發(fā)送功能

移動互聯(lián)網(wǎng)時代,幾乎人人都有部智能手機,每天的收、發(fā)短信操作想必已成常態(tài),在使用各種App或者網(wǎng)站應用系統(tǒng)時相比也應該經(jīng)常都能有所見聞;而作為一名Java開發(fā)者,不知諸位在實際項目、實際應用系統(tǒng)中是否有真正地實現(xiàn)過短信發(fā)送以及對短信驗證碼進行驗證的功能?今天debug將帶大家一起實戰(zhàn)落地該功能!

順帶提下,我們將基于Spring Boot2.x進行代碼實戰(zhàn),別問為什么哈!作為一名Java開發(fā)者,如果都不知道Spring Boot,debug都不知道該怎么說你了!另外,我們將基于阿里云SMS短信發(fā)送服務功能,其官網(wǎng)如下所示:https://www.aliyun.com/product/sms,可以點擊購買或者免費開通,如果人品好的話,估計還真的可以免費開通(免費試用幾條);

干貨實戰(zhàn)-Spring Boot實現(xiàn)阿里云SMS短信發(fā)送功能

 

在這里,debug就假設諸位已經(jīng)成功開通了阿里云SMS短信發(fā)送服務了哈(如果沒有開通成功也沒關系,收藏下文章吧,以后總有用得著的),OK,話不多說,咱們直接開干!

(1)首先,需要加入阿里云短信SMS服務的SDK,即對于我們Java后端而言,其實就是一個Jar包,如下所示:

<!--阿里云短信服務-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.0</version>
</dependency>

(2)緊接著是進入阿里云短信服務管理控制臺,獲取AccessKey ID 、AccessKey Secret并創(chuàng)建“短信簽名”以及“短信發(fā)送模板”,如下圖所示:

干貨實戰(zhàn)-Spring Boot實現(xiàn)阿里云SMS短信發(fā)送功能

 


干貨實戰(zhàn)-Spring Boot實現(xiàn)阿里云SMS短信發(fā)送功能

 

拿到這些信息之后,接下來需要將這些信息項配置起來,如下所示:

#阿里云sms配置
ali.sms.accessKeyId=這里是你的AccessKey ID
ali.sms.accessSecret=這里是你的AccessKey Secret
ali.sms.regionId=cn-hangzhou
ali.sms.sysDomain=dysmsapi.aliyuncs.com
ali.sms.sysVersion=2017-05-25
ali.sms.sysAction=SendSms
ali.sms.enabled=true


ali.sms.phone.sendCode.bu=申請的短信簽名
ali.sms.phone.sendCode.temp=申請的短信模板編碼
ali.sms.phone.sendCode.msg=備注信息

之后便可以基于SpringBoot自動注入配置的功能特性將以上配置項加入到一個實體類中,以方便后續(xù)開發(fā)實際業(yè)務代碼時使用,其定義如下所示:

@Configuration
@ConfigurationProperties(prefix = "ali.sms")
@Data
public class AliSmsProperty {
    private String accessKeyId;


    private String accessSecret;


    private String regionId;


    private String sysDomain;


    private String sysVersion;


    private String sysAction;


    private Boolean enabled;
}

(3)緊接著,開發(fā)調(diào)用阿里云短信服務SMS的SDK提供的發(fā)送短信功能 的代碼,如下所示:

@Service
public class AliSmsService {
    private static final Logger log= LoggerFactory.getLogger(AliSmsService.class);


    private static final String Channel="aliyun";


    @Autowired
    private AliSmsProperty aliSmsProperty;


    @Autowired
    private ObjectMapper objectMapper;


    //發(fā)送通用消息
    public void sendMsg(AliSmsRequest smsRequest,final Long sendId) throws Exception{
        if (!aliSmsProperty.getEnabled()){
            return;
        }


        //參數(shù)校驗


        //短信配置初始化
        DefaultProfile profile=DefaultProfile.getProfile(aliSmsProperty.getRegionId(),aliSmsProperty.getAccessKeyId(),aliSmsProperty.getAccessSecret());
        IAcsClient client=new DefaultAcsClient(profile);
        //構造短信發(fā)送請求
        CommonRequest request=new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(aliSmsProperty.getSysDomain());
        request.setSysVersion(aliSmsProperty.getSysVersion());
        request.setSysAction(aliSmsProperty.getSysAction());


        request.putQueryParameter("RegionId", aliSmsProperty.getRegionId());
        request.putQueryParameter("PhoneNumbers", smsRequest.getPhoneNumbers());
        request.putQueryParameter("SignName", smsRequest.getSignName());
        request.putQueryParameter("TemplateCode", smsRequest.getTemplateCode());
        request.putQueryParameter("TemplateParam", smsRequest.getTemplateParam());


        request.putQueryParameter("SmsUpExtendCode", RandomStringUtils.randomNumeric(4));
        request.putQueryParameter("OutId", smsRequest.getTemplateCode()+"_"+RandomStringUtils.randomAlphanumeric(8));


        //發(fā)送短信
        CommonResponse response = client.getCommonResponse(request);
        log.info("--阿里云短信發(fā)送結果:{},{},{}----",response.getHttpStatus(),response.getHttpResponse(),response.getData());


        if (response!=null && StringUtils.isNotBlank(response.getData())){
            AliSmsResponse smsResponse=objectMapper.readValue(response.getData(),AliSmsResponse.class);
            if (smsResponse!=null && "OK".equals(smsResponse.getCode())){
                //創(chuàng)建一條短信發(fā)送成功的記錄(記錄到數(shù)據(jù)庫DB,以用于后續(xù)的驗證碼驗證)
                
            }else{
                //創(chuàng)建一條短信發(fā)送失敗的記錄
            }
        }
    }
}

其中,AliSmsRequest為開放給客戶端調(diào)用的參數(shù),其定義如下所示:

@Data
public class AliSmsRequest implements Serializable{
    //要接受短信的手機號
    private String phoneNumbers;


    //申請的短信簽名
    private String signName;


    //申請的模板編碼
    private String templateCode;


    //短信發(fā)送參數(shù)-json格式的字符串,如{"code":123456}
    private String templateParam;


    //短信發(fā)送上行編碼-按照官方建議的填就行
    private String smsUpExtendCode;
    //序列id-按照官方建議的填就行
    private String outId;


    public AliSmsRequest(String phoneNumbers, String signName, String templateCode, String templateParam) {
        this.phoneNumbers = phoneNumbers;
        this.signName = signName;
        this.templateCode = templateCode;
        this.templateParam = templateParam;
    }


    public AliSmsRequest() {
    }
}

至此,我們已經(jīng)將發(fā)送短信的核心代碼擼完了,其中傳遞給服務端的參數(shù)的格式為(以發(fā)送短信驗證碼為例):

{
    "phoneNumbers":"15812490898",
    "signName":"申請的短信簽名",
    "tempCode":"申請的短信模板編碼",
    "templateParam":"{"code":"708946"}",
    "smsUpExtendCode":"12345678",
    "outId":"12345678"      
}

如果過程沒有報錯,不出5秒應該會收到一條短信,如下圖所示:

干貨實戰(zhàn)-Spring Boot實現(xiàn)阿里云SMS短信發(fā)送功能

 

OK,打完收工,咱們下期再見!

分享到:
標簽:短信 SMS
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定