阿里大鱼进行发短信业务

阿里大鱼进行发短信业务

前言

阿里大于(原阿里大鱼)是阿里通信旗下产品,融合了三大运营商的通信能力。

阿里大于提供包括短信、语音、流量直充、私密专线、店铺手机号等个性化服务。

短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码、短信通知等。 三网合一专属通道,与工信部携号转网平台实时互联。电信级运维保障,实时监控自动切换,到达率高达99%。

短信服务API提供短信发送、发送状态查询、短信批量发送等能力,在短信服务控制台上添加签名、模板并通过审核之后,可以调用短信服务API完成短信发送等操作。

一、开通短信服务

步骤一

步骤二:

步骤三:

步骤四:登录

步骤五:开通

步骤六:激活,有的需要有的不需要,我这里不需要,因为以前办理过阿里云业务

步骤七:充钱,一点点就好了,一条短信0.045

二、快速学习

最主要的是左边的侧边栏,都浏览一下,学习一下。

三、签名管理

1. 何为签名

你收到的垃圾短信中,或者验证码短信中的开头

2. 添加签名

需要两小时的审核

四、模板管理

1. 何为模板

就是短信内容

2. 添加模板

需要两小时的审核

五、Java中使用阿里大鱼

1. 开发文档

开发api文档:进入开发api文档

官方demo演示:demo

2. 用到的依赖

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">

4.0.0

com.feng.alidayu

alidayu-sendMessage

1.0-SNAPSHOT

com.aliyun

aliyun-java-sdk-core

3.2.3

com.aliyun

aliyun-java-sdk-dysmsapi

2.1.0

com.alibaba

fastjson

1.2.29

org.springframework.data

spring-data-commons

2.0.0.RELEASE

3. 开发前注意的点

申请签名和模块,要求挺多,需要两小时。

需要申请 AccessKey , 可以在开发文档中 API参考 中 AccessKey 文章中根据流程申请

申请之后还需要为 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("请求参数格式错误");

}

}

}

相关推荐

365登录器 原创《沉没之城》图文攻略:全剧情流程+全支线+全怪物+全克苏鲁知识+全服装+游戏操作+游戏介绍【游侠攻略组】
office365网页版无法使用 意料之外,满满的惊喜 —— MX365
36365 为什么一刷抖音就停不下来?一文轻松看懂推荐系统背后原理