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);
    }
}

这代码拿过去就可以直接用了。 有什么不对的地方欢迎大家指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值