SpringBoot实现阿里云短信服务

SpringBoot实现阿里云短信服务SpringBoot实现阿里云短信服务

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

了解阿里云用户权限

阿里云里面有非常多的业务,那么我们作为用户,如果要使用它的业务,要怎么做呢,我们来看图!

我们如果要使用阿里云的服务,就需要有一个个人账号,对于企业来说就是企业账号,但是在代码中要使用业务将个人账号密码写入很显然是不现实的事情,因此,使用阿里云业务通常是去获取它的业务授权码以及密钥。
在这里插入图片描述

准备工作

开启子用户

https://home.console.aliyun.com/home/dashboard/ProductAndService

Jetbrains全家桶1年46,售后保障稳定

我们登陆进入阿里云,鼠标移动到右上角的头像处,会看到有一个AccessKey管理,我们点击进入
在这里插入图片描述
点击开始使用子用户AccessKey
在这里插入图片描述

新建一个用户组

点击创建用户组
在这里插入图片描述
填好信息点击确认即可
在这里插入图片描述
添加对应的权限
在这里插入图片描述
这里我们使用短信业务,就要添加短信业务的权限
在这里插入图片描述
搜索对应的业务,然后点击确认即可

创建用户并添加进用户组

点击创建用户,填写好信息之后
在这里插入图片描述
点击添加到用户组在这里插入图片描述
这一个用户就是用来使用我们的业务的,点击该用户就可以看到相应的AccessKey,要小心保管自己的AccessKey,一旦外泄就点击删除或者禁用,里面有ID和密码
在这里插入图片描述

开启阿里云短信服务

我们直接在首页搜索短信服务,可以看到控制台有一个短信服务
在这里插入图片描述
点击进入开通服务
在这里插入图片描述
就会进入短信服务的控制台
在这里插入图片描述

添加模板

点击添加模板,这个是需要费用的,所以我们学习可以在阿里云充一点费用,并不是很昂贵,这里的模板是需要审核的,不能乱写
在这里插入图片描述
这里建议,先申请签名,再添加模板
在这里插入图片描述
填写好信息之后,右边可以预览,点击提交即可,理由要正当。
在这里插入图片描述
我们最终在程序中使用需要用到模板CODE
在这里插入图片描述
注意:如果申请不通过,那就修改信息然后重新申请。

添加签名

目前不支持个人用户申请上线业务
在这里插入图片描述
这里写的是企业签名然后等待审核

编写代码测试

快速学习这里有一个控制台发送测试,下面有一个API demo,我们这里使用JAVA
在这里插入图片描述

// This file is auto-generated, don't edit it. Thanks.
package com.aliyun.sample;

import com.aliyun.tea.*;
import com.aliyun.dysmsapi20170525.*;
import com.aliyun.dysmsapi20170525.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.dysmsapi20170525.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.dysmsapi20170525.Client(config);
    }

    public static void main(String[] args_) throws Exception { 
   
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.dysmsapi20170525.Client client = Sample.createClient("accessKeyId", "accessKeySecret");
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setPhoneNumbers("")
                .setSignName("")
                .setTemplateCode("");
        // 复制代码运行请自行打印 API 的返回值
        client.sendSms(sendSmsRequest);
    }
}

同时你可以根据你所学的语言来选择相应的SDK,导入相应的依赖。
在这里插入图片描述
在这里插入图片描述

新建项目

我们建一个SpringBoot项目
在这里插入图片描述

导入依赖

具体可以查看demo的相应sdk

<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.0.3</version>
        </dependency>
	<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  <version>2.2.1</version>
</dependency>

同时我们还需要使用json来传递字符串,redis来整合验证码

	<!--json-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.76</version>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-redis</artifactId>
			<version>2.6.6</version>
		</dependency>

在这里插入图片描述

编写测试代码

 //连接阿里云
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tK2pX4p7kKCoLot1GRH", "<your-access-key-secret>");
        /** use STS Token
         DefaultProfile profile = DefaultProfile.getProfile(
         "<your-region-id>",           // The region ID
         "<your-access-key-id>",       // The AccessKey ID of the RAM account
         "<your-access-key-secret>",   // The AccessKey Secret of the RAM account
         "<your-sts-token>");          // STS Token
         **/
        IAcsClient client = new DefaultAcsClient(profile);

        //构建请求
        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers("");
        request.setSignName("");
        request.setTemplateCode("");

        try { 
   
            SendSmsResponse response = client.getAcsResponse(request);
            System.out.println(new Gson().toJson(response));
        } catch (ClientException e) { 
   
            System.out.println("ErrCode:" + e.getErrCode());
            System.out.println("ErrMsg:" + e.getErrMsg());
            System.out.println("RequestId:" + e.getRequestId());
        }

    }
    }

开启redis

#开启redis服务
spring.redis.host=xxxx
spring.redis.port=xxxx

真实业务开发

导入依赖

<dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.2.1</version>
        </dependency>
        <!--json-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.76</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

业务层

在这里插入图片描述
SendSms

package com.cjh.aliyunsmstest.service;

import java.util.Map;

public interface SendSms { 
   
    boolean addSendSms(String PhoneNumbers, String TemplateCode, Map code);
}

SendSmsImpl

package com.cjh.aliyunsmstest.service;

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;

import java.util.Map;

@Service
public class SendSmsImpl implements SendSms { 
   

    @Override
    public boolean addSendSms(String PhoneNumbers, String TemplateCode, Map code) { 
   
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "accesssid", "accesssSecret");
        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", 1234xxxxxx); //发送至手机号
        request.putQueryParameter("SignName", "xxxx");  //自己配置的短信签名
        request.putQueryParameter("TemplateCode", xxxxxxxx); //自己配置的模板 模版CODE

        //构建一个短信验证码

        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));   //转换成json字符串
        try { 
   
            CommonResponse response = client.getCommonResponse(request); //发送至客户端
            System.out.println(response.getData());
            return response.getHttpResponse().isSuccess();//返回是否发送成功
        } catch (ClientException e) { 
   
            e.printStackTrace();
        }

        return false;
    }
}

控制层

SendSmsController

package com.cjh.aliyunsmstest.controller;

import com.aliyuncs.utils.StringUtils;
import com.cjh.aliyunsmstest.service.SendSms;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
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 java.util.HashMap;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

@RestController
@CrossOrigin    //跨域请求
public class SendSmsController { 
   
    
    @Autowired
    SendSms sendSms;

    @Autowired
    RedisTemplate<String,String> redisTemplate;

    @GetMapping("/sms/{phone}")
    public String sendSms(@PathVariable("phone") String phone){ 
   
        System.out.println(phone);
        //得到电话,先看查一下redis中有无存放验证码
        String code = redisTemplate.opsForValue().get(phone);
        //有则返回已存在
        if (!StringUtils.isEmpty(code)){ 
   
            return phone+":"+code+"已存在,还没有过期!";
        }else { 
   
            //没有则生成验证码,uuid随机生成四位数验证码
            code = UUID.randomUUID().toString().substring(0,4);   //随机生成四个数形成验证码
            HashMap<String, Object> map = new HashMap<>();
            map.put("code",code);
            //调用方法发送信息 传入电话,模板,验证码
            boolean send = sendSms.addSendSms(phone, "SMS_205128031", map);


            //返回ture则发送成功
            if (send){ 
   
                //存入redis中并设置过期时间,这里设置5分钟过期
                redisTemplate.opsForValue().set("phone",code,5, TimeUnit.SECONDS);
                return phone+":"+code+"发送成功!";
            }else { 
   
                //返回false则发送失败
                return "发送失败";
            }
        }
    }
}

这里我们的url采用rest风格, @GetMapping("/sms/{phone}")
前端只需要把phone传进来即可

这样阿里云短信服务就成功了!

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/206719.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 2019版idea激活码破解方法

    2019版idea激活码破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • Android浏览器开源项目

    Android浏览器开源项目Chrome:https://github.com/pwnallchromium_webview:https://github.com/mogoweb/chromium_webview365browser:https://github.com/mogoweb/365browserAndroidChromium:https://github.com/JackyAndroid/Androi…

  • html注册cab包,OCX控件打包成CAB并实现数字签名过程

    html注册cab包,OCX控件打包成CAB并实现数字签名过程OCX打包CAB并签名过程一、打包cab制作cab文件时需要将所有的相关文件都包含进去,可以通过Depends(VC自带的)检查需要的文件。使用inf文件将这些东西都写进去。1、制作inf文件default.INF最开始一般是[Version]区:eg:[Version]signature=”$CHICAGO$”AdvancedINF=2.0接下来就是最重要的[Add.Code]区:eg:…

  • 几种常见的距离计算公式

    几种常见的距离计算公式在学习分类、聚类、预测、推荐算法的过程中常常会遇到比较两个或多个对象的相似性,而相似性的度量可以通过计算距离来实现。我们常用的距离计算公式是欧几里得距离公式,但是有时候这种计算方式会存在一些缺陷,那么就需要另外的计算方法去加以补充,本文将介绍几种在机器学习中常用的计算距离。在做很多研究问题时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就…

  • vue + echarts 省份地图 以及打包后地图加载不出来(比较详细)「建议收藏」

    vue + echarts 省份地图 以及打包后地图加载不出来(比较详细)「建议收藏」刚开始地图怎么也出不来,经过解决,是因为echarts.min.js引入位置在index.html中引入需要的js版本按照自己需要的来<scriptsrc=”./static/plugins/echarts-5.1.2/echarts.common.min.js”></script><scriptsrc=”./static/plugins/echarts.min.js”></script>(必须引入,地图才能加载)全局引入im

    2022年10月12日
  • 如何设置java环境变量

    设置“java”环境变量的方法是:首先进入计算机中的高级系统设置,打开环境变量设置,然后新建“JAVA_HOME”系统变量,设置其值为安装路径,接着编辑“PATH”变量,最后根据实际情况,选择是否新建“Classpath”变量。

发表回复

您的电子邮箱地址不会被公开。

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