当前位置:   article > 正文

使用阿里云短信服务发送验证码_accesskeyid is mandatory for this action

accesskeyid is mandatory for this action

使用阿里云短信服务发送验证码
步骤:

1.查看阿里云短信服务文档使用指引:https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.8d482c42vJiVOI ,开通阿里云短信服务

2.获取到 AccessKey ID 和 AccessKey Secret

AccessKey ID 用于标识用户。
AccessKey Secret 是用来验证用户的密钥。AccessKey Secret必须保密。
  • 1
  • 2

3.创建签名和模板

4.使用官方提供的API,进行封装 SendSms.java

@Component
public class SendSms {

    @Autowired
    RedisUtils redisUtils;

    public static final String REDIS_KEY_PREFIX_AUTH_CODE = "portal:authCode:";
    public static final String REDIS_KEY_PREFIX_ORDERID = "portal:orderId:";
    //验证码超期时间
    public static Long AUTH_CODE_EXPIRE_SECONDS = 90L;

    private static final String ACCESS_KEY_ID = "你的ACCESS_KEY_ID";
    private static final String SYS_DOMIN = "dysmsapi.aliyuncs.com";
    private static final String ACCESS_SECRET = "你的ACCESS_SECRET";
    private static final String SIGN_NAME = "你的签名";
    private static final String TEMPLATE_CODE = "你的模板编号";

    //public static void main(String[] args) {
    //    send("手机号");
    //}

    /**
     * time:2020/12/4  生成六位验证码
     */
    public  CommonResponse send(String phone) {
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, ACCESS_SECRET);
        IAcsClient client = new DefaultAcsClient(profile);

        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain(SYS_DOMIN);//固定值
        request.setSysVersion("2017-05-25");//固定值
        request.setSysAction("SendSms");//选择SendSms API
        request.putQueryParameter("RegionId", "cn-hangzhou");//固定值
        request.putQueryParameter("PhoneNumbers", phone);//手机号
        request.putQueryParameter("SignName", SIGN_NAME);//签名
        request.putQueryParameter("TemplateCode", TEMPLATE_CODE);//模板
        String code = randomCode();
        System.out.println(code);
        request.putQueryParameter("TemplateParam", "{\"code\":" +"'"+ code +"'"+ "}");//模板中json格式的code参数,随机码


        //验证码绑定手机号并存储到redis
        redisUtils.set(REDIS_KEY_PREFIX_AUTH_CODE + phone,code);
        redisUtils.expire(REDIS_KEY_PREFIX_AUTH_CODE + phone,AUTH_CODE_EXPIRE_SECONDS);
   
        try {
            CommonResponse response = client.getCommonResponse(request);
            return response;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static String randomCode() {
        StringBuilder str = new StringBuilder();
        Random random = new Random();
        for (int i = 0; i < 6; i++) {
            str.append(random.nextInt(10));
        }
        return str.toString();
    }

}
  • 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
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

说明:这里利用Redis将手机号与验证码进行绑定,并设置验证码的过期时间,在登录验证时,从Redis中根据手机号取出发送了的验证码,再与用户填写的验证码进行对比。

5.创建接口

@GetMapping("/sendSms")
@ApiOperation(value = "发送短信验证码")
public Result sendSms(@RequestParam("phone") String phone){
    return userService.sendSms(phone);
}
  • 1
  • 2
  • 3
  • 4
  • 5

6.创建Service

@Autowired
SendSms sendSms;

@Override
public Result sendSms(String phone) {
    CommonResponse response = sendSms.send(phone);
    return Result.SUCCESS(response);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7.调用接口,进行测试

碰到的问题:

阿里云短信服务发送验证码为0开头不显示

解决方法:在验证码前后加上单引号

request.putQueryParameter("TemplateParam", "{\"code\":"+"'"+code+"'"+"}");
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/838043
推荐阅读
相关标签
  

闽ICP备14008679号