最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 實現(xiàn)發(fā)短信功能---騰訊云短信

 更新時間:2019年08月12日 10:03:38   作者:L_Wayne  
如今發(fā)短信功能已經(jīng)成為互聯(lián)網(wǎng)公司的標(biāo)配,接下來通過本文給大家介紹java 實現(xiàn)發(fā)短信功能---騰訊云短信 ,需要的朋友可以參考下

前言

如今發(fā)短信功能已經(jīng)成為互聯(lián)網(wǎng)公司的標(biāo)配,本篇文章將一步步實現(xiàn)java發(fā)送短信

考察了許多提供短信服務(wù)的三方,幾乎所有都需要企業(yè)認(rèn)證才可以使用,這對于個人學(xué)習(xí)非常不方便。多方比較之后,選擇了騰訊云(此處并非做廣告),原因有兩點:

支持微信公眾號認(rèn)證(門檻低)每月贈送100條免費短信(適合個人學(xué)習(xí))(這一點請礦家子弟自行忽略)

開發(fā)環(huán)境

請參照: Spring Boot實現(xiàn)模塊化的幾種方法

騰訊云 ---短信

找到短信服務(wù)

開通之后,點擊添加應(yīng)用

設(shè)置短信簽名(以公眾號為例),簽名類型選擇公眾號或小程序,其余按照要求填寫即可

簽名完成之后,創(chuàng)建短信模板

等待以上信息審核完成之后,便可以開始使用了,騰訊短信服務(wù)需要用到SDK AppID 和App Key ,在這里:

代碼

pom.xml引入依賴

<properties>
 <java.version>1.8</java.version>
 <!-- 你的其他依賴。。。 -->
 <tencent.qcloudsms.version>1.0.6</tencent.qcloudsms.version>
</properties>

<dependencies>
 <!-- 你的其他依賴。。。 -->
 <!-- 騰訊短信 -->
 <dependency>
 <groupId>com.github.qcloudsms</groupId>
 <artifactId>qcloudsms</artifactId>
 <version>${tencent.qcloudsms.version}</version>
 </dependency>
</dependencies>

發(fā)送短信工具類

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ā)送短信工具類
 * @author Wayne
 * @date 2019/6/26
 */
public class MessageUtils {
 /**
 * 按模板發(fā)送短信 支持單發(fā)和群發(fā)
 * @param isSingle 是否單發(fā) true: 單發(fā),false: 群發(fā)
 * @param form 需要發(fā)送的短信內(nèi)容及收信人手機號
 * @param config 短信配置
 * @throws CustomException 發(fā)送失敗時捕獲的異常信息
 */
 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)碼錯誤");
 } catch (JSONException e) {
  e.printStackTrace();
  throw new CustomException("json解析錯誤");
 } catch (IOException e) {
  e.printStackTrace();
  throw new CustomException("網(wǎng)絡(luò)IO錯誤");
 }
 }
 /**
 * 校驗參數(shù)
 */
 private static void validateMessage(MessageForm messageForm, CmsMessageConfig messageConfig) throws CustomException {
 ValidatorUtils.validateEntity(messageForm);
 if (null == messageConfig) {
  throw new CustomException("系統(tǒng)參數(shù)異常");
 }
 }
}

CmsMessageConfig配置類

 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:未使用 (同一時間應(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ù)庫中查詢
 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);
 }

效果

一號短信模板

二號短信模板

設(shè)置短信配置信息

總結(jié)

以上所述是小編給大家介紹的java 實現(xiàn)發(fā)短信功能---騰訊云短信,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Java十道入門易踩坑題分析前篇

    Java十道入門易踩坑題分析前篇

    這篇文章總結(jié)分析了Java入門容易碰到的幾點易進(jìn)坑的題目,對于新手小白剛開始學(xué)Java非常有益處,讓你少走避開彎路,感興趣的朋友快來看看吧
    2022-01-01
  • java中實現(xiàn)對象排序的兩種方法(Comparable,Comparator)

    java中實現(xiàn)對象排序的兩種方法(Comparable,Comparator)

    這篇文章主要給大家介紹了關(guān)于java中實現(xiàn)對象排序的兩種方法,一種是實現(xiàn)Comparable進(jìn)行排序,另一種是實現(xiàn)Comparator進(jìn)行排序,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解

    這篇文章主要介紹了JUC三大輔助類CountDownLatch、CyclicBarrier和Semaphore詳解,CountDownLatch 類可以設(shè)置一個計數(shù)器,然后通過 countDown 方法來進(jìn)行 減 1 的操作,使用 await 方法等待計數(shù)器不大于 0,然后繼續(xù)執(zhí)行 await 方法 之后的語句,需要的朋友可以參考下
    2024-01-01
  • java內(nèi)存異常使用導(dǎo)致full?gc頻繁

    java內(nèi)存異常使用導(dǎo)致full?gc頻繁

    Full?GC是Java虛擬機中垃圾回收的一種方式,它會暫停應(yīng)用程序所有的線程并清理整個堆內(nèi)存。頻繁的Full?GC會導(dǎo)致應(yīng)用程序的性能下降,甚至出現(xiàn)長時間的停頓。Java內(nèi)存異常使用常常是Full?GC頻繁出現(xiàn)的原因之一,如使用大量的靜態(tài)變量、內(nèi)存泄漏等。
    2023-04-04
  • Java 深入探究講解工廠方法模式

    Java 深入探究講解工廠方法模式

    工廠方法模式(FACTORY METHOD)是一種常用的類創(chuàng)建型設(shè)計模式,此模式的核心精神是封裝類中變化的部分,提取其中個性化善變的部分為獨立類,通過依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的。它的核心結(jié)構(gòu)有四個角色,分別是抽象工廠、具體工廠、抽象產(chǎn)品、具體產(chǎn)品
    2022-04-04
  • Java+opencv3.2.0實現(xiàn)輪廓檢測

    Java+opencv3.2.0實現(xiàn)輪廓檢測

    這篇文章主要為大家詳細(xì)介紹了Java+opencv3.2.0實現(xiàn)輪廓檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    k8s部署的java服務(wù)添加idea調(diào)試參數(shù)的方法

    文章介紹了如何在K8S容器中的Java服務(wù)上進(jìn)行遠(yuǎn)程調(diào)試,包括配置Deployment、Service以及本地IDEA的調(diào)試設(shè)置,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • spring中的特殊注解@RequiredArgsConstructor詳解

    spring中的特殊注解@RequiredArgsConstructor詳解

    這篇文章主要介紹了spring中的特殊注解@RequiredArgsConstructor,包括注解注入,構(gòu)造器注入及setter注入,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • 淺析EasyExcel如何導(dǎo)出自動回顯中文

    淺析EasyExcel如何導(dǎo)出自動回顯中文

    這篇文章主要為大家詳細(xì)介紹了EasyExcel如何通過全局轉(zhuǎn)換器和自定義注解實現(xiàn)導(dǎo)出自動回顯中文,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • springboot如何通過controller層實現(xiàn)頁面切換

    springboot如何通過controller層實現(xiàn)頁面切換

    在Spring Boot中,通過Controller層實現(xiàn)頁面切換背景,Spring Boot的默認(rèn)注解是@RestController,它包含了@Controller和@ResponseBody,@ResponseBody會將返回值轉(zhuǎn)換為字符串返回,因此無法實現(xiàn)頁面切換,將@RestController換成@Controller
    2024-12-12

最新評論

博客| 肇州县| 九龙县| 资兴市| 麟游县| 蒙阴县| 海门市| 格尔木市| 华宁县| 乌兰浩特市| 冕宁县| 鹿泉市| 阜新市| 肇州县| 淳安县| 扎鲁特旗| 苍南县| 法库县| 育儿| 宜兰县| 鹤峰县| 新津县| 双峰县| 景洪市| 会理县| 宜都市| 齐河县| 扶余县| 七台河市| 通河县| 军事| 图片| 札达县| 富平县| 竹山县| 陵川县| 重庆市| 普宁市| 陆丰市| 安丘市| 晋州市|