通过第三方接口发送短信验证码/短信通知
需求:将首次交付密码为公共默认密码的方式改为点击入职功能,用短信方式发送系统自动生成的八位含数字、大小写字母和特殊符号生成的密码。短信发送服务由云通信
随机密码生成方法:
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" )); } } } |