Talk about the implementation process of SMS verification code login

1, Construct mobile phone verification code: use random object to generate the required random number as the verification code, for example, 4-digit verification code: random number between 1000 and 9999;

2, Use the interface to send the mobile phone number and verification code data to the SMS platform, and then the SMS platform sends the verification code to the designated mobile phone number. Interface parameters generally include: target mobile phone number, random verification code (or expiration time), platform interface address , The platform password;

3, Save the information returned by the interface (usually json text data, and then need to be converted to json object format);

4, Store the mobile phone number-verification code and operation time in the Session for later verification;

5, Receive the verification code and other data filled in by the user;

6, Compare whether the submitted verification code is consistent with the verification code in the Session, and judge whether the submitted action is within the validity period;

7, The verification code is correct and within the validity period, the request is passed and the corresponding business is processed.

One, first add a jar package, the tool class will be used.

<!--秒滴云的jar包-->
<dependency>
  <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.11</version>
</dependency>

2. Here I am just writing a simple SMS verification function, if other voice verification is used. . . . Wait, you need to go to the official download document of Miaodi Cloud. The following is a config document written to store some parameters

Three, write http request tool class

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.RESP_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;
   }
}

Fourth, the method of generating four-digit numbers

public static String runNumber() {
   String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
   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;
}

4. Execute method execute(), it will be sent successfully

public class IndustrySMS
{
   private static String operation = "/industrySMS/sendSMS";


   private static String accountSid = Config.ACCOUNT_SID;
   private static String to = "15342349382";
  private static String smsContent = "【小陶科技】登录验证码:{"+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);
}

 If you think this article is helpful to you, you can like it and follow it to support it, or you can follow my public account, there are more technical dry goods articles and related information sharing, everyone can learn and progress together!


Guess you like

Origin blog.csdn.net/weixin_50205273/article/details/108647115
Recommended