阿里云短信服务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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 深入理解java反射机制

    深入理解java反射机制一,java的核心机制java有两种核心机制:java虚拟机(JavaVirtualMachine)与垃圾收集机制(Garbagecollection):Java虚拟机:是运行所有Java程序的抽象计算机,是Java语言的运行环境,在其上面运行Java代码编译后的字节码程序,java虚拟机实现了平台无关性。Java垃圾回收(GarbageCollection):自动释放不用对象

    2022年5月10日
    33
  • QListWidget的使用

    QListWidget的使用QListWidgetQListWidget类提供了一个基于item的列表小部件。QListWidget是一个方便的类,它提供了类似于QlistView所具有的列表视图,但是具有增加和删除的功能。QListWidget使用内部模型来管理列表中的每个QListWidgetItem。想要有更灵活的列表视图,请使用具有标准模型的QListView类。QlistWidget有两种方法追加数据,一种

    2022年5月3日
    77
  • Eclipse 的中文简体版安装教程「建议收藏」

    Eclipse的中文简体版安装教程进行这个教程之前,请先完成JDK的安装。关于JDK的安装,请见笔者的另一博客:JDK的安装:https://blog.csdn.net/wangpaiblog/article/details/111466827下面开始介绍安装文件从网上获取的途径。进入Eclipse官网,下载免安装版。因为是国外的网站,所以可能网站加载缓慢。部分浏览器可能禁用此网站上的某些控件,所以如下的过程如果发现网站上缺失某些界面选项,可以试试换个浏览器。(网址:https://www.

    2022年4月16日
    40
  • PHPstrom中关闭提示信息

    PHPstrom中关闭提示信息

    2021年11月9日
    50
  • windows进程system占用CPU(电脑cpu过高怎么处理)

    自从升级到Win10系统后,经常发现任务管理器中的System进程占用了很高的CPU内存,这也导致多项应用程序无法正常运行,并且这个进程占用内存是没有上限,对于这种情况我们该如何处理呢?下面我们就一起来看看System占用CPU内存过高的解决方法。1、右键点击开始菜单,打开计算机管理页面;2、在计算机管理页面中打开计算机“服务”界面;3、在…

    2022年4月13日
    215
  • 设置npm镜像_nodejs安装淘宝镜像

    设置npm镜像_nodejs安装淘宝镜像将npm默认仓库地址改为淘宝镜像

    2025年6月17日
    4

发表回复

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

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