首页 > 其他分享 >阿里云短信接入服务

阿里云短信接入服务

时间:2022-09-04 22:34:38浏览次数:88  
标签:code 短信 接入 redis request 阿里 import

阿里云短信接入服务

阿里云短信服务

比如验证码

阿里云短信接入官方文档

自己项目的码云地址

一、了解阿里云用户权限操作

image-20210826232918130

1. 登录阿里云,点击头像看到获取AccessKey

image-20210826233540342

2. 使用子账号可以自己设置:

3. 创建用户组

image-20210826234150045

4. 配置用户组权限(sms)

image-20210826234414734

image-20210826234518512

5. 创建用户

image-20210826234711938

​ 创建了用户将用户添加到用户组

6. 得到用户的AccessKey(id,密码)

一定要把这个账号保存下来!!!!之后各种微服务都要用到这个账号!!!!

image-20210826235943566

二、开通阿里云短信服务

1、阿里云搜索短信服务,进入短信服务控制台,开通短信服务

image-20210827000505504

短信发送频率:

image-20210827001119226

2、找到帮助文档


三、添加短信模板

短信的具体内容

等待审核通过(需要正当理由)

image-20210827002039991


四、添加签名(也就是短信开头那个)

image-20210827002707900


五、编写测试代码

此时已经拿到授权码,短信服务,短信模板,短信签名

控制台的快速学习中有默认的demo:

image-20210827003720723

安装使用SDK

Java SDK 文档

六、编写可复用的微服务接口,实现验证码的发送

demo

1. 新建一个springboot的项目,导入依赖

    <!--导入依赖-->
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.0.3</version>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.75</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2. 测试短信服务

    // 连接阿里云,有三个参数
    // 1.地区  一般不变   2.accsessKey账号替换   3.账号的密码!  自己去阿里云找自己的账号密码
    DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<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("RegionId","cn-hangzhou");  
    request.putQueryParameter("phoneNumbers", "手机号");   //这里的手机号是接受短信的对象
    request.putQueryParameter("signName", "阿里云对应的签名名称写在这里");
    request.putQueryParameter("TemplateCode", "阿里云模板对应的Code写在这里");
    //构建一个短信验证码
    HashMap<String, Object> map = new HashMap<>();
    map.put("code", 2233);
    request.putQueryParameter("TemplateParam", JSON.toJSONString(map));
    try {
        CommonResponse response = client.getCommonResponse(request);   //发送
        System.out.println(response.getData());  //响应
    } catch (ServerException e) {
        e.printStackTrace();
    } catch (ClientException e) {
        e.printStackTrace();
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

3. 真实业务

1. 创建业务文件夹

image-20210901215542448

2. 创建接口SendSms

public interface SendSms {
    //要传进来一个手机号,模板号,还有随机生成的验证码
    public boolean send(String phoneNum, String templateCode, Map<String, Object> code);
}
  • 1
  • 2
  • 3
  • 4
  • 5

3. 封装SendSms的实现类

@Service
public class SendSmsImpl implements SendSms {
    @Override
    public boolean send(String phoneNum, String templateCode, Map<String, Object> code) {
        // 连接阿里云,有三个参数
        // 1.地区  一般不变   2.accsessKey账号替换   3.账号的密码!  自己去阿里云找自己的账号密码
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "密码");
        //构建一个客户端
        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("RegionId","cn-hangzhou");
        request.putQueryParameter("phoneNumbers", phoneNum);   //这里的手机号是接受短信的对象
        request.putQueryParameter("signName", "阿里云对应的签名名称写在这里");
        request.putQueryParameter("TemplateCode", templateCode);
        request.putQueryParameter("TemplateParam", JSON.toJSONString(code));
        try {
            CommonResponse response = client.getCommonResponse(request);   //发送
            System.out.println(response.getData());  //响应
            return response.getHttpResponse().isSuccess();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

4. 接口:模拟真实测试:springboot集成redis

在application.properties配置redis后,打开本地redis的服务

srever.port=9000
spring.redis.host=127.0.0.1
spring.redis.port=6379
  • 1
  • 2
  • 3
  • 4
接口:
package com.sms.controller;
import com.sms.service.SendSms;
import io.netty.util.internal.StringUtil;
import org.apache.catalina.security.SecurityUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import javax.swing.text.html.HTMLDocument;
import java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
 * @author 蒋二妹
 * @DATE 2021/9/1 - 22:06
 */
@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){
        //调用发送方法(模拟真实测试:springboot集成redis)
        //通过手机号获取redis中是否存储过验证码,如果还有则没有过期,没有就重新生成存储进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> param = new HashMap<>();
        param.put("code", code);
        boolean isSend = sendSms.send(phone, "需要使用的模板code", param);
        if (isSend) {
            redisTemplate.opsForValue().set(phone, code, 5, TimeUnit.SECONDS);
            return phone + ":" + code + "发送成功!";
        }else {
            return "发送失败!";
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

4. 启动启动类测试即可

localhost:9000/13511299999 回车查看返回字符串,此时手机也收到了一条短信验证码

https://blog.csdn.net/qq_45834226/article/details/120050705

标签:code,短信,接入,redis,request,阿里,import
From: https://www.cnblogs.com/sunny3158/p/16656359.html

相关文章