阿里大鱼进行发短信业务---使用详细步骤-Java操作

本文涉及的产品
国际/港澳台短信套餐包,全球plus 100条 6个月
短信服务,100条 3个月
短信服务,200条 3个月
简介: 这篇文章详细介绍了如何在Java中使用阿里大鱼服务来发送短信,包括开通短信服务、签名和模板管理,以及具体的Java开发步骤和代码示例。

前言

  • 阿里大于(原阿里大鱼)是阿里通信旗下产品,融合了三大运营商的通信能力。
  • 阿里大于提供包括短信、语音、流量直充、私密专线、店铺手机号等个性化服务。
  • 短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码、短信通知等。 三网合一专属通道,与工信部携号转网平台实时互联。电信级运维保障,实时监控自动切换,到达率高达99%。
  • 短信服务API提供短信发送、发送状态查询、短信批量发送等能力,在短信服务控制台上添加签名、模板并通过审核之后,可以调用短信服务API完成短信发送等操作。

一、开通短信服务

  1. 步骤一
    在这里插入图片描述
  2. 步骤二:
    在这里插入图片描述
  3. 步骤三:在这里插入图片描述
  4. 步骤四:登录
    在这里插入图片描述
  5. 步骤五:开通
    在这里插入图片描述
  6. 步骤六:激活,有的需要有的不需要,我这里不需要,因为以前办理过阿里云业务
    在这里插入图片描述
  7. 步骤七:充钱,一点点就好了,一条短信0.045
    在这里插入图片描述

二、快速学习

最主要的是左边的侧边栏,都浏览一下,学习一下。
在这里插入图片描述

三、签名管理

1. 何为签名

你收到的垃圾短信中,或者验证码短信中的开头
在这里插入图片描述

2. 添加签名

需要两小时的审核
在这里插入图片描述

四、模板管理

1. 何为模板

就是短信内容
在这里插入图片描述

2. 添加模板

需要两小时的审核
在这里插入图片描述

五、Java中使用阿里大鱼

1. 开发文档

2. 用到的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.feng.alidayu</groupId>
    <artifactId>alidayu-sendMessage</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>3.2.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-dysmsapi -->
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.1.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.29</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
    </dependencies>
</project>

3. 开发前注意的点

  1. 申请签名和模块,要求挺多,需要两小时。
  2. 需要申请 AccessKey , 可以在开发文档中 API参考AccessKey 文章中根据流程申请
  3. 申请之后还需要为 AccessKey 进行 赋予 权限 ``

4. 自己的开发案例

里面有的类不再编写,

package com.feng.alidayu;

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.springframework.util.StringUtils;

public class SendMessage {
    /**
     * 发送短信服务的参数
     * accessKeyId 阿里云AK
     * accessKeySecret 阿里云SK
     * product 云通信短信API产品
     * domain 产品域名
     */
    //初始化ascClient需要的几个参数
    static final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)
    static final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)
    //替换成你的AK
    static final String accessKeyId = "yourAccessKeyId";//你的accessKeyId,参考本文档步骤2LTAI4GCRrneGRQfmX78mxKzm
    static final String accessKeySecret = "yourAccessKeySecret";//你的accessKeySecret,参考本文档步骤  2WOjZlJVfOH4oOnCjPqasvlhq7UbmTK1

    public static void main(String[] args) {
        // 发送短信
        sendSms();
    }

    /**
     * 普通发送短信验证码接口
     */
    public static void sendSms() {
        String IP = "";
        String method = "selectsms";
        try {
            //设置超时时间-可自行调整
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");

            //初始化ascClient,暂时不支持多region(请勿修改)
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
            DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
            IAcsClient acsClient = new DefaultAcsClient(profile);

            //组装请求对象
            SendSmsRequest request = new SendSmsRequest();
            //使用post提交
            request.setMethod(MethodType.POST);
            //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000”
            request.setPhoneNumbers("1500000000");
            //必填:短信签名-可在短信控制台中找到
            request.setSignName("云通信");
            //必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
            request.setTemplateCode("SMS_1000000");

            //向数据库中插入数据
            // SmsActivationModel smsActivationModel = new SmsActivationModel();
            //设置验证码
            // smsActivationModel.setVerificationCode(sixValCode);
            //设置入库时间
            // smsActivationModel.setRecordTime(new Date());
            //设置用户手机号
            // smsActivationModel.setUserCode(phoneNo);

            //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
            //参考:request.setTemplateParam("{\"变量1\":\"值1\",\"变量2\":\"值2\",\"变量3\":\"值3\"}")
            request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");

            //可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
            //request.setSmsUpExtendCode("90997");

            //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
            request.setOutId("yourOutId");

            //请求失败这里会抛ClientException异常
            SendSmsResponse sendSmsResponse = null;
            sendSmsResponse = acsClient.getAcsResponse(request);
            if(sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
                // 请求成功
                // int i = smsActivationService.insertSmsActivationModel(smsActivationModel);
            }
        } catch (ClientException e) {
            System.out.println("ResponseCode.SYSTEM_REQ_FAIL: 短信服务系统参数错误");
        } catch (ClassCastException e) {//请求参数格式错误
            System.out.println("ResponseCode.SYSTEM_REQ_FAIL: 请求参数格式错误");
        } catch (NumberFormatException e) {
            System.out.println("ResponseCode.SYSTEM_REQ_FAIL: 请求参数格式错误");
        } catch (Exception e) {//系统未知异常
            System.out.println("ResponseCode.SYSTEM_REQ_FAIL: 短信服务系统参数错误");
        }
    }

    /**
     * 注册时使用
     * 
     * @param data
     * @return
     */
    public static void regselectsms(JSONObject data) {
        String IP = "";
        String method = "regselectsms";
        try {
            String phoneNo = (String) data.get("phoneNo");
            if (!StringUtils.isEmpty(phoneNo)) {
                //检验手机号是否正确
                String MPHONE_REGEX = "(\\+\\d+)?1[123456780]\\d{9}$";
                if(!phoneNo.matches(MPHONE_REGEX)){
                    System.out.println("手机号输入错误");;
                }
                //判断用户是否存在 userbaseService 用户业务类,此处不再创建
                if(userbaseService.selectUserbaseByPhone(phoneNo) != null){
                    System.out.println("用户不存在");;
                }
                //判断时间60秒内不能重复请求 smsActivationService 信息时间验证类,此处不再创建
                if (smsActivationService.valTimeOut(phoneNo)) {
                    System.out.println("60s内重复请求短信服务");
                }
                //自助调整超时时间
                System.setProperty("sun.net.client.defaultConnectTimeout", "300000");
                System.setProperty("sun.net.client.defaultReadTimeout", "300000");
                //初始化acsClient,暂不支持region化
                IClientProfile profile = DefaultProfile.getProfile("cn-beijing", accessKeyId, accessKeySecret);
                DefaultProfile.addEndpoint("cn-beijing", "cn-beijing", product, domain);
                IAcsClient acsClient = new DefaultAcsClient(profile);
                //组装请求对象
                SendSmsRequest request = new SendSmsRequest();
                //待发送手机号
                request.setPhoneNumbers(phoneNo);
                //短信签名-可在短信控制台中找到
                request.setSignName("企通查");
                //短信模板-可在短信控制台中找到
                request.setTemplateCode("SMS_121146507");
                //模板中的变量替换JSON串,如模板内容为"您的验证码为${code}"时,此处的值为
                String sixValCode = CodeUtil.getSixValCode();

                //向数据库中插入数据
                // SmsActivationModel smsActivationModel = new SmsActivationModel();
                //设置验证码
                // smsActivationModel.setVerificationCode(sixValCode);
                //设置入库时间
                // smsActivationModel.setRecordTime(new Date());
                //设置用户手机号
                // smsActivationModel.setUserCode(phoneNo);

                request.setTemplateParam("{\"code\":\"" + sixValCode + "\"}");

                //此处可能会抛出异常,注意catch
                //发短信
                SendSmsResponse response = acsClient.getAcsResponse(request);
                if (!"OK".equals(response.getCode())) {//短信发送失败
                    System.out.println("短信发送失败");
                }
                // int i = smsActivationService.insertSmsActivationModel(smsActivationModel);
            } else {//缺少参数
                System.out.println("手机号不能为空");;
            }
        } catch (ClientException e) {
            System.out.println("短信服务系统参数错误");
        } catch (ClassCastException e) {//请求参数格式错误
            System.out.println("请求参数格式错误");
        } catch (NumberFormatException e) {
            System.out.println("请求参数格式错误");
        } catch (Exception e) {//系统未知异常
            System.out.println("请求参数格式错误");
        }
    }
}
相关文章
|
22天前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
27天前
|
数据采集 Java API
java怎么设置代理ip:简单步骤,实现高效网络请求
本文介绍了在Java中设置代理IP的方法,包括使用系统属性设置HTTP和HTTPS代理、在URL连接中设置代理、设置身份验证代理,以及使用第三方库如Apache HttpClient进行更复杂的代理配置。这些方法有助于提高网络请求的安全性和灵活性。
|
4月前
|
SQL 存储 Java
完整java开发中JDBC连接数据库代码和步骤
该博客文章详细介绍了使用JDBC连接数据库的完整步骤,包括加载JDBC驱动、提供连接URL、创建数据库连接、执行SQL语句、处理结果以及关闭JDBC对象的过程,并提供了相应的示例代码。
|
4月前
|
缓存 NoSQL Java
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
【Azure Redis 缓存】定位Java Spring Boot 使用 Jedis 或 Lettuce 无法连接到 Redis的网络连通性步骤
|
4月前
|
Oracle Java 关系型数据库
简单记录在Linux上安装JDK环境的步骤,以及解决运行Java程序时出现Error Could not find or load main class XXX问题
本文记录了在Linux系统上安装JDK环境的步骤,并提供了解决运行Java程序时出现的"Error Could not find or load main class XXX"问题的方案,主要是通过重新配置和刷新JDK环境变量来解决。
153 0
|
5月前
|
SQL Java 关系型数据库
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
Java面试题:描述JDBC的工作原理,包括连接数据库、执行SQL语句等步骤。
72 0
|
6月前
|
存储 NoSQL Java
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
Redis系列学习文章分享---第三篇(Redis快速入门之Java客户端--短信登录+session+验证码+拦截器+登录刷新)
106 0
|
6月前
|
存储 Java API
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
94 0
|
7月前
|
Oracle 安全 Java
JAVA用Mail发送API的方法步骤教程
使用Java和Mail发送API实现自动化邮件发送,提高效率。步骤包括:1. 安装JDK并配置JAVA_HOME,2. 添加JavaMail库(可通过Maven或官网下载)。配置邮件发送涉及邮件服务器地址、端口和认证信息。创建邮件会话、邮件消息对象,然后使用Transport发送。示例代码展示完整流程。注意处理认证失败、连接问题和邮件发送失败等常见问题。
|
7月前
|
Java
在Java中,定义一个接口的步骤如下
【4月更文挑战第6天】在Java中,定义一个接口的步骤如下
41 1