首先,这个是绝对可以实现的,后面也会附上完整的源码。
1。首先打开阿里云短信服务
看到下面图示的两个箭头所指的位置获取四个信息
1.1 首先点击AccessKey,获得下面箭头所指的信息
1.2 然后点击添加签名和添加模板,按提示输入信息注意一定要按规范填写,不然很容易不通过,我审核了三次,每次2小时。不要填太广泛的签名。
签名和模板分别代表:老黄JAVA个人博客和信息主体
到这里基本工作就已经做好了,下面上代码
2.代码
2.1 添加依赖
<!--短信发送 start-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.0</version>
<exclusions>
<exclusion>
<artifactId>commons-codec</artifactId>
<groupId>commons-codec</groupId>
</exclusion>
<exclusion>
<artifactId>activation</artifactId>
<groupId>javax.activation</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>1.1.0</version>
</dependency>
<!--end-->
2.2 前端
<form action="/sendCode" method="post">
电话:<input type="text" name="phone"/>
<input type="submit" value="发送验证码"/>
<p th:text="${msg}"></p>
</form>
2.3 控制器
//发送短信
@RequestMapping(value = "/sendCode")
public Object sendCode(Model m , String phone){
try{
SendMessageService.sendSms(phone);
}catch (Exception e){
m.addAttribute("msg","发送失败");
}
return "userRegister";
}
2.4 随机生成验证码类
private static String getMsgCode() {
int n = 6;
StringBuilder code = new StringBuilder();
Random ran = new Random();
for (int i = 0; i < n; i++) {
code.append(Integer.valueOf(ran.nextInt(10)).toString());
}
return code.toString();
}
2.5 发送短信核心类
将上面生成的四个信息填入下面用******标记的部分
//阿里云短信接口配置类
public class SendMessageService {
/* 短信API产品名称(短信产品名固定,无需修改) */
private static final String product = "Dysmsapi";
/* 短信API产品域名,接口地址固定,无需修改 */
private static final String domain = "dysmsapi.aliyuncs.com";
/* 此处需要替换成开发者自己的accessKeyId和accessKeySecret(在阿里云访问控制台寻找) */
private static final String accessKeyId = "******"; //TODO: 这里要写成你自己生成的
private static final String accessKeySecret = "********";//TODO: 这里要写成你自己生成的
/* 短信发送 */
public static SendSmsResponse sendSms(String phone) throws ClientException {
/* 超时时间,可自主调整 */
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
/* 初始化acsClient,暂不支持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();
/* 必填:待发送手机号 */
request.setPhoneNumbers(phone);
/* 必填:短信签名-可在短信控制台中找到 */
request.setSignName("********"); //TODO: 这里是你短信签名
/* 必填:短信模板code-可在短信控制台中找到 */
request.setTemplateCode("********"); //TODO: 这里是你的模板code
/* 可选:模板中的变量替换JSON串,如模板内容为"亲爱的用户,您的验证码为${code}"时,此处的值为 */
request.setTemplateParam("{\"code\":\"" + getMsgCode() + "\"}");
System.out.println("给电话为"+phone+"发送的验证码为:"+getMsgCode());
// hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse.getCode()!= null && sendSmsResponse.getCode().equals("OK")){
System.out.println("短信发送成功!验证码:" + getMsgCode());
}else {
System.out.println("短信发送失败!");
}
return sendSmsResponse;
}
前端输入电话号码,点击发送,就行了。如果控制台出现短信发送失败,可以是由于账户没钱的缘故,也可以先进行模拟,在阿里云中进行测试短信发送。
通过填入上面通过的签名和模板便可以进行测试,如果发送失败,会出现错误类型和详细的错误原因。如果想要查看其他语言的Api ,点击查看API Demo就行了