前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java实现发短信功能---腾讯云短信

java实现发短信功能---腾讯云短信

原创
作者头像
聚优云惠
修改2019-12-27 10:22:21
25.5K0
修改2019-12-27 10:22:21
举报
文章被收录于专栏:建站教程

前言

如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了许多提供短信服务的三方,几乎所有都需要企业认证才可以使用,这对于个人学习非常不方便。多方比较之后,选择了腾讯云(此处并非做广告),原因有两点:

  1. 支持微信公众号认证(门槛低)
  2. 每月赠送100条免费短信(适合个人学习)(这一点请矿家子弟自行忽略)。超过100条的时候, 可以开通收费短信服务-腾讯云短信服务套餐

开发环境

请参照: 基于SpringBoot构建分模块项目

腾讯云 ---短信

  1. 找到腾讯云短信服务
  1. 开通之后,点击添加应用
  1. 设置短信签名(以公众号为例),签名类型选择公众号或小程序,其余按照要求填写即可
  1. 签名完成之后,创建短信模板
  1. 等待以上信息审核完成之后,便可以开始使用了,腾讯短信服务需要用到SDK AppID 和App Key ,在这里:

代码

  1. pom.xml引入依赖
代码语言:txt
复制
<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>
  1. 发送短信工具类
代码语言:txt
复制
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;

/**
 * 发送短信工具类
 * @author Wayne
 * @date 2019/6/26
 */
public class MessageUtils {

    /**
     * 按模板发送短信 支持单发和群发
     * @param isSingle 是否单发 true: 单发,false: 群发
     * @param form 需要发送的短信内容及收信人手机号
     * @param config 短信配置
     * @throws CustomException 发送失败时捕获的异常信息
     */
    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 {
            // 是否单发
            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响应码错误");
        } catch (JSONException e) {
            e.printStackTrace();
            throw new CustomException("json解析错误");
        } catch (IOException e) {
            e.printStackTrace();
            throw new CustomException("网络IO错误");
        }
    }

    /**
     * 校验参数
     */
    private static void validateMessage(MessageForm messageForm, CmsMessageConfig messageConfig) throws CustomException {
        ValidatorUtils.validateEntity(messageForm);
        if (null == messageConfig) {
            throw new CustomException("系统参数异常");
        }
    }
}
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;

       /**
        * 签名内容
        */
       @Column(name = "SMS_SIGN")
       private String smsSign;

       /**
        * 是否删除,0:否,1:是
        */
       @Column(name = "IS_DELETE")
       private String isDelete;

       /**
        * 状态,0:使用,1:未使用 (同一时间应最多只有一条数据处于使用状态)
        */
       @Column(name = "IS_USE")
       private String isUse;

       /**
        * 创建者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);

       // 获取正在使用的短信配置: 此处为 从数据库中查询
       CmsMessageConfig messageConfig = getCurrUseMessageConfig();

       try {
           // 发送短信
           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);
   }

效果

  1. 一号短信模板
  1. 二号短信模板
  1. 设置短信配置信息

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 开发环境
  • 腾讯云 ---短信
  • 代码
  • 效果
相关产品与服务
短信
腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档