阿里云短信服务Java实现

阿里云短信服务Java实现文章目录 1 阿里云用户权限 2 开通阿里云短信服务 3 帮助文档 4 编写测试代码真实项目应用 1 阿里云用户权限阿里云平台有很多业务 用户登录阿里云之后 要想使用业务 必须开通该业务的权限登录阿里云网站 点击右上角头像查看个人信息 点击 accesskey 选择开始使用子账户添加用户组 类似于 Linux 中的用户组和用户新创建用户组默认没有权限 点击添加权限 可以看到阿里所有权限搜索短信 sms 添加在用户组中添加用户 勾选允许编程访问创建成功后 会生成新用户组用户 accesskey

1.阿里云用户权限

阿里云平台有很多业务,用户登录阿里云之后,要想使用业务,必须开通该业务的权限

小结:

  1. 开启子账户
  2. 新建用户组,添加权限
  3. 用户组中添加用户,具体用来操作的账号
  4. 得到acesskey,妥善保管,一旦泄露,立即删除或禁用

2.开通阿里云短信服务

在阿里云界面搜索短信服务,可以看到短信服务页面。

在这里我们可以学习,添加模板,计费规则,规则设置,安全设置

在这里插入图片描述
在这里插入图片描述
短信模板包含几个部分,签名、code(验证码),内容(写死)

在这里插入图片描述
注意模板内容中的变量,我们写程序时要准备好,申请说明要理由正当,提交后几分钟会收到结果

在这里插入图片描述

写好签名后,发送的短信会自动带【】,个人用户只能选一种适用场景,我们选验证码就可以,申请说明写正当理由

申请理由不好,可能会重复申请好几次

小结:

  1. 搜索并进入短信服务面板
  2. 找到帮助文档
  3. 添加短信模板,签名,需要申请理由正当,等待审核通过

3.帮助文档

4.编写测试代码

创建springboot项目,

添加依赖,aliyun-java-sdk-core fastjson spring-boot-starter-data-redis

其中redis用来缓存用户信息

编写测试代码,从 api demo 拷贝来的

// This file is auto-generated, don't edit it. Thanks. package com.aliyun.sample; import com.aliyun.tea.*; import com.aliyun.dysmsapi.*; import com.aliyun.dysmsapi.models.*; import com.aliyun.teaopenapi.*; import com.aliyun.teaopenapi.models.*; public class Sample { 
    / * 使用AK&SK初始化账号Client * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ public static com.aliyun.dysmsapi.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { 
    Config config = new Config() // 您的AccessKey ID .setAccessKeyId(accessKeyId) // 您的AccessKey Secret .setAccessKeySecret(accessKeySecret); // 访问的域名 config.endpoint = "dysmsapi.aliyuncs.com"; return new com.aliyun.dysmsapi.Client(config); } public static void main(String[] args_) throws Exception { 
    java.util.List<String> args = java.util.Arrays.asList(args_); com.aliyun.dysmsapi.Client client = Sample.createClient("accessKeyId", "accessKeySecret"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setPhoneNumbers("") .setSignName("") .setTemplateCode(""); // 复制代码运行请自行打印 API 的返回值 client.sendSms(sendSmsRequest); } } 

注意老版本的demo中部分方法已经和依赖包不匹配了,需要自行调整方法名

代码中相应的参数,填写我们在短信服务控制台设置好的一些模板、签名参数,账号、密码

真实项目应用

springboot项目

  • 创建接口,根据api模板编写实现类,接收参数也就是用户手机号,运行代码,阿里云将向手机号发送短信消息,费用将从我们的阿里云账户扣除

接口:

手机号从用户获取,模板、code来自于我们在阿里云设置好的参数

public interface SendSms { 
    public boolean send(String phoneNum, String templateCode, Map<String, Object> code); } 

实现类

@Service public class SendSmsImpl implements SendSms { 
    @Override public boolean send(String phoneNum, String templateCode, Map<String, Object> code) { 
    // 连接阿里云 // 第一个参数一般不动,后面两个参数是我们申请用户组时保存的账户,密码 DefaultProfile profile = DefaultProfile.getProfile("cn-qingdao", "<accessKeyId>", "<accessSecret>"); IAcsClient client = new DefaultAcsClient(profile); // 构建请求 CommonRequest request = new CommonRequest(); request.setMethod(MethodType.POST); request.setDomain("dysmsapi.aliyuncs.com"); // 不要动 request.setVersion("2017-05-25"); // 不要动 request.setAction("SendSms"); // 自定义的参数,手机号,验证码,签名,模板 request.putQueryParameter("PhoneNumbers", phoneNum); request.putQueryParameter("SignName", "签名");// 签名一般不变 request.putQueryParameter("TemplateCode", templateCode);// 对应阿里云短信控制台我们设置的模板名 request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));// code验证码 try { 
    CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); // 构建成功返回true return response.getHttpResponse().isSuccess(); } catch (ServerException e) { 
    e.printStackTrace(); } catch (ClientException e) { 
    e.printStackTrace(); } // 构建失败返回false return false; } } 

编写controller接口

@RestController @CrossOrigin // 支持跨域访问 public class SmsApiController { 
    @Autowired private SendSms sendSms; @Autowired private RedisTemplate<String,String> redisTemplate; @GetMapping("/send/{phone}") public String code(@PathVariable("phone") String phone) { 
    // 调用方法发送,模拟真实业务使用redis String code = redisTemplate.opsForValue().get(phone); if (!StringUtils.isEmpty(code)) { 
    return phone + ":" + code + "已存在,还没有过期"; } // 生成验证码并存储到redis中 code = UUID.randomUUID().toString().substring(0,4); HashMap<String,Object> map = new HashMap<>(); map.put("code", code); boolean isSend = sendSms.send(phone, "自己的模板code", map); if (isSend) { 
    redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.SECONDS); return phone + ":" + code + "发送成功"; } else { 
    return "发送失败"; } } } 

启动测试,访问网址,查看是否可以接收短信

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233251.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ce修改器怎么用 ce修改器使用基础教程[通俗易懂]

    ce修改器怎么用 ce修改器使用基础教程[通俗易懂]这篇文章是教大家CE修改器的使用方法,教程简单易学,有需要的小伙伴就赶紧和小编一起来学习一下吧。我们先下载并打开,下载地址:点击前往然后打开隐藏.隐藏CE修改器接着进入您玩的游戏这时我们进游戏后打开CE的最左上边的小电脑“文件”菜单-“打开进程”-打开MAIN进程(M开头有数字的)然后输入你当前的敏捷如:555(在HEX栏输入)接着我们点首次搜索.弄好后左边出现一大堆(RP好的只有一个,跳到9步)加几点敏捷,再输入你当前的敏捷如:558点再次搜索这次只有一个数据了,双击它,它会出现在下面

    2025年6月21日
    3
  • Sql语句里的递归查询(转)

    Sql语句里的递归查询(转)

    2021年8月28日
    81
  • 编程,向内存0:200~0:23F依次传送数据_写出汇编语言中mov和add指令格式

    编程,向内存0:200~0:23F依次传送数据_写出汇编语言中mov和add指令格式题目要求向内存0:200~0:23f依次传送数据0~63(3fh)分析0:200~0:23f也就是0000:0200~00000:023f运行结果代码;向内存0:200~0:23f依次传送数据0~63(3fh);分析0000:0200~00000:023f;assumecs:codecodesegment movax,0h movds,ax movbx…

    2026年2月1日
    3
  • 遗传算法的应用实例python实现_遗传算法Python解决一个问题

    遗传算法的应用实例python实现_遗传算法Python解决一个问题$n:\5~”f1Y!G2T&j%t2F0N#p$x.y!W$j-o1o,ppython实现的遗传算法实例(一))h#F+A#N:p”a&c”^4g%[8i6~%L#]$B&s2U'[7B:_一、遗传算法介绍遗传算法是通过模拟大自然中生物进化的历程,来解决问题的。大自然中一个种群经历过若干代的自然…

    2025年11月8日
    4
  • Murmurhash 哈希算法 介绍与实现

    最近在项目代码中看到了一种hash算法,以前没有遇见过,在此记录下来。 一、介绍  MurmurHash是一种非加密型哈希函数,适用于一般的哈希检索操作。由AustinAppleby在2008年发明,并出现了多个变种,都已经发布到了公有领域(publicdomain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。—摘自w…

    2022年4月5日
    68
  • http接口取参方式 – getParameter 和 getParameterValues[通俗易懂]

    http接口取参方式 – getParameter 和 getParameterValues[通俗易懂]前言:最近写http接口时,有了很多关于接口取参方式的疑问,大家都知道Servlet常用的取参方式有getParameter、getParameterValues、getInputStream(读流形式)。SpringMvc常用的有封装好的@RequestParam,RequestBody。这些取参方式都有什么特点,我都写了测试接口,利用postman做了测试…

    2022年7月22日
    21

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号