评论

使用云开发接入阿里云短信SDK,实现自给自足!

使用云开发接入阿里云短信服务,

发送手机短信验证码

按需求自行修改函数内容

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,可根据您拍摄或相册中照片识别出您所需要知道的物种(植物,动物,图文,菜品类型),相关知识,帮助您了解该物种,打开新世界!
最后一次编辑于  2019-04-26  
点赞 4
收藏
评论

7 个评论

  • A、故事的小黄花
    A、故事的小黄花
    05-27

    短信系统我也能接,比阿里便宜

    05-27
    赞同 1
    回复
  • 花火
    花火
    05-28

    没有使用云开发还需要填写环境id吗?

    05-28
    赞同
    回复
  • 花火
    花火
    05-28

    你好!env环境id是什么?可以解释一下吗?

    cloud.init({

    env: 'xxx' // 你的环境id

    })

    05-28
    赞同
    回复
  • 小肥羊
    小肥羊
    03-29

    非常感谢,这个是我需要的

    03-29
    赞同
    回复
  • 全
    2019-04-29

    小程序公众号项目经典案例,包括拼团,秒杀,砍价,分销,短信等功能,完美的商城项目,一键按装即可使用
    欢迎加入群:116279623 入群答案:CRMEB
    开源地址:http://github.crmeb.net/u/lsq
    演示站后台:http://demo25.crmeb.net 账号:demo 密码:crmeb.com

    2019-04-29
    赞同
    回复
  • 欧ͥ ͮ巴ͧ
    欧ͥ ͮ巴ͧ
    2019-04-25

    微信开发者工具是有bug吗?写的代码刷不出来

    2019-04-25
    赞同
    回复
  • 欧ͥ ͮ巴ͧ
    欧ͥ ͮ巴ͧ
    2019-04-25

    请问小程序哪里学的?带带我

    2019-04-25
    赞同
    回复 2
    • P
      P
      2019-04-25

      自己摸索,看社区,github。

      2019-04-25
      回复
    • 欧ͥ ͮ巴ͧ
      欧ͥ ͮ巴ͧ
      2019-04-25

      美女加个qq带带我

      2019-04-25
      回复
登录 后发表内容