Java 发送短信验证码
每篇一句励志:青春是一本太仓促的书,我们含着泪,一读再读。
一、发送短信的基础配置
sms.domain = ‘写你购买短信的API’
sms.version = ‘版本信息或者直接写个时间’
sms.action = SendSms
sms.regionid = ‘地区’
sms.signname = ‘短信签名’
sms.templatecode = ‘短信模板code’
二、代码实现
@Value("${sms.domain}")
private String domain;
@Value("${sms.version}")
private String version;
@Value("${sms.action}")
private String action;
@Value("${sms.regionid}")
private String regionid;
@Value("${sms.signname}")
private String signname;
@Value("${sms.templatecode}")
private String templatecode;
public JsonResult sendMsg(HttpServletRequest servletRequest, String phone){
String code = SmsGenUtil.getNonce_str();//生成的验证码
DefaultProfile profile = DefaultProfile.getProfile(regionid, "accessKeyId", "secret");
// 后边俩个需要填写你自己的信息
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain(domain);
request.setVersion(version);
request.setAction(action);
request.putQueryParameter("RegionId", regionid);
request.putQueryParameter("PhoneNumbers", phone);
request.putQueryParameter("SignName", signname);
request.putQueryParameter("TemplateCode", templatecode);
com.alibaba.fastjson.JSONObject jo = new com.alibaba.fastjson.JSONObject();
jo.put("code", code);
request.putQueryParameter("TemplateParam", jo.toJSONString());
try {
CommonResponse response = client.getCommonResponse(request);
String res = response.getData();
JSONObject parse = JSONObject.parse(res);
if(parse.get("Code").equals("OK")) {
HttpSession session = servletRequest.getSession();
session.setMaxInactiveInterval(60 * 5);//session 最大存放时间为5分钟
session.setAttribute("smsCode", code);
// 我这里把生成的验证码放入session 以便于注册时的校验。你可以存表
} else {
logger.error(parse.getString("Message"));//发送时报错返回的信息
System.out.println("error:"+parse);
return JsonResult.failure("验证码发送失败");
}
} catch (ServerException e) {
e.printStackTrace();
return JsonResult.failure("验证码发送失败");
} catch (ClientException e) {
e.printStackTrace();
return JsonResult.failure("验证码发送失败");
}
return JsonResult.success("验证码发送成功", 0);
}
生成验证码的工具类
生成验证码的方法有很多,大家可以自行选择。
public class SmsGenUtil {
private static final String SYMBOLS = "0123456789"; // 数字
private static final Random RANDOM = new SecureRandom();
/**
* 获取长度为 6 的随机数字
* @return 随机数字
* @date
*/
public static String getNonce_str() {
// 如果需要4位,那 new char[4] 即可,其他位数同理可得
char[] nonceChars = new char[4];
for (int index = 0; index < nonceChars.length; ++index) {
nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));
}
return new String(nonceChars);
}
}
这代码拿过去就可以直接用了。 有什么不对的地方欢迎大家指导。