java 實(shí)現(xiàn)發(fā)短信功能---騰訊云短信
前言
如今發(fā)短信功能已經(jīng)成為互聯(lián)網(wǎng)公司的標(biāo)配,本篇文章將一步步實(shí)現(xiàn)java發(fā)送短信
考察了許多提供短信服務(wù)的三方,幾乎所有都需要企業(yè)認(rèn)證才可以使用,這對(duì)于個(gè)人學(xué)習(xí)非常不方便。多方比較之后,選擇了騰訊云(此處并非做廣告),原因有兩點(diǎn):
支持微信公眾號(hào)認(rèn)證(門(mén)檻低)每月贈(zèng)送100條免費(fèi)短信(適合個(gè)人學(xué)習(xí))(這一點(diǎn)請(qǐng)礦家子弟自行忽略)
開(kāi)發(fā)環(huán)境
請(qǐng)參照: Spring Boot實(shí)現(xiàn)模塊化的幾種方法
騰訊云 ---短信
找到短信服務(wù)
開(kāi)通之后,點(diǎn)擊添加應(yīng)用
設(shè)置短信簽名(以公眾號(hào)為例),簽名類(lèi)型選擇公眾號(hào)或小程序,其余按照要求填寫(xiě)即可
簽名完成之后,創(chuàng)建短信模板
等待以上信息審核完成之后,便可以開(kāi)始使用了,騰訊短信服務(wù)需要用到SDK AppID 和App Key ,在這里:
代碼
pom.xml引入依賴(lài)
<properties> <java.version>1.8</java.version> <!-- 你的其他依賴(lài)。。。 --> <tencent.qcloudsms.version>1.0.6</tencent.qcloudsms.version> </properties> <dependencies> <!-- 你的其他依賴(lài)。。。 --> <!-- 騰訊短信 --> <dependency> <groupId>com.github.qcloudsms</groupId> <artifactId>qcloudsms</artifactId> <version>${tencent.qcloudsms.version}</version> </dependency> </dependencies>
發(fā)送短信工具類(lèi)
package com.wayne.common.utils; import com.github.qcloudsms.*; import com.github.qcloudsms.httpclient.HTTPException; import com.wayne.common.entity.CmsMessageConfig; import com.wayne.common.exception.CustomException; import com.wayne.common.form.MessageForm; import org.json.JSONException; import java.io.IOException; /** * 發(fā)送短信工具類(lèi) * @author Wayne * @date 2019/6/26 */ public class MessageUtils { /** * 按模板發(fā)送短信 支持單發(fā)和群發(fā) * @param isSingle 是否單發(fā) true: 單發(fā),false: 群發(fā) * @param form 需要發(fā)送的短信內(nèi)容及收信人手機(jī)號(hào) * @param config 短信配置 * @throws CustomException 發(fā)送失敗時(shí)捕獲的異常信息 */ public static void sendMessage(Boolean isSingle, MessageForm form, CmsMessageConfig config) throws CustomException { validateMessage(form, config); String regex = ";"; String[] params = {form.getCaptcha()}; String[] phoneNumbers = form.getMobiles().split(regex); SmsResultBase result; try { // 是否單發(fā) if (isSingle) { SmsSingleSender ssender = new SmsSingleSender(config.getAppId(), config.getAppKey()); result = ssender.sendWithParam("86", phoneNumbers[0], config.getTemplateId(), params, config.getSmsSign(), "", ""); } else { SmsMultiSender msender = new SmsMultiSender(config.getAppId(), config.getAppKey()); result = msender.sendWithParam("86", phoneNumbers, config.getTemplateId(), params, config.getSmsSign(), "", ""); } System.out.println(result); } catch (HTTPException e) { e.printStackTrace(); throw new CustomException("HTTP響應(yīng)碼錯(cuò)誤"); } catch (JSONException e) { e.printStackTrace(); throw new CustomException("json解析錯(cuò)誤"); } catch (IOException e) { e.printStackTrace(); throw new CustomException("網(wǎng)絡(luò)IO錯(cuò)誤"); } } /** * 校驗(yàn)參數(shù) */ private static void validateMessage(MessageForm messageForm, CmsMessageConfig messageConfig) throws CustomException { ValidatorUtils.validateEntity(messageForm); if (null == messageConfig) { throw new CustomException("系統(tǒng)參數(shù)異常"); } } }
CmsMessageConfig配置類(lèi)
package com.wayne.common.entity; import lombok.Data; import javax.persistence.*; @Data @Table(name = "cms_message_config") public class CmsMessageConfig { /** * 主鍵 */ @Id @Column(name = "ID") private Integer id; /** * AppID */ @Column(name = "APP_ID") private Integer appId; /** * AppKey */ @Column(name = "APP_KEY") private String appKey; /** * 短信模板ID */ @Column(name = "TEMPLATE_ID") private Integer templateId; /** * 簽名內(nèi)容 */ @Column(name = "SMS_SIGN") private String smsSign; /** * 是否刪除,0:否,1:是 */ @Column(name = "IS_DELETE") private String isDelete; /** * 狀態(tài),0:使用,1:未使用 (同一時(shí)間應(yīng)最多只有一條數(shù)據(jù)處于使用狀態(tài)) */ @Column(name = "IS_USE") private String isUse; /** * 創(chuàng)建者ID */ @Column(name = "CREATE_ADMIN_ID") private Integer createAdminId; @Column(name = "EXTEND1") private String extend1; @Column(name = "EXTEND2") private String extend2; @Column(name = "EXTEND3") private String extend3; @Column(name = "EXTEND4") private String extend4; @Column(name = "EXTEND5") private String extend5; @Column(name = "EXTEND6") private String extend6; }
Service
@Override public ResponseBean sendMessage(MessageForm messageForm) { ValidatorUtils.validateEntity(messageForm); // 獲取正在使用的短信配置: 此處為 從數(shù)據(jù)庫(kù)中查詢(xún) CmsMessageConfig messageConfig = getCurrUseMessageConfig(); try { // 發(fā)送短信 MessageUtils.sendMessage(Boolean.FALSE, messageForm, messageConfig); } catch (CustomException e) { e.printStackTrace(); return ResponseBean.createInstance(Boolean.FALSE, 401, e.getMessage()); } return ResponseBean.createInstance(); }
Controller
@PostMapping("/message/sendMessage") public ResponseBean sendMessage(MessageForm messageForm) { return messageService.sendMessage(messageForm); }
效果
一號(hào)短信模板
二號(hào)短信模板
設(shè)置短信配置信息
總結(jié)
以上所述是小編給大家介紹的java 實(shí)現(xiàn)發(fā)短信功能---騰訊云短信,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Java基礎(chǔ)類(lèi)學(xué)習(xí)之String詳解
這篇文章主要為大家詳細(xì)介紹了Java基礎(chǔ)類(lèi)中String的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下2022-12-12java web開(kāi)發(fā)之購(gòu)物車(chē)功能實(shí)現(xiàn)示例代碼
這篇文章主要介紹了java web開(kāi)發(fā)之購(gòu)物車(chē)功能實(shí)現(xiàn)示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10java 讀取網(wǎng)頁(yè)內(nèi)容的實(shí)例詳解
這篇文章主要介紹了java 讀取網(wǎng)頁(yè)內(nèi)容的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-09-09Java使用IntelliJ IDEA連接MySQL的詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Java使用IntelliJ IDEA連接MySQL的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Mybatis-Plus實(shí)現(xiàn)只更新部分字段的數(shù)據(jù)
這篇文章主要介紹了Mybatis-Plus實(shí)現(xiàn)只更新部分字段的數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06微服務(wù)搭建集成Spring Cloud Turbine詳解
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開(kāi)發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開(kāi)發(fā),最終給開(kāi)發(fā)者留出了一套簡(jiǎn)單易懂、易部署和易維護(hù)的分布式系統(tǒng)開(kāi)發(fā)工具包。下面我們來(lái)詳細(xì)了解一下吧2019-06-06詳解SpringBoot項(xiàng)目整合Vue做一個(gè)完整的用戶(hù)注冊(cè)功能
本文主要介紹了SpringBoot項(xiàng)目整合Vue做一個(gè)完整的用戶(hù)注冊(cè)功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07