1、先使用阿里云平台账号购买短信包,创建RAM用户,并分配短信权限;创建签名并审核通过;
2、创建短信模板并审核通过;
3、最新版阿里云短信验证码,可以自己写个发送工具类,可直接传参调用。
下边代码为使用阿里云官网测试用例测试通过后生成的代码修改而来,需要的话可以参考一下:
Maven依赖:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.24</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-openapi</artifactId>
<version>0.2.8</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-console</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea-util</artifactId>
<version>0.2.16</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>tea</artifactId>
<version>1.1.14</version>
</dependency>
发送代码:
package com....;
import com.aliyun.dysmsapi20170525.models.SendSmsResponseBody;
/**
* 功能: 阿里云发送短信验证码 TODO.<br/>
* date: 2023/7/5 0005 15:34<br/>
*
* @author Baymax
* @since JDK 1.8
*/
public class SendMsgUtils {
static final String accessKeyId = "你自己的accessKey ID";
static final String accessKeySecret = "你自己的accessKey Secret";
static final String signName = "你自己的签名模板的名称";
/**
* 功能: 阿里云发送短信验证码 TODO.<br/>
* date: 2023/7/5 0005 15:34<br/>
* @param telephone 接收短信的手机号
* @param code 要发送的验证码
* @author Baymax
* @since JDK 1.8
*/
public static SendSmsResponseBody sendSms(String telephone, String code) throws Exception {
com.aliyun.dysmsapi20170525.Client client = SendMsgUtils.createClient(accessKeyId, accessKeySecret);
com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
.setPhoneNumbers(telephone)
.setSignName(signName)
.setTemplateCode("你自己的短信模板code")
.setTemplateParam("{\"code\":\"" + code + "\"}");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
com.aliyun.dysmsapi20170525.models.SendSmsResponse resp = client.sendSmsWithOptions(sendSmsRequest, runtime);
return resp.getBody();
}
/**
* 使用AK&SK初始化账号Client
* @param accessKeyId
* @param accessKeySecret
* @return Client
* @throws Exception
*/
public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,您的 AccessKey ID
.setAccessKeyId(accessKeyId)
// 必填,您的 AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.dysmsapi20170525.Client(config);
}
/**
* 使用STS鉴权方式初始化账号Client,推荐此方式。
* @param accessKeyId
* @param accessKeySecret
* @param securityToken
* @return Client
* @throws Exception
*/
public static com.aliyun.dysmsapi20170525.Client createClientWithSTS(String accessKeyId, String accessKeySecret, String securityToken) throws Exception {
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
// 必填,您的 AccessKey ID
.setAccessKeyId(accessKeyId)
// 必填,您的 AccessKey Secret
.setAccessKeySecret(accessKeySecret)
// 必填,您的 Security Token
.setSecurityToken(securityToken)
// 必填,表明使用 STS 方式
.setType("sts");
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
return new com.aliyun.dysmsapi20170525.Client(config);
}
// 以下为测试代码,随机生成验证码
private static int newcode;
public static int getNewcode() {
return newcode;
}
public static void setNewcode() {
newcode = (int) (Math.random() * 9999) + 100; // 每次调用生成一次四位数的随机数
}
public static void main(String[] args_) throws Exception {
java.util.List<String> args = java.util.Arrays.asList(args_);
setNewcode();
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html
com.aliyun.dysmsapi20170525.Client client = SendMsgUtils.createClient(accessKeyId, accessKeySecret);
com.aliyun.dysmsapi20170525.models.SendSmsRequest sendSmsRequest = new com.aliyun.dysmsapi20170525.models.SendSmsRequest()
.setPhoneNumbers("接收短信验证码的手机号")
.setSignName(signName)
.setTemplateCode("你自己的短信模板code")
.setTemplateParam("{\"code\":\"" + getNewcode() + "\"}");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
com.aliyun.dysmsapi20170525.models.SendSmsResponse resp = client.sendSmsWithOptions(sendSmsRequest, runtime);
com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(resp));
}
}