zoukankan      html  css  js  c++  java
  • SpringBoot -- 调用整合阿里云短信服务

    一、在阿里云官网上配置一些信息

    阿里云官网:https://help.aliyun.com/

    1.获取您的 AccessKey 和 AccessKey Secert

         RAM控制台网址:https://ram.console.aliyun.com/overview

        1. 云账号登录RAM控制台

        2.在左侧导航栏的人员管理菜单下,单击用户。

        3.在用户登录名称/显示名称列表下,单击目标RAM用户名称。

        4.在用户AccessKey 区域下,单击创建新的AccessKey。

            首次创建时需填写手机验证码。

        5.单击确认。

    • AccessKeySecret只在创建时显示,不提供查询,请妥善保管。
    • 若AccessKey泄露或丢失,则需要创建新的AccessKey,最多可以创建2个AccessKey。

     2.给刚新增的用户授权短信服务

         注意:如果不授权调用短信服务会返回信息:没有访问权限

         1.新增授权

          

         2.添加权限

         

           

     3.短信服务创建签名和模板

        

     

     二、SpringBoot--接入阿里云短信服务

    1.打开pom.xml文件,添加依赖

           <!--sms-->
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>4.4.6</version>
            </dependency>
            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
                <version>2.1.0</version>
            </dependency>

    说明:阿里云的 sdk依赖可在阿里云帮助文档中进行获取

    2.修改application.yml配置文件

    aliyun:
      accessKeyID: ***                    你的accessKeyID
      accessKeySecret: ***                你的accessKeySecret
      domain: dysmsapi.aliyuncs.com       固定不变
      regionId: cn-hangzhou               固定不变
      templateCode: ***                   你的模板code
      signName: ***                       你的签名

    3.service层

    package com.chinaums.sms.service;
    
    public interface SendSmsService {
    
        /**
         * 发送短信的接口
         *
         * @param phoneNum 手机号
         * @param message     消息
         * @return
         */
        boolean sendSms(String phoneNum, String message);
    }

    4.serviceImpl实现层

    package com.chinaums.sms.service.impl;
    
    
    import com.alibaba.fastjson.JSON;
    import com.aliyuncs.CommonRequest;
    import com.aliyuncs.CommonResponse;
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.http.MethodType;
    import com.aliyuncs.profile.DefaultProfile;
    import com.chinaums.sms.service.SendSmsService;
    import lombok.Data;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Service;
    
    import java.util.HashMap;
    import java.util.Map;
    
    
    @Service
    @Data
    public class SendSmsServiceImpl implements SendSmsService {
        private static final Logger logger = LoggerFactory.getLogger(SendSmsServiceImpl.class);
        //aliyuncs的参数
        @Value("${aliyun.accessKeyID}")
        private String accessKeyID;
        @Value("${aliyun.accessKeySecret}")
        private String accessKeySecret;
        //短信api的请求地址  固定
        @Value("${aliyun.domain}")
        private String domain;
        //指定地域名称 短信API的就是 cn-hangzhou 不能改变
        @Value("${aliyun.regionId}")
        private String regionId;
        //您的申请签名
        @Value("${aliyun.signName}")
        private String signName;
        //你的模板
        @Value("${aliyun.templateCode}")
        private String templateCode;
    
        /**
         * 发送短信接口
         *
         * @param phoneNum 手机号
         * @param message     消息
         * @return
         */
        @Override
        public boolean sendSms(String phoneNum, String message) {
    
            // 指定地域名称 短信API的就是 cn-hangzhou 不能改变  后边填写您的  accessKey 和 accessKey Secret
            DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyID, accessKeySecret);
            IAcsClient client = new DefaultAcsClient(profile);
    
            // 创建通用的请求对象
            CommonRequest request = new CommonRequest();
            // 指定请求方式
            request.setSysMethod(MethodType.POST);
            // 短信api的请求地址  固定
            request.setSysDomain(domain);
            //签名算法版本  固定
            request.setSysVersion("2017-05-25");
            //请求 API 的名称
            request.setSysAction("SendSms");
            //指定地域名称
            request.putQueryParameter("RegionId", regionId);
            // 要给哪个手机号发送短信  指定手机号
            request.putQueryParameter("PhoneNumbers", phoneNum);
            // 您的申请签名
            request.putQueryParameter("SignName", signName);
            // 您申请的模板 code
            request.putQueryParameter("TemplateCode", templateCode);
    
            Map<String, Object> params = new HashMap<>();
            //这里的key就是短信模板中的 ${xxxx}
            params.put("code", message);
    
            // 放入参数  需要把 map转换为json格式  使用fastJson进行转换
            request.putQueryParameter("TemplateParam", JSON.toJSONString(params));
    
            try {
                CommonResponse response = client.getCommonResponse(request);
                logger.info(JSON.parseObject(response.getData(), Map.class).get("Message").toString());
                return response.getHttpResponse().isSuccess();
    
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                e.printStackTrace();
            }
    
            return false;
        }
    }

    5.controller控制层

    package com.chinaums.sms.controller;
    
    import com.chinaums.common.utils.R;
    import com.chinaums.sms.service.SendSmsService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class SendSmsController {
        @Autowired
        private SendSmsService sendSmsService;
    
        @RequestMapping(value = "/sendSms")
        public R sendSms() {
            boolean sendFlag = sendSmsService.sendSms("131****9522","123456");
            if (sendFlag){
                return R.ok();
            }else {
                return R.error("发送消息{123456}失败!");
            }
        }
    }

    说明:1.如果使用短信验证码格式的签名:code只能是 符合规则[a-zA-Z0-9] ,否则报错信息:params must be [a-zA-Z0-9] for verification sms。

               2.短信服务里面选择不同的签名格式,请求的模板也可以不同,具体情况具体对待。

               3.如果控制台返回信息:短信所使用签名场景非法,那么说明:签名的试用场景与短信类型不匹配。解决:检查下创建签名时选择的适用场景是验证码还是通用,如果是验证码,把场景改为通用即可。

               4.如果控制台返回信息:账户余额不足。则需要充值一点钱。

    6.可以在页面或者postman测试短信是否发送成功(直接调用控制层controller)注意:发送短信是收费的,收费标准看阿里云官网短信服务。

     

      控制返回:OK,则说明短信已经发送成功。

  • 相关阅读:
    Javascript笔记09:Javascript的下拉式导航菜单
    Javascript笔记08:Javascript的if...else语句
    Android(java)学习笔记84:SQLiteDatabase的query方法参数
    Android(java)学习笔记83:各种边距设置
    Android(java)学习笔记82:利用SpannableString设置复合文本
    PHP笔记06:http响应中的状态码
    html笔记04:在html之中导入css两种常见方法
    POJ 3307 Smart Sister
    ZOJ 2872 Binary Partitions
    HDU 4685 Prince and Princess
  • 原文地址:https://www.cnblogs.com/xianshen/p/13361470.html
Copyright © 2011-2022 走看看