uniCloud云函數(shù)接入騰訊云短信服務(wù)(v3鑒權(quán))

準(zhǔn)備工作:

  • 騰訊云API密鑰(SecretId和SecretKey)

獲取方法:登錄騰訊云--->鼠標(biāo)移到右上角頭像--->選擇訪問管理-->訪問密鑰-->API密鑰管理-->新建密鑰

  • 短信應(yīng)用SDK AppID

獲取方法:控制臺->短信->應(yīng)用管理->應(yīng)用列表->新建應(yīng)用->SDK AppID

實例

  • 云函數(shù)內(nèi)使用示例
const { mainCodeV3 } = require('公共模塊的V3鑒權(quán)封裝名稱')
exports.main = async (event, context) => {
      const url = "https://sms.tencentcloudapi.com/" // 騰訊云短信服務(wù)的api地址
      // 需要的發(fā)送請求參數(shù)
      let phoneNum = "+86" + {手機(jī)號碼}
      let payload = {
        "PhoneNumberSet": [phoneNum],  // phoneNum: 手機(jī)號 (String) 格式為 `+86${phoneNum}`
        "SmsSdkAppId": "********", // SDK AppID
        "SignName": "******", // 短信簽名內(nèi)容(不是簽名ID) 可在短信控制臺-簽名管理查看授药,沒有的話創(chuàng)建一個黎棠,需要審核,一般在1天內(nèi)就審核完成了
        "TemplateParamSet": [String], // 類似正文模板內(nèi)的{1}自定義內(nèi)容: 驗證碼為:{1}乖篷,您正在登錄鹤啡,若非本      人操作,請勿泄露。
        "TemplateId":"" // 正文模板的ID 可在短信控制臺正文模板管理內(nèi)查詢
    }
        // 使用我們封裝的鑒權(quán)方法宵荒,將需要的參數(shù)傳入
        /**
        return Object
        Authorization: 鑒權(quán)內(nèi)容
        time: 時間戳
        */
        let info = await mainCodeV3(payload)
        // 調(diào)用云開發(fā)的請求方法
        const sendres = await uniCloud.httpclient.request(url,
    {   
        headers: {
            "Content-Type": "application/json",
            "Authorization": info.Authorization, // 鑒權(quán)獲得的內(nèi)容
            "Host": "sms.tencentcloudapi.com", 
            "X-TC-Action": "SendSms",
            "X-TC-Version": "2021-01-11",
            "X-TC-Timestamp": Number(info.time), // 封裝函數(shù)獲得的時間戳,一定要是Number類型
            "X-TC-Region": "ap-guangzhou"
        },
        data: payload, // 未鑒權(quán)的參數(shù)
        method: 'POST',
        dataType:"json",
    })
    console.log('請求后的返回內(nèi)容->',sendres); // 自行在里面提取參數(shù)判斷是否發(fā)送成功
}
  • V3鑒權(quán)js封裝(在uniCloud云開發(fā)環(huán)境-common目錄->新建公共函數(shù)-放入該內(nèi)容)
const crypto = require('crypto'); // 云開發(fā)環(huán)境默認(rèn)有這個加解密庫,直接導(dǎo)入使用即可净嘀,無需安裝
// service :默認(rèn)為sms短信服務(wù) 可根據(jù)騰訊云文檔改成其他服務(wù)(通用鑒權(quán))
// payload: 需傳入該服務(wù)需要的參數(shù)
async function mainCodeV3(payload,service = 'sms'){
      var SecretId = "*************"; // // SecretId, 需要替換為自己的
      var SecretKey = "***********"; // SecretKey, 需要替換為自己的
      // 1. 拼接規(guī)范請求串 CanonicalRequest
      var HTTPRequestMethod = 'POST'; // HTTP 請求方法(GET报咳、POST )。此示例取值為 POST
      var CanonicalURI = '/'; // URI 參數(shù)挖藏,API 3.0 固定為正斜杠(/)
      var CanonicalQueryString = ""; // POST請求時為空 // 內(nèi)
      var CanonicalHeaders = "content-type:application/json\nhost:" + service + ".tencentcloudapi.com\n"; // sms.tencentcloudapi.com需要修改前綴短信為:sms
      var SignedHeaders = "content-type;host";
      // 傳入需要做 HTTP 請求的正文 body
      var HashedRequestPayload = crypto.createHash('sha256').update(JSON.stringify(payload)).digest('hex'); 
      // 拼接
      var CanonicalRequest =  HTTPRequestMethod + '\n' +
        CanonicalURI + '\n' +
        CanonicalQueryString + '\n' +
        CanonicalHeaders + '\n' +
        SignedHeaders + '\n' +
        HashedRequestPayload;
      // 2. 拼接待簽名字符串
      var Algorithm = "TC3-HMAC-SHA256"; // 簽名算法暑刃,目前固定為 TC3-HMAC-SHA256
      var RequestTimestamp = Math.round(new Date().getTime()/1000) + ""; // 請求時間戳,即請求頭部的公共參數(shù) X-TC-Timestamp 取值熬苍,取當(dāng)前時間 UNIX 時間戳稍走,精確到秒
      var t = new Date();
      var date = t.toISOString().substr(0, 10); // 計算 Date 日期   date = "2021-10-07"
      /**
       * Date 必須從時間戳 X-TC-Timestamp 計算得到,且時區(qū)為 UTC+0柴底。
       * 如果加入系統(tǒng)本地時區(qū)信息婿脸,例如東八區(qū),將導(dǎo)致白天和晚上調(diào)用成功柄驻,但是凌晨時調(diào)用必定失敗狐树。
       * 假設(shè)時間戳為 1551113065,在東八區(qū)的時間是 2019-02-26 00:44:25鸿脓,但是計算得到的 Date 取 UTC+0 的日期應(yīng)為 2019-02-25抑钟,而不是 2019-02-26。
       * Timestamp 必須是當(dāng)前系統(tǒng)時間野哭,且需確保系統(tǒng)時間和標(biāo)準(zhǔn)時間是同步的在塔,如果相差超過五分鐘則必定失敗。
       * 如果長時間不和標(biāo)準(zhǔn)時間同步拨黔,可能導(dǎo)致運行一段時間后蛔溃,請求必定失敗,返回簽名過期錯誤。
       */
      var CredentialScope = date + "/"+ service +"/tc3_request"; // sms為騰訊云短信服務(wù)-其他服務(wù)根據(jù)文檔修改
      /**
       *  拼接 CredentialScope 憑證范圍贺待,格式為 Date/service/tc3_request 徽曲, 
       * service 為服務(wù)名,慧眼用 faceid 麸塞, OCR 文字識別用 ocr
       */
       // 將第一步拼接得到的 CanonicalRequest 再次進(jìn)行哈希加密
      var HashedCanonicalRequest = crypto.createHash('sha256').update(CanonicalRequest).digest('hex'); 
      // 拼接
      var StringToSign = Algorithm + '\n' +
        RequestTimestamp + '\n' +
        CredentialScope + '\n' +
        HashedCanonicalRequest;
      // 3. 計算簽名
      var SecretDate = crypto.createHmac('sha256', "TC3"+SecretKey).update(date).digest();
      var SecretService = crypto.createHmac('sha256', SecretDate).update(service).digest(); // 注意修改sms
      var SecretSigning = crypto.createHmac('sha256', SecretService).update("tc3_request").digest();
      var Signature = crypto.createHmac('sha256', SecretSigning).update(StringToSign).digest('hex');
      // 4. 拼接Authorization
      var Algorithm = "TC3-HMAC-SHA256";
      var Authorization =
        Algorithm + ' ' +
        'Credential=' + SecretId + '/' + CredentialScope + ', ' +
        'SignedHeaders=' + SignedHeaders + ', ' +
        'Signature=' + Signature
        return {
            Authorization,
            time: RequestTimestamp
        }
}
// 導(dǎo)出方法
/**
 * Authorization 鑒權(quán)
 * time: 當(dāng)前時間戳
 */
module.exports = {
  mainCodeV3
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末秃臣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哪工,更是在濱河造成了極大的恐慌奥此,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件正勒,死亡現(xiàn)場離奇詭異得院,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)章贞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門祥绞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸭限,你說我怎么就攤上這事蜕径。” “怎么了败京?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵兜喻,是天一觀的道長。 經(jīng)常有香客問我赡麦,道長朴皆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任泛粹,我火速辦了婚禮遂铡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晶姊。我一直安慰自己扒接,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布们衙。 她就那樣靜靜地躺著钾怔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒙挑。 梳的紋絲不亂的頭發(fā)上宗侦,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音忆蚀,去河邊找鬼矾利。 笑死懊悯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梦皮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼桃焕,長吁一口氣:“原來是場噩夢啊……” “哼剑肯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起观堂,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤让网,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后师痕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體溃睹,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年胰坟,在試婚紗的時候發(fā)現(xiàn)自己被綠了因篇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡笔横,死狀恐怖竞滓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吹缔,我是刑警寧澤商佑,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站厢塘,受9級特大地震影響茶没,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晚碾,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一抓半、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迄薄,春花似錦琅关、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至冶伞,卻和暖如春新症,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响禽。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工徒爹, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留荚醒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓隆嗅,卻偏偏與公主長得像界阁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子胖喳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容