阿里大鱼进行发短信业务---使用详细步骤-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("请求参数格式错误");
        }
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java冯坚持

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值