springboot 整合阿里云短信服务

官方sdk示例地址

  1. 依赖引入
        <!-- https://mvnrepository.com/artifact/com.aliyun/dysmsapi20170525 --><dependency><groupId>com.aliyun</groupId><artifactId>dysmsapi20170525</artifactId><version>2.0.23</version></dependency>
  1. 配置
aliyun:sms:endpoint: dysmsapi.aliyuncs.comaccess-key-id: LTAI5t9WVhxxxxaccess-key-secret: z6OCV3hMfxxxxsign-name: 短信# 买家报价短信模板quote_template-code: SMS_465896xxx# 买家报价短信模板 -有车牌号quote_template-code-plate: SMS_465911xxx# 卖家报价确认短信模板quote_confirm_template-code: SMS_465956xxx# 卖家报价确认短信模板quote_confirm_template-code-plate: SMS_465971xxx
  1. AliyunSmsService

注意sendCode方法发送不同的短信,需要修改setTemplateCode(this.quoteTemplateCode)中的TemplateCode,建议不同方法发送不同的短信

package com.vehicle.manager.core.service;import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.aliyun.tea.TeaException;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;import java.util.Map;
import java.util.Objects;/*** @author zr 2024/5/13*/
@Slf4j
@Data
@Service
@ConfigurationProperties("aliyun.sms")
public class AliyunSmsService {private String accessKeyId;private String accessKeySecret;private String endpoint;private String signName;private String quoteTemplateCode;private String quoteTemplateCodePlate;private String quoteConfirmTemplateCode;private String quoteConfirmTemplateCodePlate;public static Client createClient(String accessKeyId, String accessKeySecret, String endpoint)throws Exception {Config config =new Config()// 必填,您的 AccessKey ID.setAccessKeyId(accessKeyId)// 必填,您的 AccessKey Secret.setAccessKeySecret(accessKeySecret);// 访问的域名config.endpoint = endpoint;return new com.aliyun.dysmsapi20170525.Client(config);}/*** 发送短信验证码** @param phone 电话号码* @throws Exception 短信推送异常*/public boolean sendCode(String phone, Map<String,Object> param) throws Exception {Client client = createClient(this.accessKeyId, this.accessKeySecret, this.endpoint);SendSmsRequest sendSmsRequest =new SendSmsRequest().setSignName(this.signName)// 发送不同的短信选择不同的TemplateCode.setTemplateCode(this.quoteTemplateCode).setPhoneNumbers(phone).setTemplateParam(JSON.toJSONString(param));try {log.info("发送短信入参: " + JSONUtil.toJsonStr(sendSmsRequest));// 复制代码运行请自行打印 API 的返回值SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);log.info("发送短信结果: " + JSONUtil.toJsonStr(sendSmsResponse.getBody()));if (Objects.nonNull(sendSmsResponse) && sendSmsResponse.getBody().code.equals("OK")) {return Boolean.TRUE;}} catch (TeaException error) {// 如有需要,请打印 errorlog.error("短信推送异常结果: " + error.message);return Boolean.FALSE;} catch (Exception e) {TeaException error = new TeaException(e.getMessage(), e);// 如有需要,请打印 errorcom.aliyun.teautil.Common.assertAsString(error.message);log.error("短信推送异常结果: " + error.message);return Boolean.FALSE;}return Boolean.FALSE;}
}
  1. 测试

param的参数名称要与模板中的一致
image.png

package com.vehicle.manager.core;import com.vehicle.manager.api.StartApplication;
import com.vehicle.manager.core.service.AliyunSmsService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.HashMap;/*** @author zr 2024/5/13*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = StartApplication.class)
@Slf4j
public class AliyunSmsTest {@Autowiredprivate AliyunSmsService aliyunSmsService;@Testpublic void name() {try {HashMap<String, Object> param = new HashMap<>();param.put("carModel","测试车型");param.put("amounts",11);param.put("hours",2);boolean b = aliyunSmsService.sendCode("1774878xxxx", param);} catch (Exception e) {throw new RuntimeException(e);}}
}

image.png
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/696783.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

猫头虎分享已解决Error || ERROR: Failed building wheel for XXX

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Pencils Protocol 提供层次化的 Staking,品牌升级不断

Pencils Protocol 是一个 Scroll 生态中的一个综合应用平台&#xff0c;在全新的品牌升级后(原为 Penpad)&#xff0c;其在原有的 LaunchPad 的基础上&#xff0c;进一步向收益聚合器、RWA 等板块进行全新的拓展。目前&#xff0c;Pencils Protocol 生态的整体功能板块包括 Lau…

百亿补贴为什么用 H5?H5 未来会如何发展?

百亿补贴为什么用 H5&#xff1f;H5 未来会如何发展&#xff1f; 本人有一些分析预测。当然&#xff0c;这些分析预测只是个人观点&#xff0c;如果你有不同的意见&#xff0c;欢迎在评论区讨论交流。 百亿补贴为什么用 H5 我们先看两张图&#xff0c;在 Android 手机开发者…

(done) 什么是马尔可夫链?Markov Chain

参考视频&#xff1a;https://www.bilibili.com/video/BV1ko4y1P7Zv/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 如下图所示&#xff0c;马尔可夫链条实际上就是 “状态机”&#xff0c;只不过状态机里不同状态之间的边上是 “…

四川汇昌联信:拼多多网点怎么开?大概需要多少钱?

想要开一家拼多多网点&#xff0c;你肯定很关心需要准备多少资金。下面&#xff0c;我们就来详细解答这个问题&#xff0c;并从多个角度分析开设网点的要点。 一、 开设拼多多网点&#xff0c;首要任务是确定启动资金。根据不同的经营模式和地区差异&#xff0c;成本会有所不同…

ComfyUI 介绍及入门

介绍 ComfyUI 是一种用户界面&#xff0c;它采用了基于节点的流程设计&#xff0c;用于操作一种名为 Stable Diffusion 的技术。这种设计允许用户通过自定义流程来实现更精确的工作流程&#xff0c;并确保结果的可重复性。在 ComfyUI 中&#xff0c;每个模块都承担着特定的任务…

鸿蒙开发:【从TypeScript到ArkTS的适配规则】

从TypeScript到ArkTS的适配规则 ArkTS通过规范约束了TypeScript&#xff08;简称TS&#xff09;中过于灵活而影响开发正确性或者给运行时带来不必要额外开销的特性。本文罗列了所有在ArkTS中限制的TS特性&#xff0c;并提供了重构代码的建议。ArkTS保留了TS大部分的语法特性&a…

详解依赖注入的三种方法以及遇到问题的解决

各位大佬光临寒舍&#xff0c;希望各位能赏脸给个三连&#xff0c;谢谢各位大佬了&#xff01;&#xff01;&#xff01; 目录 1.三种依赖注入的方法 1.属性注入 优点 缺点 2.构造方法注入 优点 缺点 3.Setter注入 优点 缺点 4.小结 2.依赖注入常见问题的解决 1…

深度解读《深度探索C++对象模型》之虚继承的实现分析和效率评测(一)

目录 前言 具有虚基类的对象的构造过程 通过子类的对象存取虚基类成员的实现分析 接下来我将持续更新“深度解读《深度探索C对象模型》”系列&#xff0c;敬请期待&#xff0c;欢迎左下角点击关注&#xff01;也可以关注公众号&#xff1a;iShare爱分享&#xff0c;或文章末…

电脑快速搜索文件及文件夹软件——Everything

一、前言 Everything是一款由voidtools开发的文件搜索工具&#xff0c;主要运行于Windows操作系统上。它的主要功能是快速、高效地搜索电脑上的文件和文件夹名称。Everything通过利用NTFS文件系统的MFT&#xff08;主文件表&#xff09;来索引文件&#xff0c;从而实现几乎实时…

【算法】滑动窗口——最小覆盖子串

本节博客是对“最小覆盖子串”题目由暴力求解到滑动窗口的思路解析&#xff0c;有需要借鉴即可。 目录 1.题目2.滑动窗口解法3.总结 1.题目 题目链接&#xff1a;LINK 这个题目是困难难度&#xff0c;感觉是一个中等题目的感觉。 首先我肯定想到的是暴力求解的方法&#xff…

13届蓝桥杯 最大值_c++

题目描述 手工课上老师拿出 N 张长方形彩纸&#xff0c;且每张彩纸上都画着 W*H 的网格&#xff08;网格铺满整张彩纸&#xff09;。现在老师将 N 张彩纸裁剪出 K 张大小相同的正方形&#xff0c;并且要使裁剪出的正方形的边长最大&#xff08;裁剪的正方形边长必须为整数&…