SMS 인증 코드 로그인의 구현 프로세스에 대해 이야기하십시오.

1, 휴대폰 확인 코드 구성 : 임의의 개체를 사용하여 필요한 난수를 확인 코드로 생성합니다 (예 : 4 자리 확인 코드 : 1000에서 9999 사이의 임의 번호).

2, 인터페이스를 사용하여 휴대폰 번호와 인증 코드 데이터를 SMS 플랫폼으로 보낸 다음 SMS 플랫폼은 인증 코드를 지정된 휴대폰 번호로 보냅니다. 인터페이스 매개 변수에는 일반적으로 대상 휴대폰 번호, 임의 인증 코드 (또는 만료 시간), 플랫폼 인터페이스 주소가 포함됩니다. , 플랫폼 암호;

3, 인터페이스에서 반환 된 정보 (일반적으로 json 텍스트 데이터를 저장 한 다음 json 객체 형식으로 변환해야 함)를 저장합니다.

4, 나중에 확인하기 위해 세션에 휴대 전화 번호 확인 코드 및 작동 시간을 저장하십시오.

5, 사용자가 입력 한 인증 코드 및 기타 데이터를 수신합니다.

6, 제출 된 확인 코드가 세션의 확인 코드와 일치하는지 비교하고 제출 된 작업이 유효 기간 내에 있는지 판단합니다.

7, 인증 코드가 정확하고 유효 기간 내에 요청이 통과되고 해당 업무가 처리됩니다.

첫째, 먼저 jar 패키지를 추가하면 도구 클래스가 사용됩니다.

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

2. 다른 음성 인증을 사용하는 경우 간단한 SMS 인증 기능을 작성하고 있습니다. . . . 잠깐, Miaodi Cloud의 공식 다운로드 문서로 가셔야합니다. 다음은 일부 매개 변수를 저장하기 위해 작성된 구성 문서입니다.

셋, http 요청 도구 클래스 작성

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

넷째, 4 자리 숫자 생성 방법

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 () 메소드를 실행하면 성공적으로 전송됩니다.

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);
}

 이 기사가 당신에게 도움이된다고 생각한다면, 당신은 그것을 좋아하고 그것을 지원하기 위해 그것을 따르거나 내 공개 계정을 따라갈 수 있습니다. 더 많은 기술 건조 제품 기사와 관련 정보 공유가 있으며 모두가 함께 배우고 진행합니다!


추천

출처blog.csdn.net/weixin_50205273/article/details/108647115