前言
个人开发者运营一个小程序或者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)
从访问管理中的API密钥管理获取APPID和密钥
配置插件
将从腾讯云获取的短信应用ID和账户密钥对填入配置文件中
// {app_root}/config/config.default.js
exports.tencentCloudSms = {
client: {
// 短信应用AppID,SmsSdkAppId的简写
AppID: '1234567890',
/* 必填:腾讯云账户密钥对secretId,secretKey。*/
credential: {
secretId: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
secretKey: 'yyyyyyyyyyyyyyyyyyyyyyyy',
},
}
};
在腾讯云设置签名和模板
通过签名管理添加签名
通过正文模板管理添加短信模板
发送短信
// {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;
}
最终成果
项目地址
插件简单封装了大部分不常用的配置项,并且将腾讯云短信SDK中的回调改为更现代的Promise和Async/Await,如果对插件感兴趣可以阅读源码,已经为插件编写了较多的注释。
(偷偷求Star)