微信小程序使用云开发获取腾讯云短信验证码

在腾讯云申请签名和短信模板这里就不阐述了,直接贴代码

1、新建一个云函数,在云函数文件上运行终端,输入:

npm install tencentcloud-sdk-nodejs --save

2、在云函数中编写以下代码

	// 云函数入口文件
const cloud = require('wx-server-sdk')
const tencentcloud = require("tencentcloud-sdk-nodejs")
// 导入 SMS 模块的 client models
const smsClient = tencentcloud.sms.v20210111.Client

const client = new smsClient({
  credential: {
  /* 必填:腾讯云账户密钥对secretId,secretKey。
   * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
   * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
   * 以免泄露密钥对危及你的财产安全。
   * CAM密匙查询: https://console.cloud.tencent.com/cam/capi */
    secretId: "secretId",//点击上一行网址查看secretId和secretKey
    secretKey: "secretKey",
  },
  /* 必填:地域信息,可以直接填写字符串ap-guangzhou,或者引用预设的常量 */
  region: "ap-guangzhou",
  /* 非必填:
   * 客户端配置对象,可以指定超时时间等配置 */
  profile: {
    /* SDK默认用TC3-HMAC-SHA256进行签名,非必要请不要修改这个字段 */
    signMethod: "HmacSHA256",
    httpProfile: {
      /* SDK默认使用POST方法。
       * 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
      reqMethod: "POST",
      /* SDK有默认的超时时间,非必要请不要进行调整
       * 如有需要请在代码中查阅以获取最新的默认值 */
      reqTimeout: 30,
      /**
       * SDK会自动指定域名。通常是不需要特地指定域名的,但是如果你访问的是金融区的服务
       * 则必须手动指定域名,例如sms的上海金融区域名: sms.ap-shanghai-fsi.tencentcloudapi.com
       */
      endpoint: "sms.tencentcloudapi.com"
    },
  },
  })
  /* 请求参数,根据调用的接口和实际情况,可以进一步设置请求参数
  * 属性可能是基本类型,也可能引用了另一个数据结构
  * 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */
 

const envid = '云开发环境id'; //云开发环境id
cloud.init({
  env: envid,
})
function mySend (req){
  return new Promise((res,rej)=>{
 		 // 通过 client 对象调用想要访问的接口,需要传入请求对象以及响应回调函数
          client.SendSms(req, function (err, response) {
            console.log("response"+JSON.stringify(response))
              // 请求异常返回,打印异常信息
              if (err) {
                  rej(err)
              }
              // 请求正常返回,打印 response 对象
              res(response.SendStatusSet)
          });
      })
  } 
// 云函数入口函数
exports.main = async (event, context) => {
  console.log(event.phone)
  const params = {
    /* 短信应用ID: 短信SmsSdkAppId在 [短信控制台] 添加应用后生成的实际SmsSdkAppId,示例如1400006666 */
    SmsSdkAppId: "应用id",
    /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
    SignName: "签名内容",//签名内容,不是签名id
    /* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
    ExtendCode: "",
    /* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
    SenderId: "",
    /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
    SessionContext: "",
    /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
     * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
    PhoneNumberSet: ["+86"+event.phone],
    /* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
    TemplateId: "模板id",
    /* 模板参数: 若无模板参数,则设置为空*/
    TemplateParamSet: [event.code],
    }

    let res  = await mySend(params)
    return res;
}

3、页面调用云函数

        var code;
        //首先默认code为空字符串
        code = '';
        //设置长度,这里看需求,我这里设置了4
        var codeLength = 4;
        //设置随机字符
        var random = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
        for (var i = 0; i < codeLength; i++) {
        var index = Math.floor(Math.random() * 10);
        code += random[index];
        }
  
      wx.cloud.callFunction({
        name: 'sendMsg',
        data: {
          phone: that.data.hongyzphone,
          code: code
        }
      }).then(res=>{
        console.log(res,'..')
        wx.hideLoading({
          success: (res1) => {
            if(res.result[0].Code !== 'Ok'){
              console.log(res.result.Code)
              wx.showToast({
                title:res.result[0].Code+"",
                icon:"none",
              })
            } else {
              wx.showToast({
                title:'发送成功'
              })
              that.data.code = code
            }
          },
        })
    
      }).catch(err=>{
        wx.hideLoading({
          success: (res) => {
            wx.showToast({
              title:'请求失败',
              icon:'none'
            })
          },
        })
      })

效果图
微信小程序使用云开发获取腾讯云短信验证码_第1张图片
*微信小程序使用云开发获取腾讯云短信验证码_第2张图片
*

你可能感兴趣的:(小程序,javascript,nodejs)