package com.javaweb.platform.utils; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Random; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javaweb.common.utils.IdGenerate; import com.javaweb.common.utils.StringUtils; import com.javaweb.platform.domain.Validcode; import com.javaweb.platform.mapper.ValidcodeMapper; import com.aliyun.tea.*; import com.aliyun.dysmsapi20170525.*; import com.aliyun.dysmsapi20170525.models.*; import com.aliyun.teaopenapi.*; import com.aliyun.teaopenapi.models.*; @Service public class ValidcodeUtils2 { @Autowired private ValidcodeMapper validcodeMapper; private static final String accessKeyId="LTAI5tJjstk9c2qZs43fbGx9"; private static final String accessKeySecret="sWHErgvNkain06tOBIxmyht1kMwq2H"; private static final String SignName="北京梦之岩"; /** * 向手机发送验证码 * @param type 验证码的类型,1:注册用户,2:修改密码,3:通过审核,4:不通过审核 * @param phone * @param code * @return 0:发送过于频繁,1:正常发送 * @throws Exception */ public int sendMesgToPhone(String type,String phone) throws Exception { if(hasExistsCode(phone,type)) { return 0; } String code = createCode(); String templateParam = "{code:"+code+"}"; com.aliyun.dysmsapi20170525.Client client = createClient(); // SendSmsRequest sendSmsRequest = new SendSmsRequest(); SendSmsRequest sendSmsRequest = createSendSmsRequest(phone, "SMS_237405548", templateParam); // sendSmsRequest.setSignName(SignName); // sendSmsRequest.setPhoneNumbers(phone); // if(type == "1" || type == "2") // { // sendSmsRequest.setTemplateCode("SMS_237405548"); // sendSmsRequest.setTemplateParam("{code:"+code+"}"); // } // else if(type == "3") // { // sendSmsRequest.setTemplateCode("SMS_238461833"); // } // else if(type == "4") // { // sendSmsRequest.setTemplateCode("SMS_238466927"); // } SendSmsResponse r = new SendSmsResponse(); // 复制代码运行请自行打印 API 的返回值 try { r = client.sendSms(sendSmsRequest); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //写入数据库 Validcode validcode = new Validcode(); validcode.setId(IdGenerate.uuid()); validcode.setPhone(phone); validcode.setType(type); validcode.setCreateTime(new Date()); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, 5); validcode.setSendTime(new Date()); validcode.setUntilTime(calendar.getTime()); validcode.setCode(code); validcodeMapper.insertValidcode(validcode); return 1; } /** * 验证码是否有效 * @param code * @param phone * @param type * @return */ public boolean validCode(String code,String phone,String type) { Validcode validcode = new Validcode(); validcode.setCode(code); validcode.setPhone(phone); validcode.setType(type); validcode.setUntilTime(new Date()); List codeList = validcodeMapper.selectValidcodeList(validcode); if(codeList.size() > 0) { return true; } return false; } /** * 查询数据库中,最近50秒是否发送了短信 * @param phone * @return */ private boolean hasExistsCode(String phone,String type) { Validcode validcode = new Validcode(); validcode.setPhone(phone); validcode.setType(type); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.SECOND, -50); validcode.setSendTime(calendar.getTime()); List exisList=validcodeMapper.selectValidcodeList(validcode); if(exisList.size()>0) { return true; } return false; } private String createCode() { //生成六位随机数验证码 String ret = ""; for(int i = 0;i<6;i++) { Random r = new Random(); int j = r.nextInt(10); if(i == 0 && j == 0) { ret += 1; } else { ret += j; } } return ret; } /** * 使用AK&SK初始化账号Client * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ private com.aliyun.dysmsapi20170525.Client createClient() throws Exception { Config config = new Config() // 您的AccessKey ID .setAccessKeyId(accessKeyId) // 您的AccessKey Secret .setAccessKeySecret(accessKeySecret); // 访问的域名 config.endpoint = "dysmsapi.aliyuncs.com"; return new com.aliyun.dysmsapi20170525.Client(config); } /** * 创建发送命令的参数 * @return */ private SendSmsRequest createSendSmsRequest(String phone,String templateCode,String templateParam){ SendSmsRequest sendSmsRequest = new SendSmsRequest(); sendSmsRequest.setSignName(SignName); sendSmsRequest.setPhoneNumbers(phone); sendSmsRequest.setTemplateCode(templateCode); if (!StringUtils.isEmpty(templateParam)) { sendSmsRequest.setTemplateParam(templateParam); } return sendSmsRequest; } }