先登陆阿里大于官网注册一个账号然后开通短信服务
已经开通了所以不需要再开通了
首先是得到(创建一个)AccessKey,在右上角可以创建
然后得到一个AccessKey,查看Access Key Secret需要再填一次密码还是获取一个短信验证我忘了大家申请之后可以自行查看
将获取到的这个AccessKey ID及Access Key Secret保存下来以便下次使用
//AccessKey ID:LTAIH7HUnyYchCIe
//Access Key Secret:XXXXXXXXXXXXXXXXXXXXXXXXXXX
选择刚刚应用开发-模板管理
选择添加模板,然后就是签名(要不要无所谓不过还是写上吧。。。)这个签名需要一个验证,如果用的是公司项目就填公司的,如果是自己个人就写自己的真实姓名即可
完了我们将三个东西记住然后开始写代码:AccessKey ID,Access Key Secret,SMS_139570117(模板code)
首先呢,我们创建一个工具类:
先上项目分支结构:spring-boot
工具类:SendCode
package com.jxjc.utils;
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;
public class SendCode {
// 随机验证码
private int code;
public int getCode() {
return code;
}
public void setCode() {
code = (int) (Math.random() * 9999) + 1000; // 每次调用生成一次四位数的随机数
}
//AccessKey ID:LTAIH7HUnyYchCIe
//Access Key Secret:XQrkdw7nUQGVFuDcXFh7nNfbU3v93O
/*
* 发送验证码的方法
*
* @param luoyunlong2
*/
public static SendSmsResponse sendSms(String phoneNumber,String code) throws ClientException {
//超时时间修改
System.setProperty("sun.net.client.defaultConnectTimeout", "5000");//不必修改
System.setProperty("sun.net.client.defaultReadTimeout", "5000");//不必修改
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAIH7HUnyYchCIe", "XQrkdw7nUQGVFuDcXFh7nNfbU3v93O");
//"***"分别填写自己的AccessKey ID和Secret
//Dysmsapi短信API产品名称(短信产品名固定,无需修改)
//dysmsapi.aliyuncs.com短信API产品域名(接口地址固定,无需修改)
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Dysmsapi", "dysmsapi.aliyuncs.com");//不必修改
IAcsClient acsClient = new DefaultAcsClient(profile);//不必修改
//组织请求对象
SendSmsRequest request = new SendSmsRequest();//不必修改
request.setMethod(MethodType.POST);
//*此处填写接收方的手机号码
request.setPhoneNumbers(phoneNumber);
//此处填写已申请的短信签名
request.setSignName("车管家");
//此处填写获得的短信模版CODE
request.setTemplateCode("SMS_139570117");
//笔者的短信模版中有${code}, 因此此处对应填写验证码
SendCode sendcode = new SendCode();
sendcode.setCode();
code = sendcode.getCode()+"";
request.setTemplateParam("{\"code\":\""+code+"\"}");
//request.setOutId("1111111");
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);//不必修改
if(sendSmsResponse.getCode()!=null) {
System.out.println("发送短信验证码成功,验证码为:"+code);
}
else {
System.out.println("发送短信验证码失败");
}
return sendSmsResponse;
}
}
在controller里面调用
在userController里面新建一个用于调用工具类的方法:sendcode
/*
* 发送手机验证码短信
*/
@RequestMapping(value = "/sendcode",method = RequestMethod.POST)
@ResponseBody
public void sendcode(HttpServletRequest request, HttpServletResponse response)
throws ClientException, ServletException, IOException {
response.setContentType("application/json;charset=UTF-8");
SendCode sendcode = new SendCode();
User user = new User();
String tel = request.getParameter("telphone");
String yzm = request.getParameter("yanzhengma");
sendcode.sendSms(tel, yzm);
int code = sendcode.getCode();
user.setTelphone(tel);
String yanzhengma = sendcode.sendSms(request.getParameter("telphone"),
request.getParameter("yanzhengma")) .getCode(); if
(yanzhengma.equals(request.getParameter("yanzhengma"))) { // 短信验证码验证成功
System.out.println("短信发送成功");
}