最新版阿里大于短信服务封装工具类方法

本文介绍了如何在2023年阿里云短信服务更新后,通过封装通用工具类,使用AccessKey和AccessKeySecret进行身份验证,申请模板、控制访问权限,以及发送短信的过程。提供了示例代码和注意事项,包括不同类型的签名申请和安全实践。
摘要由CSDN通过智能技术生成

本文针对2023年11月30日更新后的阿里大于短信服务封装通用工具类进行展示:

1,进入阿里云官网:阿里云权益中心_助力学生、开发者、企业用云快速上云-阿里云

2,使用支付宝或者淘宝注册或者登陆;

3,右侧点击控制台搜索短信服务;

4,进入页面后左侧可按照“快速学习和测试”进行操作,也可按照此文进行操作;

5,选择国内信息或者国际都可,本文是选择国内进行操作的;

6,申请资质;

7,申请签名,这里需注意,签名有类型,类型选择“学习和测试”只能对授权手机发送短息,但审核通过比较快速简单,线上和其它类型可进行普发,不过审核更为严格,不好通过;

8,申请模板; 

9,访问控制,创建用户,授权;

9中做的目的就是进行安全限制,因为短信发送涉及到AK(密钥账户)和SK(密钥密码),密钥分为全局和个体,如果这里不进行创建用户操作,点击头像中AK关联则是全局的;这里创建用户生成AK和SK则是个体,我们如果短信服务中使用全局AK,一旦泄密,则威胁我们阿里账号中财产安全及其它服务,所以我们创建个体用户,进行短信授权,代码API中使用此用户的AK即可,因为只授权短信服务给此用户,所以此用户AK不涉及其它权限;

注意,申请方面都需要时间等待,如有开发需求请提前准备;

具体操作本文不再赘述,可查看黑马阿里云短信服务解决方案视频教程,带你轻松定义通用组件,使用案例实现任何短信的发送,工具类直接应用中小型项目_哔哩哔哩_bilibili

此视频,讲解很详细,只不过不是最新代码;

10,最新代码测试SDK:

依赖:

    <dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.24</version>
        </dependency>
    </dependencies>

code:

package cn.zzn;

import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;

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 {
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId("输入你的AKID")
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret("输入你的AK");
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        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_);
        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
        com.aliyun.dysmsapi20170525.Client client = Sample.createClient(System.getenv("输入你的AKID"), System.getenv("输入你的AK"));
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setSignName("你的签名名称,此处可自定义")
                .setTemplateCode("模板ID")
                .setPhoneNumbers("测试手机号码")
                .setTemplateParam("{\"code\":\"zzn888\"}");//模板参数,这里模板类型为字母和数字
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            System.out.println(sendSmsResponse.getBody());
            System.out.println(sendSmsResponse.getHeaders());
            System.out.println(sendSmsResponse.getStatusCode());
        } catch (TeaException error) {
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }
}

上述代码即是官网最新(本文时间)SDK。

封装工具类:

xml(依赖):基于springboot

   <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
    </parent>

<dependencies>
        <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>
<!--        阿里大于-->

        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.24</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>

 code:

package cn.itcast.sms.util;

import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import org.springframework.stereotype.Component;

import java.util.Map;

@Component
public class SmsUtil {


 /*   @Autowired
    private Environment environment;*/

    /**
     * 使用AK&SK初始化账号Client
     * @param accessKeyId
     * @param accessKeySecret
     * @return Client
     * @throws Exception
     */
//    自己改造,无需main方法调用,所且不用类加载就加载,调用时加载即,所以不用static修饰,涉及签名且只是方法内部调用,所以private修饰
    private com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception{
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必填,您的 AccessKey ID
                .setAccessKeyId("你的AKID")
                // 必填,您的 AccessKey Secret
                .setAccessKeySecret("你的AKS");
        // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }

    public  void sendSms(Map map) throws Exception {

        // 请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        Client client = createClient("你的AKID", "你的AKS");
        com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
                .setSignName(map.get("signName")+"")
                .setTemplateCode(map.get("templateCode")+"")
                .setPhoneNumbers(map.get("mobile")+"")
                .setTemplateParam(map.get("templateParam")+"");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 复制代码运行请自行打印 API 的返回值
            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
            System.out.println(sendSmsResponse.getBody());
//            System.out.println(sendSmsResponse.getHeaders());
            System.out.println(sendSmsResponse.getStatusCode());
        } catch (TeaException error) {
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // 错误 message
            System.out.println(error.getMessage());
            // 诊断地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }
    }




}

测试:

import cn.itcast.sms.util.SmsUtil;
import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

public class SmsTest {


    @Test
    public void smsTest() throws Exception {
        SmsUtil smsUtil = new SmsUtil();
        Map map = new HashMap<>();
        map.put("signName","zzn");
        map.put("templateCode","输入你的模板id");
        map.put("mobile","输入你的测试手机号");
        map.put("templateParam","{\"code\":\"zzn888\"}");
        smsUtil.sendSms(map);
    }

}

响应输出:(我个人配置)

com.aliyun.dysmsapi20170525.models.SendSmsResponseBody@647e447
200

以指定手机收到短信为准。

以上代码基于测试发表,作为基本使用的基准,意义旨在为大家摸清道路减少时间,大家可以在此基础上根据实际开发需求进行改造,如:配置文件设置变量等;操作简单,大家根据实际情况进行操作即可。

  • 17
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值