短信验证码学习

中午吃饭的时候看见一个微信公众号推送如何写一个短信验证码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 {

    /**

    * 构造通用参数timestampsigrespDataType

    *

    * @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 "&timestamp=" + 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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值