import { Provide, Config, Inject, Init, InjectClient } from '@midwayjs/core'; import { BaseService, CoolCommException } from '@cool-midway/core'; import * as _ from 'lodash'; import { CachingFactory, MidwayCache } from '@midwayjs/cache-manager'; import { PluginService } from '../../plugin/service/info'; /** * 描述 */ @Provide() export class UserSmsService extends BaseService { // 获得模块的配置信息 @Config('module.user.sms') config; @InjectClient(CachingFactory, 'default') midwayCache: MidwayCache; @Inject() pluginService: PluginService; plugin; @Init() async init() { for (const key of ['sms-tx', 'sms-ali']) { try { this.plugin = await this.pluginService.getInstance(key); if (this.plugin) { this.config.pluginKey = key; break; } } catch (e) { continue; } } } /** * 发送验证码 * @param phone */ async sendSms(phone) { // 随机四位验证码 const code = _.random(1000, 9999); const pluginKey = this.config.pluginKey; if (!this.plugin) throw new CoolCommException( '未配置短信插件,请到插件市场下载安装配置:https://cool-js.com/plugin?keyWord=短信' ); try { if (pluginKey == 'sms-tx') { await this.plugin.send([phone], [code]); } if (pluginKey == 'sms-ali') { await this.plugin.send([phone], { code, }); } this.midwayCache.set(`sms:${phone}`, code, this.config.timeout * 1000); } catch (error) { throw new CoolCommException('发送过于频繁,请稍后再试'); } } /** * 验证验证码 * @param phone * @param code * @returns */ async checkCode(phone, code) { const cacheCode = await this.midwayCache.get(`sms:${phone}`); if (code && cacheCode == code) { return true; } return false; } }