发送短信逻辑

优质
小牛编辑
130浏览
2023-12-01

egg 发送短信逻辑 service

'use strict';

const Service = require('egg').Service;

class UserService extends Service {


  /**
   * 发送验证码
   */
  async sendCode() {
    //1. 获取用户手机号
    const { phone } = this.ctx.request.body;
    //2. 缓存中查询该手机号是否存在
    const sendCodePhone = await this.service.cache.get(`sendCode_${phone}`);
    if (sendCodePhone) this.ctx.errorHandle('您操作的太快了,验证码还未过期!', {}, 30001);

    //3. 生成随机四位验证码
    const randomCode = this.ctx.random();

    // 调试环境 不请求阿里服务器
    if (!this.config.aliSMS.isopen) {
      await this._devCode(phone, randomCode);
    }

    //4. 请求阿里云API发送验证码
    const ret = await this.service.alisms.sendSMS(phone, randomCode);

    if (ret.Code === "OK") {
      // 5.发送成功写入redis缓存 60 秒过期
      this.service.cache.set(`sendCode_${phone}`, randomCode, this.config.aliSMS.expire);
      // 6.写入消息队列

      this.ctx.succHandle('发送验证码成功!');
    }
  }


  // 模拟发送短信验证码
  async _devCode(phone, randomCode) {
    this.service.cache.set(`sendCode_${phone}`, randomCode, this.config.aliSMS.expire);
    this.ctx.succHandle('请求验证码成功!', { randomCode }, 30002);
  }
}

module.exports = UserService;