发送短信验证码接口

1.基本发送短信

1.1登录阿里云开通短信功能

1.2配置文件application.yml中添加阿里云短信的配置

ali:
  # 阿里云短信
  sms:
    accessKeyId: LTAI5tEDc4wNDKo4AAzekNgk #AccessKey ID
    accessKeySecret: xml8zusZTqTRYE3yKRKmvIiWGo9C1p  #AccessKey Secret
    templateCode: SMS_154950909 #模板
    signName: 阿里云短信测试 #签名
    domain: dysmsapi.aliyuncs.com #短信产品域名
    version: 2017-05-25 #版本-固定值
    regionId: default #地区-默认即可

1.3pet-service 添加配置文件对应的配置类

@Configuration
@ConfigurationProperties(prefix = "ali.sms")
public class AliSmsConfig {

    private String accessKeyId;
    private String accessKeySecret;
    private String templateCode;
    private String signName;
    private String domain;
    private String regionId;
    private String version;

    public String getAccessKeyId() {
        return accessKeyId;
    }

    public void setAccessKeyId(String accessKeyId) {
        this.accessKeyId = accessKeyId;
    }

    public String getAccessKeySecret() {
        return accessKeySecret;
    }

    public void setAccessKeySecret(String accessKeySecret) {
        this.accessKeySecret = accessKeySecret;
    }

    public String getTemplateCode() {
        return templateCode;
    }

    public void setTemplateCode(String templateCode) {
        this.templateCode = templateCode;
    }

    public String getSignName() {
        return signName;
    }

    public void setSignName(String signName) {
        this.signName = signName;
    }

    public String getDomain() {
        return domain;
    }

    public void setDomain(String domain) {
        this.domain = domain;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getRegionId() {
        return regionId;
    }

    public void setRegionId(String regionId) {
        this.regionId = regionId;
    }
}

1.4pet-service添加连接第三方平台阿里云的接口

package cn.pet.service.thirdparty.aliyun.sms;

import com.alibaba.fastjson.JSON;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

@Component
public class AliYunService {
    private static final Logger logger= LoggerFactory.getLogger(AliYunService.class);
    @Autowired
    private AliYunConfig aliYunConfig;
    //定义方法调用阿里云短信接口 sendSms发短信
    public String sendSms(String phone,String code){
        Config config = new Config();
        config.setAccessKeyId(aliYunConfig.getAccessKeyId());
        config.setAccessKeySecret(aliYunConfig.getAccessKeySecret());
      //  config.endpoint=aliYunConfig.getDomain();
        config.endpoint = "dysmsapi.aliyuncs.com";


        //创建客户端
        Client client=null;
        try {
             client = new Client(config);
        } catch (Exception e) {
            e.printStackTrace();
        }

        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers(phone);
        request.setSignName(aliYunConfig.getSignName());
        request.setTemplateCode(aliYunConfig.getTemplateCode());

        //封装验证码
        Map<String,String> map=new HashMap<>();
        map.put("code",code);
        //request.setTemplateParam(code);
        request.setTemplateParam(JSON.toJSONString(map));
        SendSmsResponse response=null;
        try {
             response = client.sendSms(request);
             logger.info("发送短信之后返回结果:{}",response.getBody().getMessage());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response.getBody().getMessage();
    }
}

1.5pet-service添加发送短信的方法sendSms()

package cn.pet.service.impl;

import cn.pet.constant.Constants;
import cn.pet.service.UmsSmsService;
import cn.pet.service.thirdparty.aliyun.sms.AliYunService;
import cn.pet.utils.MathUtils;
import com.sun.org.apache.bcel.internal.generic.MULTIANEWARRAY;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class UmsSmsServiceImpl implements UmsSmsService {
    private static final Logger logger= LoggerFactory.getLogger(AliYunService.class);
    @Autowired
    private AliYunService aliYunService;
    @Override
    public Boolean sendSms(String phone, Integer codeType) {
        //需要生成验证码
        String code = MathUtils.random();
        logger.info("手机号码:{} 短信验证码为:{}",phone,code);
        String result = aliYunService.sendSms(phone, code);
        if (result.equals(Constants.Sms.ALI_SMS_RESULT)){
            return true;
        }
        return false;
    }
}

.6pet-web添加发送短信的接口方法sendSms()

package cn.pet.controller;

import cn.pet.result.Result;
import cn.pet.result.ResultEnum;
import cn.pet.result.ResultUtils;
import cn.pet.service.UmsSmsService;
import cn.pet.utils.UmsUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/api/ums/sms")
@RestController
public class UmsSmsController {
    @Autowired
    private UmsSmsService umsSmsService;
    @PostMapping("/sendSms")
    public Result sendSms(String phone,Integer codeType){
        //判断手机号
        if (StringUtils.isEmpty(phone) | !UmsUtils.checkPhone(phone)){
            return ResultUtils.returnResult(ResultEnum.FAIL_UMS_PHONE_ERROR);
        }

        if (!UmsUtils.checkCodeType(codeType)){
            return ResultUtils.returnResult(ResultEnum.FAIL_UMS_SMS_CODE_TYPE_ERROR);
        }
        //调用service接口
        Boolean aBoolean = umsSmsService.sendSms(phone, codeType);
        if (aBoolean){
            return ResultUtils.returnSuccess();
        }else {
            return ResultUtils.returnFail();
        }
    }
}

 

posted @ 2022-04-12 14:43  風色  阅读(285)  评论(0)    收藏  举报