中午吃饭的时候看见一个微信公众号推送如何写一个短信验证码demo练手,手痒就想跟着敲一敲,记录这一次的学习过程(后面附上源地址链接)
短信验证码的的设计思路在此不提,有兴趣可以看看学习笔记底部源链接,
搞起,
首先注册登录一个秒滴云的网站,网站地址:http://api.miaodiyun.com
登录成功后,送两元的余额,可以免费发送33条短信验证码,足够我们白嫖学习用了,https://blog.csdn.net/classabcd/article/details/82464582
编写一个参数配置类,存放一些注册生成的API配置
package Mcode;
public class Config { //ACCOUNT ID 765224 //API 地址https://openapi.miaodiyun.com/distributor/sendSMS /** * 验证吗需要访问的url网址,http://api.miaodiyun.comm(秒滴云的官网,需要自己的手机号)+(注册后生成的)count_id */ public static final String BASE_URL="http://api.miaodiyun.com/765224";
/** * 注册后系统自动生成的账号 */ public static final String ACCOUNT_SID="9305b3ff3ad6d0e1f50a6aa8c85c8f0f";
/** * 注册后系统自动生成的TOKEN */ public static final String AUTH_TOKEN="13fe605724708074beefbafba2013d14";
/** * 响应数据类型json */ public static final String RESPONSE_DATA_TYPE="json";
} |
http请求工具类
package Mcode;
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.URL; import java.net.URLConnection; import java.text.SimpleDateFormat; import java.util.Date;
import org.apache.commons.codec.digest.DigestUtils;
public class HttpUtil { /** * 构造通用参数timestamp、sig和respDataType * * @return */ public static String createCommonParam() { // 时间戳 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String timestamp = sdf.format(new Date());
// 签名 String sig = DigestUtils.md5Hex(Config.ACCOUNT_SID + Config.AUTH_TOKEN + timestamp); return "×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESPONSE_DATA_TYPE; }
/** * post请求 * * @param url * 功能和操作 * @param body * 要post的数据 * @return * @throws IOException */ public static String post(String url, String body) { System.out.println("url:" + System.lineSeparator() + url); System.out.println("body:" + System.lineSeparator() + body);
String result = ""; try { OutputStreamWriter out = null; BufferedReader in = null; URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection();
// 设置连接参数 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5000); conn.setReadTimeout(20000); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // 提交数据 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); out.write(body); out.flush();
// 读取返回数据 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; boolean firstLine = true; // 读第一行不加换行符 while ((line = in.readLine()) != null) { if (firstLine) { firstLine = false; } else { result += System.lineSeparator(); } result += line; } } catch (Exception e) { e.printStackTrace(); } return result; }
/** * 回调测试工具方法 * * @param url * @param reqStr * @return */ public static String postHuiDiao(String url, String body) { String result = ""; try { OutputStreamWriter out = null; BufferedReader in = null; URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection();
// 设置连接参数 conn.setDoOutput(true); conn.setDoInput(true); conn.setConnectTimeout(5000); conn.setReadTimeout(20000);
// 提交数据 out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8"); out.write(body); out.flush();
// 读取返回数据 in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line = ""; boolean firstLine = true; // 读第一行不加换行符 while ((line = in.readLine()) != null) { if (firstLine) { firstLine = false; } else { result += System.lineSeparator(); } result += line; } } catch (Exception e) { e.printStackTrace(); } return result; }
}
|
生成数字,字母,大小写验证码工具类
package Mcode;
import java.util.Random;
public class Mcode { public static String runNumber() { String str="ABCDEFGHIJLKLMNOPQRSTUVWXYZqwertyuiopasdfghjklzxcvbnm0123456789"; StringBuilder sb=new StringBuilder(4); for(int i=0;i<4;i++) { char ch=str.charAt(new Random().nextInt(str.length())); sb.append(ch); } System.out.println(sb.toString()); String code = sb.toString(); return code; } public static void main(String[] args) { new Mcode().runNumber(); }
}
|
测试运行代码
package Mcode;
import java.net.URLEncoder;
public class IndustrySMS {
private static String operation = "/industrySMS/sendSMS";
// private static String operation = "/distributor/sendSMS";
private static String accountSid = Config.ACCOUNT_SID; private static String to = "13520201954"; private static String smsContent = "【JavaTest科技】登录验证码:{"+Mcode.runNumber().toString()+"},如非本人操作,请忽略此短信。";
/** * 验证码通知短信 */ public static void execute() { String tmpSmsContent = null; try{ tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8"); }catch(Exception e){
} String url = Config.BASE_URL + operation; String body = "accountSid=" + accountSid + "&to=" + to + "&smsContent=" + tmpSmsContent + HttpUtil.createCommonParam();
// 提交请求 String result = HttpUtil.post(url, body); System.out.println("result:" + System.lineSeparator() + result);
}
public static void main(String[] args) { IndustrySMS.execute(); } }
|
代码运行结果如下
需要去秒滴云平台认证资质,白嫖失败,哈哈哈。
注:代码运行在jdk1.7以上的才行
看到的公众号地址链接:https://mp.weixin.qq.com/s/lK8WX-sS7lxgj8D9lR8Dmg
代码地址来源:https://blog.csdn.net/classabcd/article/details/82464582