packagewww.meizu.com.dao.impl;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.net.HttpURLConnection;importjava.net.MalformedURLException;importjava.net.URL;importjava.security.MessageDigest;importjava.security.NoSuchAlgorithmException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Random;importwww.meizu.com.dao.SmsDao;/*** 生产短信验证码持久接口实现类
*@authorAdministrator
**/
public class SmsDaoImpl implementsSmsDao{//这里的3个String 属性对应的用户中心里的开发者信息里面的ACCOUNT SID 和 AUTHTOKEN 还有验证码通知短信接口中的请求地址这3个属性待会需要用到
private String sendUrl="https://api.miaodiyun.com/20150822/industrySMS/sendSMS";private String ACCOUNTSID="d85da4485e094a5296c2d401f459d487";private String AUTHTOKEN="e225e0ef637046bc8eb72818923a808c";
OutputStreamWriter osw=null;
BufferedReader br=null;private String code="";/*** 获取6位数验证码的方法
*@return
*/
publicString getCode(){returncode;
}
@OverridepublicString getSmsCode(String phone) {
String smsCode=smsCode();//获取随机短信验证码
code=smsCode;
String timeStamp=getTimeStamp();//获取时间戳
String md5=getMD5(ACCOUNTSID,AUTHTOKEN,timeStamp);//获取签名
String smsMoban="【j37】尊敬的用户,您的验证码为"+smsCode;
StringBuilder sb=newStringBuilder();try{
URL url=new URL(sendUrl);//导net的包
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");//设置传送数据的方式
connection.setDoInput(true);//设置是否允许数据写入
connection.setDoOutput(true);//设置是否允许数据输出
connection.setConnectTimeout(5000);//设置连接时间
connection.setReadTimeout(10000);//设置读取参数的时间
connection.setRequestProperty("Content-type","application/x-www-form-urlencoded");//设置请求头
String args=pinJie(ACCOUNTSID,smsMoban,phone,timeStamp,md5,"JSON");
System.out.println(args);
osw=new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
osw.write(args);
osw.flush();//读取返回参数
br=new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));
String temp="";while((temp=br.readLine())!=null){
sb.append(temp);
}
}catch(MalformedURLException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}returnsb.toString();
}/*** 获取时间戳,生产短信验证码需要时间戳
*@return
*/
public staticString getTimeStamp(){return new SimpleDateFormat("yyyyMMddHHmmss").format(newDate());
}/*** 短信签名,生产短信验证码需要签名
* 签名。MD5(ACCOUNT SID + AUTH TOKEN + timestamp)共32位(小写)。
*@paramsdk 开发者账号
*@paramtoken 开发者密码
*@paramtimeStamp 时间戳
*@return
*/
public staticString getMD5(String sdk,String token,String timeStamp){
StringBuilder sb=newStringBuilder();
String source=sdk+token+timeStamp;try{
MessageDigest md=MessageDigest.getInstance("MD5");byte[] b=md.digest(source.getBytes());for (bytec : b) {
String hex=Integer.toHexString(c&0xff);if(hex.length()==1){
sb.append("0"+hex);
}else{
sb.append(hex);
}
}
}catch(NoSuchAlgorithmException e) {
e.printStackTrace();
}returnsb.toString();
}/*** 生成短信验证码
*@return返回验证码*/
public staticString smsCode(){
String code=new Random().nextInt(1000000)+"";if(code.length()!=6){return smsCode();//不够6位,再次调用自己的方法,递归
}else{returncode;
}
}/*** 请求参数拼接
*@paramaccounSid
*@paramsmsContent
*@paramto
*@paramtimestamp
*@paramsig
*@paramrespDataType
*@return返回拼接好的参数*/
public staticString pinJie(String accounSid,String smsContent,String to,String timestamp,String sig,String respDataType){//accountSid=a14f6bfd43ce44c9b019de57f4e2de4b&smsContent=【秒嘀科技 to】您的验证码是345678,30分钟输入有效。//&to=13896543210×tamp=20150821100312&sig=a14f6bfd43ue44c9b019du57f4e2ee4r&respDataType=JSON
return "accountSid="+accounSid+"&smsContent="+smsContent+"&to="+to+"×tamp="+timestamp+"&sig="+sig+"&respDataType="+respDataType;
}
}