在腾讯云申请签名和短信模板这里就不阐述了,直接贴代码
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'
})
},
})
})