JAVAEE细细看 框架21 -阿里云短信服务

本文详细介绍了如何在阿里云上申请短信服务,包括设置短信签名、模板,配置AccessKeys,以及通过Java代码实现短信发送的过程。涵盖了从注册到实际应用的全部步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿里云短信服务

1. 申请

阿里云:https://www.aliyun.com/

短信发送使用场景:

1.在线预约时,确认手机号

2.预约成功之后,发送通知

3.手机号快速登录

注册阿里云是免费的,短信服务是收费的

2. 设置短信签名、设置短信模板

2.1 短信服务-国内消息-签名管理-添加签名

签名指的是短信发送的内容中最后会留有一个组织或者企业的签名

个人用户只能使用验证码,需要2个小时左右的验证时间

2.2 短信服务-国内消息-模板管理-添加模板

模板指的是发送给用户的短信内容

模版内容:给用户发送验证码的内容

可以使用常用模板库快速生成

3. 设置access keys

鼠标放在个人头像上,会出现accessKeys,点击进去。

4. 代码实现

导入maven坐标(新)

    <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.1.0</version>
        </dependency>
                <dependency>
                    <groupId>com.google.code.gson</groupId>
                    <artifactId>gson</artifactId>
                    <version>2.8.2</version>
                </dependency>

老版本

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.3.1</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
    <version>1.0.0</version>
</dependency>

导入SMSUtils

package com.ittest.utils;

//import com.aliyuncs.CommonRequest;
//import com.aliyuncs.CommonResponse;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

/**
 * 短信发送工具类
 */
public class SMSUtils {
	public static final String VALIDATE_CODE = "";//模板code
	public static final String ORDER_NOTICE = "";//体检预约成功通知,暂时用不了
	public static final String accessKeyId = "";// 你的accessKeyId,参考本文档步骤2
	public static final String accessKeySecret = "";// 你的accessKeySecret,参考本文档步骤2
	public static final String signName = "";// 签名名称
	/**
	 * 发送短信
	 * @param phoneNumbers
	 * @param param
	 * @throws ClientException
	 */
	public static void sendShortMessage(String templateCode,String phoneNumbers,String param) throws ClientException{
		// 设置超时时间-可自行调整
//		System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
//		System.setProperty("sun.net.client.defaultReadTimeout", "10000");
////		// 初始化ascClient需要的几个参数
//		final String product = "Dysmsapi";// 短信API产品名称(短信产品名固定,无需修改)
//		final String domain = "dysmsapi.aliyuncs.com";// 短信API产品域名(接口地址固定,无需修改)
////		// 替换成你的AK
//
////		// 初始化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个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
//		request.setPhoneNumbers(phoneNumbers);
//		// 必填:短信签名-可在短信控制台中找到
//		request.setSignName(signName);
//		// 必填:短信模板-可在短信控制台中找到
//		request.setTemplateCode(templateCode);
//		// 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
//		// 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
//		request.setTemplateParam("{\"code\":\""+param+"\"}");
//		// 可选-上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
//		// request.setSmsUpExtendCode("90997");
//		// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
//		// request.setOutId("yourOutId");
//		// 请求失败这里会抛ClientException异常
//		SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
//		if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
//			// 请求成功
//			System.out.println("请求成功");
//		}else{
//			System.out.println(sendSmsResponse.getCode());
//			System.out.println(sendSmsResponse.getMessage());
//		}

		DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
		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("RegionId", "cn-hangzhou");
		request.putQueryParameter("PhoneNumbers", phoneNumbers);
		request.putQueryParameter("SignName", signName);
		request.putQueryParameter("TemplateCode", templateCode);
		request.putQueryParameter("TemplateParam", "{\"code\":\""+param+"\"}");
		try {
			CommonResponse response = client.getCommonResponse(request);
			System.out.println(response.getData());
		} catch (ServerException e) {
			e.printStackTrace();
		} catch (ClientException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws ClientException {
		String s = ValidateCodeUtils.generateValidateCode4String(6);
		SMSUtils.sendShortMessage(SMSUtils.VALIDATE_CODE,"",s);
	}
}

1.VALIDATE_CODE和ORDER_NOTICE指定模板的CODE

2.request.setSignName(“我的app名称”);设置签名的名称,在阿里云签名管理中定义的名字

3.request.setTemplateParam("{“code”:""+param+""}");设置参数,拼合成JSON发送即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值