• java实现发送短信验证码


    java实现短信验证码发送

    由于我们使用第三方平台进行验证码的发送,所以首先,我们要在一个平台进行注册。
    在这里我选择是秒嘀科技,因为新人注册会赠送十元,足够测试使用了。
    注册完成后,我们需要获取自己对应的ACCOUNT SIDAUTH TOKEN
    点击用户中心,认证,来进行企业认证(这一步是最费劲的,我认证了两天 TAT ,需要的营业执照可以百度,图片质量需要自己斟酌)。
    之后在配置管理中新建一个模板,然后提交审核就好,(只要符合要求,基本都能过),可以返回查看是否通过。

    准备工作完成,便可以开始代码的测试了,由于本人还是大学生新人,只能使用小的动态Web项目进行测试。新建项目,引入需要的jar包:fastjson.jar,我才用的版本是1.2.47版本。将jar包放入lib文件夹下,就可以开始我们的代码了。

    1. src目录下新建文件夹,存放我们写的代码
    2. 新建GetMessageCode.class,代码如下
         package test;
        //各种引入的包
        import java.io.BufferedReader;
        import java.io.InputStreamReader;
        import java.io.OutputStreamWriter;
        import java.net.HttpURLConnection;
        import java.net.URL;
        import java.security.MessageDigest;
        import java.security.NoSuchAlgorithmException;
        import java.text.SimpleDateFormat;
        import java.util.Date;
        
        import com.alibaba.fastjson.JSONObject;
        
        public class GetMessageCode {
        /**
         * 发送验证码
         */
        	private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";//固定的,它api中固定的端口,照着写就行。
        	private static final String ACCOUNT_SID = "自己获取到的ACCOUNT_SID ";
        	private static final String AUTH_TOKEN = "自己获取到的AUTH_TOKEN ";
        	
        	//根据相应的手机号发送验证码
        	public static String getCode(String phone){
        		//以下代码是为了获取其他方法返回的参数
        		String rod = smsCode();//获取随机验证码
        		String timestamp = getTimestamp();//获取时间戳
        		String sig = getMD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);//获取签名
        		String tamp = "【xxxx】登录验证码:"+rod+",xxxxxxxxx";//必须与模板一致,否则会报错
        		OutputStreamWriter out = null;
        		BufferedReader br = null;
        		StringBuilder result = new StringBuilder();
        	try{
        		URL url = new URL(QUERY_PATH);
        		HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        		connection.setRequestMethod("POST");
        		connection.setDoInput(true);//设置是否允许数据写入
        		connection.setDoOutput(true);//设置是否允许参数数据输出
        		connection.setConnectTimeout(5000);//设置链接响应时间
        		connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
        		//提交请求
        		out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
        		String args = getQueryArgs(ACCOUNT_SID,tamp,phone,timestamp,sig,"JSON");
        		out.write(args);
        		out.flush();
        		//读取返回参数
        		br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
        		String temp = "";
        		while ((temp=br.readLine())!=null){
        			result.append(temp);
        		}
        	}catch(Exception e){
        		e.printStackTrace();
        	}
        		JSONObject json = JSONObject.parseObject(result.toString());
        		String respCode = json.getString("respCode");
        		String defaultRespCode = "00000";
        		if(defaultRespCode.equals(respCode)){
        			return rod;
        		}else{
        			return defaultRespCode;
        		}
        		
        	}
        	// 定义一个请求参数拼接方法
        	public static String getQueryArgs(String accountSid, String smsContent, String to, String timestamp, String sig,
        			String respDataType) {
        		// TODO Auto-generated method stub
        		return "accountSid=" + accountSid + "&smsContent=" + smsContent + "&to=" + to + "&"+"timestamp=" + timestamp
        				+ "&sig=" + sig + "&respDataType=" + respDataType;
        	}
        	//获取时间戳
        	public static String getTimestamp() {
        		return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        	}
        	// sing签名
        		public static String getMD5(String sid, String token, String timestamp) {
        	 
        			StringBuilder result = new StringBuilder();
        			String source = sid + token + timestamp;
        			// 获取某个类的实例
        			try {
        				MessageDigest digest = MessageDigest.getInstance("MD5");
        				// 要进行加密的东西
        				byte[] bytes = digest.digest(source.getBytes());
        				for (byte b : bytes) {
        					String hex = Integer.toHexString(b & 0xff);
        					if (hex.length() == 1) {
        						result.append("0" + hex);
        					} else {
        						result.append(hex);
        					}
        				}
        			} catch (NoSuchAlgorithmException e) {
        				// TODO Auto-generated catch block
        				e.printStackTrace();
        			}
        	 
        			return result.toString();
        		}
        	 
        		// 创建验证码
        		public static String smsCode() {
        			String random = (int) ((Math.random() * 9 + 1) * 100000) + "";
        			return random;
        		}	
        }
    

    现在代码就算写完了,我们需要在同包下新建测试类进行测试。

    package test;
    
    public class Test {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String phone = "测试的手机号";
    		GetMessageCode.getCode(phone);
    	}
    }
    

    以上便是java实现发送短信验证码的代码,如果想查看或使用验证码的话,只需在调用方法的时候把smsCode当做返回结果返回就好。
    可能发生的错误原因:

    1. 没连接网络
    2. 企业认证未通过
    3. 配置文件配错了

    新人第一次发帖,请多多包涵....

  • 相关阅读:
    五月一日工作感悟
    Loadrunner 性能指标
    tcp ,http .udp
    Loadrunner 面试常见问题
    抓包不求人
    性能测试自动化测试平台
    jmeter 控制器
    转:java中String使用equals和==比较的区别
    转:Java对象及对象引用变量
    排序算法小结
  • 原文地址:https://www.cnblogs.com/fqliu/p/14016482.html
Copyright © 2020-2023  润新知