个人开发者也能用?Egg.js 腾讯云短信插件来了!

422 阅读2分钟

前言

个人开发者运营一个小程序或者APP,通常希望能够获取用户的手机号,从而达到APP/小程序/网页多端账号登录。

但是开发过小程序的小伙伴可能知道,想要通过微信小程序获取用户的手机号码需要拥有企业认证,而企业认证是让每个个人开发者都望而却步的。

而在短信服务平台,这种对个人开发者的限制也是随处可见,但天无绝人之路的是,腾讯云的短信功能支持个人开发者发送"验证码"类型的短信,即使小程序没有进行企业认证,也可以通过自建账号系统来获取用户手机号,从而利用手机号为用户提供跨平台登录。

安装插件

可以使用npm/yarn/pnpm的方式来下载插件

# use npm
$ npm i egg-tencent-cloud-with-sms --save
# use yarn
$ yarn add egg-tencent-cloud-with-sms

开启插件

// {app_root}/config/plugin.js
exports.tencentCloudSms = {
  enable: true,
  package: 'egg-tencent-cloud-with-sms',
};

在腾讯云获取短信应用ID和账户密钥对

从应用列表创建应用可以获得SDKAppID(短信应用ID)

image.png

从访问管理中的API密钥管理获取APPID和密钥

2.png

配置插件

将从腾讯云获取的短信应用ID和账户密钥对填入配置文件中

// {app_root}/config/config.default.js
exports.tencentCloudSms = {
    client: {
      // 短信应用AppID,SmsSdkAppId的简写
      AppID: '1234567890',
      /* 必填:腾讯云账户密钥对secretId,secretKey。*/
      credential: {
        secretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
        secretKey: 'yyyyyyyyyyyyyyyyyyyyyyyy',
      },
  }
};

在腾讯云设置签名和模板

通过签名管理添加签名

image.png

通过正文模板管理添加短信模板

4.png

发送短信

// {app_root}/controller/user.js
// 向用户发送短信
  async sendSMS() {
    const ctx = this.ctx;
    let sendSmsResponse
    try {
      sendSmsResponse = await this.app.tencentCloudSms.SendSms({
        /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
        SignName: 'xxxxx', // 必填
         /* 模板 ID: 必须填写已审核通过的模板 ID */
        TemplateId: '1234567',  // 必填
        /* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
        TemplateParamSet: ['2223','5'], // 必填
        /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
        * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
        PhoneNumberSet: ['+8615912345678'] // 必填,需要发送的短信的手机号集合
      })
    } catch (err) {
      sendSmsResponse = err
      console.log(err, 'err')
    }
    ctx.status = 200;
    ctx.body = sendSmS;
  }

最终成果

18F601D019CAA137769684729CD1618D.jpg

项目地址

插件简单封装了大部分不常用的配置项,并且将腾讯云短信SDK中的回调改为更现代的Promise和Async/Await,如果对插件感兴趣可以阅读源码,已经为插件编写了较多的注释。

(偷偷求Star)

github.com/sothx/egg-t…