JAVA开发短信验证码系统

我的GitHub地址 代码可以在这里下载我的Github点击打开链接

开发一个短信验证码系统,我们是需要去对接外部API的,那么在百度上搜一搜会出现很多,我用的某一家公司的API,为了防止说打广告,最后再放上公司名和链接。

对接一个短信API需要做什么工作呢,不同的API请求参数是不同的,下面以我使用的API参数为例。

这是请求的参数表,必选的是我们必须写上的,到时候我们会把他们拼接到请求地址中。

对于时间戳timestamp和Sig MD5加密我们会在下面使用java来进行处理

 

这边的ID和TOKEN等你注册以后使用自己的就可以了。

 

 

他的官网也给出了请求实例,我们可以参考。

 

---------------------------------------------------------------------------分割线------------------------------------------------------------

首先我们创建一个QueryUtil类,这个类是用来创建生成时间戳和MD5加密,并返回拼接的地址的字符串

 

/**
 * 
 *	发送验证码工具类
 *	QueryUtil
 *	@author houzhiyang
 *	@data 2017-7-12 15:41:12
 *	@version 1.0.0
 */
public class QueryUtil {
	
	
	
	public static String qureyArguments(String ACCOUNT_SID,String AUTH_TOKEN,String smsContent,String to){
		//时间戳
		String timestamp = getTimestamp();
		//签名验证
		String sig = MD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);
		//地址参数拼接
		String str = "accountSid="+ACCOUNT_SID+"&smsContent="+smsContent+
				"&to="+to+"&playTimes=2"+"&timestamp="+timestamp+"&sig="+sig;
		
		return str;
	}
	/**
	 * 获取时间戳
	 * @return
	 */
	
	public static String getTimestamp(){
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
		return format.format(new Date());
	}
	
	public static String MD5(String... args){
		StringBuffer result = new StringBuffer();
		if(args==null||args.length==0){
			return "";
		}else{
			StringBuffer sb = new StringBuffer();
			for (String string : args) {
				sb.append(string);
			}
			System.out.println("编码前:\t"+sb.toString());
			
			MessageDigest digest;
			try {
				digest = MessageDigest.getInstance("MD5");
				
				byte[] bytes = digest.digest(sb.toString().getBytes());
				for (byte b : bytes) {
					String hex = Integer.toHexString(b&0xff);//16进制转换
					if(hex.length()==1){
						result.append("0"+hex);
					}else{
						result.append(hex);
					}
				}
				
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return result.toString();
	}
}


1.对于时间戳的设置,使用SimpleDateFormat类的format方法即可,他会返回String类型。

 

2.MD5加密 使用MessageDigest下的getInstance传入MD5参数获取一个实例,再将传入的参数使用digest方法获取一个byte数组。使用foreach遍历byte数组String hex = Integer.toHexString(b&0xff);//16进制转换 使用这句将其转换为16进制的MD5加密。

 

在建立一个产生随机数的类

/**
 * 
 *	类描述:随机数工具类
 *	RandomUtil
 *	@author houzhiyang
 *	@data 2017-7-12下午9:26:43
 *	@version 1.0.0
 */
public class RandomUtil {
	public static String getRandom(){
		String randNum = new Random().nextInt(1000000)+"";
		if(randNum.length()!=6){
			return getRandom();
		}
		return randNum;
	}
}

 

 

 


最后建立主类GetPhoneMessage

 

/**
 * 
 *	获取短信验证码类
 *	GetPhoneMessage
 *	@author houzhiyang
 *	@data 2017-7-12 5:36:06
 *	@version 1.0.0
 */

public class GetPhoneMessage {
	//用户ID
	public static final String ACCOUNT_SID = "填入你申请账号的对应值";
	//密钥
	public static final String AUTH_TOKEN = "填入你申请账号的对应值";
	//请求地址前半部分
	public static final String BASE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
	//随机数
	public static String randNum = RandomUtil.getRandom();
	//短信内容
	public static String smsContent = "按照你设置的模版内容填写,如不一样会报错";
	/**
	 * 获取短信验证码
	 * @param to
	 * @return
	 */
	public static String getResult(String to){
		String args = QueryUtil.qureyArguments(ACCOUNT_SID, AUTH_TOKEN, smsContent, to);
		System.out.println(args);
		OutputStreamWriter out = null;
		InputStream in = null;
		BufferedReader br = null;
		StringBuffer sb = new StringBuffer();
		try {
			URL url = new URL(BASE_URL);
			URLConnection connection = url.openConnection();//打开链接
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setConnectTimeout(5000);//设置请求链接超时时间
			connection.setReadTimeout(10000);//设置读取结果超时
			//提交数据
			out = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
			out.write(args);
			out.flush();
			//读取返回数据
			
			in = connection.getInputStream();
			br = new BufferedReader(new InputStreamReader(in));
			String line = "";
			while((line =br.readLine())!= null){
				sb.append(line);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return sb.toString();
	}
	
	public static void main(String[] args) {
		System.out.println("验证码:"+randNum);
		System.out.println(getResult("这里传入你要测试的手机号码"));
	}
}
填入你申请账号的对应值";
	//密钥
	public static final String AUTH_TOKEN = "填入你申请账号的对应值";
	//请求地址前半部分
	public static final String BASE_URL = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
	//随机数
	public static String randNum = RandomUtil.getRandom();
	//短信内容
	public static String smsContent = "按照你设置的模版内容填写,如不一样会报错";
	/**
	 * 获取短信验证码
	 * @param to
	 * @return
	 */
	public static String getResult(String to){
		String args = QueryUtil.qureyArguments(ACCOUNT_SID, AUTH_TOKEN, smsContent, to);
		System.out.println(args);
		OutputStreamWriter out = null;
		InputStream in = null;
		BufferedReader br = null;
		StringBuffer sb = new StringBuffer();
		try {
			URL url = new URL(BASE_URL);
			URLConnection connection = url.openConnection();//打开链接
			connection.setDoOutput(true);
			connection.setDoInput(true);
			connection.setConnectTimeout(5000);//设置请求链接超时时间
			connection.setReadTimeout(10000);//设置读取结果超时
			//提交数据
			out = new OutputStreamWriter(connection.getOutputStream(),"UTF-8");
			out.write(args);
			out.flush();
			//读取返回数据
			
			in = connection.getInputStream();
			br = new BufferedReader(new InputStreamReader(in));
			String line = "";
			while((line =br.readLine())!= null){
				sb.append(line);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return sb.toString();
	}
	
	public static void main(String[] args) {
		System.out.println("验证码:"+randNum);
		System.out.println(getResult("这里传入你要测试的手机号码"));
	}
}

 

 

 

 

 

 

 

 

我这边使用的是秒嘀云的API,他对于一个新注册的账号赠送了200条短信的体验,对于我们测试开发来说足够了,我的例子也是使用秒嘀云来进行的。不过账号需要小伙伴们自己注册了,因为我的条数已经被浪的差不多了,哈哈哈。

PS:在你注册后,进第一步去短信验证码的模版功能添加模版,因为没有模版是不能用的,模版也需要审核。如果你对接其他的API这些就按照别的网站的要求做。http://www.miaodiyun.com/

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值