发表于: 2020-09-10 21:36:11

0 1228


重构任务代码

看短信API

短信


官方给的demo直接运行就能出结果

然后任务要求是spring管理账号密码

就需要更改下


spring管理账号密码



<!--    短信接口的bean-->
   <bean id="sendMessage" class="com.mb.util.SendMessageUtil">
       <property name="serverIp" value="${serverIp}"></property>
       <property name="serverPort" value="${serverPort}"></property>
       <property name="accountSId" value="${accountSId}"></property>
       <property name="accountToken" value="${accountToken}"></property>
       <property name="appId" value="${appId}"></property>
   </bean>


serverIp app.cloopen.com
serverPort 8883
accountSId 8aaf07087249953401726b199a7a110a
accountToken 241c0dcb24e04fc48ded38486f33fa81
appId "8aaf07087249953401726b199b451110"


spring文件


用了redis缓存   把手机号   随机生成4位的验证码放进去   有效时间2分钟

登陆时取出redis缓存验证即可


package com.mb.util;

import com.cloopen.rest.sdk.BodyType;
import com.cloopen.rest.sdk.CCPRestSmsSDK;
import lombok.Data;
import org.apache.log4j.Logger;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Set;
import java.util.concurrent.TimeUnit;


public class SendMessageUtil {

   @Autowired
   RedisTemplate redisTemplate;

   private static Logger logger = Logger.getLogger(SendMessageUtil.class);

   private String serverIp;
   private String serverPort;
   private String accountSId;
   private String accountToken;
   private String appId;

    //set方法注入

   public void setServerIp(String serverIp) {
       this.serverIp = serverIp;
   }

   public void setServerPort(String serverPort) {
       this.serverPort = serverPort;
   }

   public void setAccountSId(String accountSId) {
       this.accountSId = accountSId;
   }

   public void setAccountToken(String accountToken) {
       this.accountToken = accountToken;
   }
   public void setAppId(String appId) {
       this.appId = appId;
   }


   public void sendTelCode(String tel) {


       CCPRestSmsSDK sdk = new CCPRestSmsSDK();
       // 初始化服务器地址和端口,格式如下,服务器地址不需要写https:
       sdk.init(serverIpserverPort);
       // 初始化主帐号和主帐号TOKEN
       sdk.setAccount(accountSIdaccountToken);
       // 初始化应用ID
       sdk.setAppId(appId);

       // 1-电话作为参数输入
       // 2-模板ID
       String templateId = "1";

       // 3-随机四位验证码,直接 String.valueOf() 会有小数,不是整数
       int yzm = (int) ((Math.random() 89991000);

       // 将手机号为key,验证码为value,存储缓存,设置过期时间2分钟
       try {
           redisTemplate.opsForValue().set("tel""yzm"120TimeUnit.SECONDS);
           logger.info("手机号,验证码放入缓存成功");
       catch (Exception e){
           logger.info("手机号,验证码放入缓存失败");
       }

       //设置模板中的2个参数  第一个为验证码yzm   第二个为2  2分钟内输入验证码)
       String[] datas= {"yzm","2"};
       logger.info("验证码:+ yzm);

       logger.info("准备传入的参数"+tel+"==="+templateId+"====="+datas);

       //  发送短信 获取发送结果
       HashMap<StringObjectresult = sdk.sendTemplateSMS(tel,templateId ,datas);
       logger.info("短信验证发送结果 = " + result);

       // statusCode状态码为000000,即为发送成功
       if("000000".equals(result.get("statusCode"))){
           // 正常返回输出data包体信息(map
           HashMap<String,Objectdata = (HashMap<StringObject>) result.get("data");
           // 获取data中的key
           Set<StringkeySet = data.keySet();
           // 遍历key,通过key得到对应的值,输出
           for(String key:keySet){
               Object object = data.get(key);
               logger.info(key +" = "+object);
           }
       }else{
           //异常返回输出错误码和错误信息
           logger.info("错误码=" + result.get("statusCode"+错误信息= "+result.get("statusMsg"));
       }
   }
}



测试

@Test
public void xx(){

       String tel = "17609006625";
       sendMessage.sendTelCode(tel);

}





返回列表 返回列表
评论

    分享到