腾讯云短信+node.js

参考哔哩哔哩SimbaJS的视频做了一个短信获取的后台,还望各路大神多多指教呀~
主要有以下几个思路:

  1. 提供腾讯云短信接口需要的数据
  2. 需要将相关的参数排序转换为需要的字符串,再用Base64进行编码,得到签名串
  3. 将所有的参数存入request

首先node.js安装需要的包

//下载crypto npm i crypto-js,用于生成签名串
//下载require npm install request --save
let CryptoJS = require('crypto-js')
let request = require('request')

根据文档,我们要发国内的短信,需要参数Action, Nonce, PhoneNumberSet.0, SecretId,SmsSdkAppid, TemplateID, Timestamp, Version, Signature, 前面的参数都可以找到,Signature需要看文档进行转换。如果不确定需要哪些参数的话,可以通过如下代码调试:

request({
    url: 'https://sms.tencentcloudapi.com',
    qs:{
        Action: 'SendSms',
        Version: '2019-07-11',
    }
}, function (error, response, body) {
    console.log(body)
})

将获得Signature需要的参数排序拼接,通过Object.keys()获得对象的属性数组,对数组进行排序,用数组的forEach方法拼接字符串

 //拼接请求字符串,将排序好的请求参数格式化成“参数名称=参数值”的形式,然后将格式化后的各个参数用"&"拼接在一起
let qs = {
        Action: 'SendSms',
        Version: '2019-07-11',
        'PhoneNumberSet.0': '+86'+'电话号码',
        TemplateID: '476688',
        Sign: "某某有限公司",
        SmsSdkAppid: '2515153542',
        Timestamp: Math.floor(+new Date / 1000),
        "TemplateParamSet.0": Math.round(Math.random() * 9999) + 1000,
        Nonce: Math.round(Math.random() * 100000),
        SecretId: 'ABCDEFGHIJKLMNOPQ',
    }
    //如下步骤是为了获得Signature
    let str = []
    Object.keys(qs).sort().forEach(item => {
        str.push(item + '=' + qs[item])
    })
    str = str.join('&')
    //或者:
    let str=Object.keys(qs).sort().map(key=>[key,qs[key]].join('=')).join('&')

Signature的获取需要通过其他参数获得:

    let SMS_API = 'sms.tencentcloudapi.com'
    str = ['GET', SMS_API, "/?", str].join('')
    /**生成签名串,使用 HMAC-SHA1算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码**/
    let SecretKey = '4tSnunWu89wUlqhJ'
    var sign = CryptoJS.HmacSHA1(str, SecretKey)
    sign = CryptoJS.enc.Base64.stringify(sign)
    //qs对象中添加Signature
    qs.Signature = sign

node.js中发短信需要用request对客户端进行请求,request的第一个参数是一个对象,第二个参数是函数:

 request({
        url: 'https://' + SMS_API,
        qs
    }, function (error, response, body) {
        console.log(body)
        res.json('success')
    })

腾讯云发送短信相关接口为SendSms,如下是全部代码:

let CryptoJS = require('crypto-js')
let request = require('request')

app.get('/sendSMS', (req, res) => {
    //拼接请求字符串,将排序好的请求参数格式化成“参数名称=参数值”的形式,然后将格式化后的各个参数用"&"拼接在一起
    let SMS_API = 'sms.tencentcloudapi.com'
    let qs = {
        Action: 'SendSms',
        Version: '2019-07-11',
        'PhoneNumberSet.0': '+86'+'电话号码',
        TemplateID: '476688',
        Sign: "某某有限公司",
        SmsSdkAppid: '2515153542',
        Timestamp: Math.floor(+new Date / 1000),
        "TemplateParamSet.0": Math.round(Math.random() * 9999) + 1000,
        Nonce: Math.round(Math.random() * 100000),
        SecretId: 'ABCDEFGHIJKLMNOPQ',
    }
    //如下步骤是为了获得Signature
    let array = Object.keys(qs).sort()
    let str = []
    array.forEach(item => {
        str.push(item + '=' + qs[item])
    })
    str = str.join('&')
    str = ['GET', SMS_API, "/?", str].join('')
    /*生成签名串,使用 HMAC-SHA1 算法对上一步中获得的签名原文字符串进行签名,然后将生成的签名串使用 Base64 进行编码*/
    let SecretKey = '4tSnunWu89wUlqhJ'
    var sign = CryptoJS.HmacSHA1(str, SecretKey)
    sign = CryptoJS.enc.Base64.stringify(sign)
    //qs对象中添加Signature
    qs.Signature = sign

    request({
        url: 'https://' + SMS_API,
        qs
    }, function (error, response, body) {
        console.log(body)
        res.json('success')
    })
})

你可能感兴趣的:(腾讯云短信+node.js)