发送手机短信验证码
按需求自行修改函数内容
1.前往阿里云申请短信服务
- 1.短信服务 > 国内消息 > 添加签名
- 1.短信服务 > 国内消息 > 添加模板
2.引入
// 云函数入口文件
const cloud = require('wx-server-sdk')
const Core = require('@alicloud/pop-core');
const accessKeyId = 'xxx' // 你的appid
const accessKeySecret = 'xxx' // 你的secret
const SignName = 'xxx' // 你的签名
const TemplateCode = 'xxx' // 你的模版CODE
var client = new Core({
accessKeyId,
accessKeySecret,
endpoint: 'https://dysmsapi.aliyuncs.com',
apiVersion: '2017-05-25'
})
let params = {
SignNameJson: JSON.stringify([SignName]),
TemplateCode: TemplateCode,
}
cloud.init({
env: 'xxx' // 你的环境id
})
// 云函数入口函数
/**
* 发送模板消息
*/
exports.main = async(event, context) => {
let {
OPENID,
APPID,
UNIONID
} = cloud.getWXContext()
const db = cloud.database()
return new Promise(async(resolve, reject) => {
try {
if(!event.phone) throw {code: 7322, data: [],info: '手机不能为空!'}
if(!/^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(event.phone)) throw {code: 7321, data: [],info: '手机号码格式错误!'}
// 获取数据
let {
data
} = await db.collection('sms-record').where({
phone: event.phone,
openid: OPENID,
is_used: 1
}).orderBy('created_at', 'desc').skip(0).limit(1).get(),
code = null
// 计算时间
if(data.length != 0 && (Number(new Date()) - Number(new Date(data[0].created_at))) < 60000) {
throw {code: 7323, data: [],info: '一分钟内,不能重复发送!'}
} else if(data.length != 0 && (Number(new Date()) - Number(new Date(data[0].created_at))) < 1800000){
code = data[0].code
} else {
// 生成六位随机数
code = Math.floor(Math.random() * 900000) + 100000
}
//发送短信
let {
Code
} = await client.request('SendBatchSms', Object.assign({
PhoneNumberJson: JSON.stringify([event.phone]),
TemplateParamJson: JSON.stringify([{code}])
},params), {
method: 'POST'
})
if(Code !== 'OK') throw {code: 7321, data: [],info: '发送短信失败!'}
// 新增数据
await db.collection('sms-record').add({
data: {
phone: event.phone,
code,
openid: OPENID,
is_used: 1,
created_at: db.serverDate()
}
})
resolve({
code: 0,
data: [],
info: '操作成功!'
})
} catch (error) {
console.log(error)
if(!error.code) reject(error)
resolve(error)
}
})
}
3.参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
phone | string | 是 | 国内手机号码 |
4.使用
// 返回Promise
wx.cloud.callFunction({
name: 'sendSms',
data: {
phone
}
}).then(res => {
console.log(res)
})
async sendSms(){
try {
let {
data
} = await wx.cloud.callFunction({
name: 'sendSms',
data: {
phone
}
})
console.log(data)
} catch (error) {
console.log(error)
}
}
当然你也可以使用旧版的sdk
更多云函数模板
另外求个流量 和 star
- 模板使用云开发实现,接入百度AI平台API图像识别系统,无需另外搭建服务器,只需修改文件内配置项
- 一款方便快捷识别AI,可根据您拍摄或相册中照片识别出您所需要知道的物种(植物,动物,图文,菜品类型),相关知识,帮助您了解该物种,打开新世界!
短信系统我也能接,比阿里便宜
没有使用云开发还需要填写环境id吗?
你好!env环境id是什么?可以解释一下吗?
cloud.init({
env: 'xxx' // 你的环境id
})
非常感谢,这个是我需要的
小程序公众号项目经典案例,包括拼团,秒杀,砍价,分销,短信等功能,完美的商城项目,一键按装即可使用
欢迎加入群:116279623 入群答案:CRMEB
开源地址:http://github.crmeb.net/u/lsq
演示站后台:http://demo25.crmeb.net 账号:demo 密码:crmeb.com
微信开发者工具是有bug吗?写的代码刷不出来
请问小程序哪里学的?带带我
自己摸索,看社区,github。
美女加个qq带带我