egg.js 阿里云普通短信验证码的发送

1、创建阿里云控制台短信模块 短信模板、签名等基础配置信息,在这里不一一讲叙

2、对接接口时阿里云共分为两部分参数,一部分是公共参数,一部分是具体接口参数,其中公共参数为所有阿里云短信API接口共用的。这些参数中,比较复杂的是signature(签名)参数的生成。具体算法见阿里云短信功能文档,这里不做讲叙。

3、我们在这里直接使用阿里云提供的SDK进行签名生成,生成的签名不会出现错误。然后通过SDK中自带的sendSms方法进行请求操作。

4、首先添加依赖

 $ npm install @alicloud/sms-sdk --save

5、新建文件 app/service/sendSms/aliSms.js;;以下代码如需直接使用,请看代码中注释里有 标注 的地方,将这部分代码该为自己的,不可直接套用。

'use strict';

const BaseService = require('../core/base'); // 标注1:基础类文件引入自己创建,可用可不用
const SMSClient = require('@alicloud/sms-sdk');

const config = {
  AccessKeyId: '', // 访问密钥编号
  AccessKeySecret: '', // 密钥
};

// 签名模板
const sign = {
  REG_CODE: {
    SignName: '', // 签名
    TemplateCode: '', // 模板
  },
};

/**
 * 阿里云短信发送类
 */
class AliSmsService extends BaseService {  // 标注1:BaseService文件自己创建一个

  /**
   * 短信发送接口
   * @param {*} phone 发送手机号
   * @param {*} code 验证码
   */
  async sendCode(phone, code) {

    const { ctx } = this;

    const signCode = sign[code];
    const codeRandom = ctx.helper.randomInt(100000, 999999); // 标注2:随机数生成方法,自己写一个即可
    const templateParam = JSON.stringify({ code: codeRandom.toString() });

    const accessKeyId = config.AccessKeyId;
    const secretAccessKey = config.AccessKeySecret;
    const smsClient = new SMSClient({ accessKeyId, secretAccessKey }); // 实例化SDK

    const params = {
      PhoneNumbers: phone,
      SignName: signCode.SignName,
      TemplateCode: signCode.TemplateCode,
      TemplateParam: templateParam,
    };

    try {
      const rs = await this.sendSms(smsClient, params);
      if (rs.Code === 'OK') {
        return { code: codeRandom, sta: 1 };
      }
      return { msg: '操作失败', sta: -1 };

    } catch (err) {

      if (err.data.Code === 'isv.BUSINESS_LIMIT_CONTROL') { // 短信限制
        return { msg: err.data.Message.match(/(\S*)Permits/)[1], sta: 0 };
      }
      return { msg: '操作失败', sta: -1 };
    }

  }

  /**
   * 发送短信
   * @param {*} smsClient SDK实例
   * @param {*} params 参数信息
   */
  async sendSms(smsClient, params) {
    return new Promise((resolve, reject) => {
      smsClient.sendSMS(params).then(result => {
        resolve(result);
      }, ex => {
        reject(ex);
      });
    });
  }
}

module.exports = AliSmsService;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值