通过第三方接口发送短信验证码/短信通知

   需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字、大小写字母和特殊符号生成的密码。短信发送服务由云通信http://www.yuntongxun.com/提供。

   随机密码生成方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  /**
      * 生成随即密码
      * @author chao.gao
      * @param pwd_len 生成的密码的总长度
      * @return 密码的字符串
      */
     public  static  String genRandomNum( int  pwd_len) {
         // String re="(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&]).{10,}";
         String regex =  "^(?![0-9]+$)(?![a-zA-Z]+$)[A-Za-z0-9@#$%]{8,16}$" ;
         //35是因为数组是从0开始的,26个字母+10个数字
         final  int  maxNum =  26 ;
         int  i;   //生成的随机数
         int  count =  0 //生成的密码的长度
         char [] str = { 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' ,
                 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' ,
                 'x' 'y' 'z' };
         char [] upChar = { 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' ,
                 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' ,
                 'X' 'Y' 'Z' };
         char [] numChar = { '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' };
         char [] speChar = { '!' '@' '#' '$' '%' };
 
         StringBuffer pwd =  new  StringBuffer( "" );
         Random r =  new  Random();
         while  (count <  2 ) {
             //生成随机数,取绝对值,防止生成负数,
             i = Math.abs(r.nextInt(maxNum));   //生成的数最大为36-1
             if  (i >=  0  && i < str.length) {
                 pwd.append(str[i]);
                 count++;
             }
         }
         count= 0 ;
         while  (count <  2 ) {
             //生成随机数,取绝对值,防止生成负数,
             i = Math.abs(r.nextInt( 7 ));   //生成的数最大为7-1
             if  (i >=  0  && i < upChar.length) {
                 pwd.append(upChar[i]);
                 count++;
             }
         }
         count= 0 ;
         while  (count <  2 ) {
             //生成随机数,取绝对值,防止生成负数,
             i = Math.abs(r.nextInt(maxNum));   //生成的数最大为10-1
             if  (i >=  0  && i < numChar.length) {
                 pwd.append(numChar[i]);
                 count++;
             }
         }
         count= 0 ;
         while  (count <  2 ) {
             //生成随机数,取绝对值,防止生成负数,
             i = Math.abs(r.nextInt(maxNum));   //生成的数最大为10-1
             if  (i >=  0  && i < speChar.length) {
                 pwd.append(speChar[i]);
                 count++;
             }
         }
         return  pwd.toString();
     }

  发送短信接口:(jar包见附件)

  参考:

https://www.yuntongxun.com/doc/rest/sms/3_2_2_3.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
         public  class  SDKTestSendTemplateSMS {
         public  static  void  main(String[] args) {
         HashMap<String, Object> result =  null
         CCPRestSDK restAPI =  new  CCPRestSDK();
         restAPI.init( "app.cloopen.com" "8883" );
         // 初始化服务器地址和端口,生产环境配置成app.cloopen.com,端口是8883. 
         restAPI.setAccount( "accountSid" "accountToken" );
         // 初始化主账号名称和主账号令牌,登陆云通讯网站后,可在"控制台-应用"中看到开发者主账号ACCOUNT SID和 
         主账号令牌AUTH TOKEN。
         restAPI.setAppId( "AppId" );
         // 初始化应用ID,如果是在沙盒环境开发,请配置"控制台-应用-测试DEMO"中的APPID。
         //如切换到生产环境,请使用自己创建应用的APPID
         result = restAPI.sendTemplateSMS( "号码1,号码2等" , "模板Id"  , new  String[]{ "模板内容1" , "模板内容2" });
         System.out.println( "SDKTestGetSubAccounts result="  + result); 
         if ( "000000" .equals(result.get( "statusCode" ))){
         //正常返回输出data包体信息(map)
         HashMap<String,Object> data = (HashMap<String, Object>) result.get( "data" );
         Set<String> keySet = data.keySet();
         for (String key:keySet){ 
         Object object = data.get(key); 
         System.out.println(key + " = " +object); 
         }
         } else {
         //异常返回输出错误码和错误信息
         System.out.println( "错误码="  + result.get( "statusCode" ) + " 错误信息= " +result.get( "statusMsg" ));
         }
         }
         }