首页 > 其他分享 >阿里云短信发送接入

阿里云短信发送接入

时间:2023-05-06 18:22:06浏览次数:48  
标签:短信 String 接入 private 阿里 import com final

前提

1、开通开通阿里云短信服务

2、申请签名、申请模版

3、提前创建好阿里云接口访问的AccessKey IDAccessKey Secret

核心依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.6.0</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>2.2.1</version>
</dependency>

工具类

import cn.hutool.core.date.DateUtil;
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.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 阿里云短信发送工具类
 *
 * @author JHL
 * @version 1.0
 */
public class SmsUtil {


    private static final Logger logger = LoggerFactory.getLogger(SmsUtil.class);

    /**
     * 产品名称:云通信短信API产品,开发者无需替换
     */
    private static final String PRODUCT = "Dysmsapi";

    /**
     * 产品域名,开发者无需替换
     */
    private static final String DOMAIN = "dysmsapi.aliyuncs.com";

    /**
     * 此处需要替换成开发者自己的 AccessKey ID
     */
    private static final String ACCESS_KEY_ID = "LTAI5tQDdsdsadsaCWHmwei";
    
    /**
     * 此处需要替换成开发者自己的 AccessKey Secret
     */
    private static final String ACCESS_KEY_SECRET = "3DCWrodsadZdsadpL6tYzbltlD";

    /**
     * 发送短信
     *
     * @param phone                短信接收手机号
     * @param smsTemplateCode      (需要提前在阿里云创建) 模版代码枚举
     * @param jsonTemplateVariable (需要提前在阿里云创建) json(k:v键值对)格式的模板变量,例如:{\"code\":\"1234\"}
     * @return SendSmsResponse     发送短信的结果响应
     * @throws ClientException e
     */
    public static SendSmsResponse sendSms(String phone, SmsTemplateCodeEnum smsTemplateCode, SmsSignatureEnum smsSignature, String jsonTemplateVariable) throws ClientException {
        // 超时时间
        System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        // 初始化acsClient,暂不支持region化
        IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", PRODUCT, DOMAIN);
        IAcsClient acsClient = new DefaultAcsClient(profile);
        // 组装请求对象-具体描述见控制台-文档部分内容
        SendSmsRequest request = new SendSmsRequest();
        // 必填:手机号
        request.setPhoneNumbers(phone);
        // 必填:设置短信签名
        request.setSignName(smsSignature.getSignatureName());
        // 必填:设置短信模板
        request.setTemplateCode(smsTemplateCode.getTemplateCode());
        // 必填:填充模板变量
        request.setTemplateParam(jsonTemplateVariable);
        // 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        logger.info("######################### \t[ 发送短信\t时间:{}\t电话:{}\t签名:{}\t模板:{} ]\t #########################", DateUtil.date(), phone, smsSignature.desc, smsTemplateCode.desc);
        if (!"OK".equals(sendSmsResponse.getCode())) {
            logger.error("######################### \t[ 短信发送失败原因:{} ]\t #########################", sendSmsResponse.getMessage());
        } else {
            logger.info("######################### \t[ 短信发送成功 ]\t #########################");
        }
        return sendSmsResponse;
    }

    /**
     * 短信模板枚举
     */
    @AllArgsConstructor
    @Getter
    public enum SmsTemplateCodeEnum {
        TEST("测试模板", "SMS_460660514"),
        ERR_TEST("错误测试模板", "123"),
        ;

        private final String desc;
        private final String templateCode;
    }


    /**
     * 短信签名枚举
     */
    @AllArgsConstructor
    @Getter
    public enum SmsSignatureEnum {
        TEST("测试签名", "唐鸿凌个人博客"),
        ERR_TEST("错误测试签名", "123"),

        ;

        private final String desc;
        private final String signatureName;
    }

    /**
     * 测试发送
     */
    public static void main(String[] args) throws ClientException {
        sendSms("1x5998x316x", SmsTemplateCodeEnum.ERR_TEST, SmsSignatureEnum.TEST, null);
    }

}

本文参考:https://www.zhihu.com/column/p/414819277

标签:短信,String,接入,private,阿里,import,com,final
From: https://www.cnblogs.com/hhddd-1024/p/17378227.html

相关文章

  • 如何通过代码接入手机在网状态 API
    引言在许多场景下,手机号码是一种常用的身份验证信息。而使用手机在网状态API可以判断出手机号码是否有效,在一定程度上提高了身份验证的准确性和安全性,它的出现和广泛应用,为各行各业提供了更为便利和高效的解决方案。本文将探讨该API的使用场景,使用思路以及如何通过代码接入......
  • 太为难我了,阿里面试了7轮...
    前言今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个“五年计划”截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了。但是,不得不说,这次阿里面试真的太难为我了,可以说是和面试官大战了7个回合,不过好在最后给了offer。......
  • 实践|企业如何快速发送节日问候短信
    贴心的生日祝福、节日问候以及日常问候是企业维护已有会员的重要方式之一,您可以不定期地在节假日、会员生日(纪念日)、气候变化时等特殊日子通过短信服务向您的会员用户发送相关的问候短信。本文以A公司向国内会员用户发送春节祝福短信为例,帮助企业用户了解如何快速发送节日问候......
  • 安全验证必备——语音验证码短信 API
    引言随着互联网的快速发展,越来越多的人和组织依赖于数字化技术进行日常活动和业务操作。例如,在进行网上支付、注册账户、重置密码、更改个人信息等操作时,通常需要进行身份验证,以确保安全性。为了应对日益增长的网络安全威胁,开发人员需要采用更加安全的身份验证方式,以提高数据的保......
  • 【AGC】applinking服务接入产生崩溃问题
     【关键字】AGC、applinking、崩溃 【问题描述】开发者反馈在应用中集成了AGC的applinking服务,在打开app时遇到了一些问题。具体如下所述:在接入applinking后,从浏览器中访问短链接,能正常唤起app,但app启动后就崩溃了,崩溃日志如下:​配置如下:1.项目的build.gradle文件中......
  • kubeadm安装-k8s集群(阿里云服务)【转】-实测安装成功
    部署Kubeadm遇到的哪些问题,并且如何解决地址:http://www.shanhubei.com/archives/2582.htmlk8s集群-CNI网络插件地址:http://www.shanhubei.com/archives/2582.html1、初始化服务器设置(三台都要)环境机器:Linux7.6系统为了方便管理,将服务器的实例名称改成:k8s-master01-15/......
  • C++获取阿里巴巴1688中国站店铺详情 API 接口返回值示例说明
    ​C++(cplusplus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。......
  • 验证码,发送短信验证码,校验确认密码和密码,密码需要数字字母特殊字符任选2种组合
    密码需要数字字母特殊字符任选2种组合constvalidatePwd=(rule,value,callback)=>{constreg=/(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%^&*?]{8,32}$/if(reg.test(value)==true){callback()}else{callback(newError(&#......
  • 直播app开发搭建,图形和短信验证码的自动识别获取
    直播app开发搭建,图形和短信验证码的自动识别获取selenuim操作 driver=webdriver.Chrome()driver.get("https://locvps.wenjingnetwork.com/page.aspx?c=reg")driver.implicitly_wait(10)#设置超时时间driver.find_element_by_name("uname").send_keys()driver.find_element_by......
  • 基于阿里云数据库TiDB的性能压测初体验
    作者:arron基于阿里云数据库TiDB的性能压测初体验申请阿里云TiDB地址:https://market.aliyun.com/isv-pingcap的过程,申请和部署过程非常简单直观,按提示一步步来即可,这里就忽略了。本次实验,主要对该云TiDB集群进行性能测试,使用测试工具有sysbench,tpcc,CH-benCHmark参考文档:如何用......