Java实现发送手机验证码功能

前几天有读者希望我能写一篇给手机发送验证码的随笔,因为是很久以前实现的功能,为了不负读者,这几天一直都在利用空余时间整理代码和测试,不过现在也是大功告成了。

本文是利用第三方平台实现的发送手机短信验证码和语音验证码的功能,使用的框架是struts2+spring+hibernate,现就action层给出核心代码功能。

public class VerifyAction extends BaseAction<VerifyRequest> {
  private static final long serialVersionUID = 1L;
  private CommonConfigService commonConfigService;

  private UserPhoneVerifyService userPhoneVerifyService;

  private UserVerifyService userVerifyService;

  private PhoneDetectService phoneDetectService;

  private AccountService accountService;

  // 发送短信验证码
  public String sensSms() {
    try {
      result.setResult(JsonResult.SUCCESS);
      if (model.getType() == PhoneVerifyType.REGISTER) {
        if (userVerifyService.checkRegisterPhone(model.getPhone())) {
          result.setErrorMessage("该手机号已注册");
          result.setResult(JsonResult.ERROR);
          return SUCCESS;
        }
      }
      if (!phoneDetectService.check(model.getPhone())) {
        result.setErrorMessage("该手机号异常,不能进行验证操作");
        result.setResult(JsonResult.ERROR);
        return SUCCESS;
      }
      Dh3TongSmsOperator dh3TongSmsOperator = new Dh3TongSmsOperator(
          commonConfigService.getString("dh3tong", "account"),
          DigestUtil.md5(commonConfigService.getString("dh3tong", "password")));
      String code = RandomUtil.randomNum(6);
      if (dh3TongSmsOperator.send(UUIDGenerator.generate(), model.getPhone(),
          String.format("尊敬的用户,您的验证码是:%s", code), "【XX系统名】")) {
        userPhoneVerifyService.record(model.getPhone(), model.getType(), code, model.getUserId());
      } else {
        result.setErrorMessage("很抱歉,发送短信失败,请稍后再试");
        result.setResult(JsonResult.ERROR);
        return SUCCESS;
      }
      result.setErrorMessage( "短信验证码发送成功,请在5分钟内及时使用,谢谢!");
    } catch (Exception e) {
      e.printStackTrace();
    }

    return SUCCESS;
  }
  
  // 发送语音验证码
  public String sensVoice() {
    try {
      result.setResult(JsonResult.SUCCESS);
      if (model.getType() == PhoneVerifyType.REGISTER) {
        if (userVerifyService.checkRegisterPhone(model.getPhone())) {
          result.setErrorMessage("该手机号已注册");
          result.setResult(JsonResult.ERROR);
          return SUCCESS;
        }
      }
      if (!phoneDetectService.check(model.getPhone())) {
        result.setErrorMessage("该手机号异常,不能进行验证操作");
        result.setResult(JsonResult.ERROR);
        return SUCCESS;
      }
      String code = RandomUtil.randomNum(6);
      Dh3TongVoiceOperator dh3TongVoiceOperator = new Dh3TongVoiceOperator(
          commonConfigService.getString("dh3tong", "account"),
          DigestUtil.md5(commonConfigService.getString("dh3tong", "password")));
      if (dh3TongVoiceOperator.send(UUIDGenerator.generate(), request.getPhone(), code)) {
        userPhoneVerifyService.record(request.getPhone(), request.getType(), code, request.getUserId());
      } else {
        result.setErrorMessage("很抱歉,发送语音失败,请稍后再试");
        result.setResult(JsonResult.ERROR);
        return SUCCESS;
      }
      result.setErrorMessage("语音验证码发送成功,请在5分钟内及时使用,谢谢!");
    } catch (Exception e) {
      e.printStackTrace();
    }
    return SUCCESS;
  }

  public void setCommonConfigService(CommonConfigService commonConfigService) {
    this.commonConfigService = commonConfigService;
  }

  public void setUserPhoneVerifyService(UserPhoneVerifyService userPhoneVerifyService) {
    this.userPhoneVerifyService = userPhoneVerifyService;
  }

  public void setUserVerifyService(UserVerifyService userVerifyService) {
    this.userVerifyService = userVerifyService;
  }

  public void setPhoneDetectService(PhoneDetectService phoneDetectService) {
    this.phoneDetectService = phoneDetectService;
  }

  public void setAccountService(AccountService accountService) {
    this.accountService = accountService;
  }
}

以上是干货分享,已测试验证过!

陪伴是最长情的告白

每日为你推送Java技术干货

识别二维码→

关注→

缘分,点击“在看”就对了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值