Java 集成阿里云发送短信
首先要有个阿里云账号,可到阿里云登录页注册并登录。
登录后访问短信服务快速学习和测试,其中有逐步介绍如何发送短信:
新增资质
新增资质相当于进行实名认证,资质是申请签名的实名化信息。
申请签名
签名是短信中能代表发送者属性的字段。一般就是公司名字。发送短信时,签名会附加到短信开头。
申请模板
短信是基于模板的,模板中带有变量占位符,变量格式如${code}
,仅支持 1 个变量。
例如:您的验证码为${code}
,该验证码 5 分钟内有效,请勿泄露于他人。
系统设置
配置接收发送短信的结果等,不需要的话就不用配置。
发送短信
先绑定测试手机号码,然后选择自己新建的签名/模板,点击调用API发送短信
按钮后会跳转到示例代码。这里就直接选择测试签名/模板了。
下面为给出的示例代码:
// This file is auto-generated, don't edit it. Thanks.
package com.demo.sms;
import com.aliyun.tea.*;
public class Sample {
/**
* <b>description</b> :
* <p>使用 AK&SK 初始化账号 Client</p>
*
* @return Client
* @throws Exception
*/
public static com.aliyun.dysmsapi20170525.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
// 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_);
com.aliyun.dysmsapi20170525.Client client = Sample.createClient();
com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
.setSignName("阿里云短信测试")
.setTemplateCode("SMS_154950909")
.setPhoneNumbers("183xxxxxxxx")
.setTemplateParam("{\"code\":\"1234\"}");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 复制代码运行请自行打印 API 的返回值
client.sendSmsWithOptions(sendSmsRequest, runtime);
} 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:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>3.0.0</version>
</dependency>
核心步骤为:
- 创建配置
- 设置签名、模板、手机号和模板中要用到的参数
- 发送短信
// 创建配置
public static com.aliyun.dysmsapi20170525.Client createClient() throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.dysmsapi20170525.Client(config);
}
// 设置签名、模板、手机号和模板中要用到的参数
com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
.setSignName("阿里云短信测试")
.setTemplateCode("SMS_154950909")
.setPhoneNumbers("183xxxxxxxx")
.setTemplateParam("{\"code\":\"1234\"}");
// 发送短信
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
client.sendSmsWithOptions(sendSmsRequest, runtime);
注意第一步从环境中获取ALIBABA_CLOUD_ACCESS_KEY_ID
、ALIBABA_CLOUD_ACCESS_KEY_SECRET
变量来构建Config
。这两个值(AccessKey ID 和 AccessKey Secret)是访问阿里云 API 的密钥:
另:参考
https://api.aliyun.com/product/Dysmsapi
根据需要调整Config.endpoint
。