跟我學(xué)微信小程序之五(云短信篇)

發(fā)送短信在小程序中是一個(gè)常見(jiàn)功能排霉,比如注冊(cè)賬號(hào)時(shí)發(fā)送驗(yàn)證碼,發(fā)送短信通知等等硬纤,這些都需要用到云短信功能。使用騰訊云的SMS來(lái)發(fā)送短信功能開(kāi)發(fā)比較簡(jiǎn)單赃磨,但申請(qǐng)流程還是比較麻煩筝家,整理下來(lái)避免大家少走彎路。

第一步邻辉,上線小程序

訪問(wèn)騰訊的SMS控制臺(tái)的快速開(kāi)始頁(yè)面

https://console.cloud.tencent.com/smsv2/guide

給出了短信功能的快速入門(mén)的步驟溪王,第一步是創(chuàng)建短信簽名,這一步需要使用小程序來(lái)申請(qǐng)短信簽名值骇,因此需要上線小程序莹菱,并提供小程序的相關(guān)信息才能申請(qǐng)短信簽名。上線小程序特別注意小程序的類目設(shè)置吱瘩,如果這個(gè)設(shè)置不正確道伟,審核就不能通過(guò),吐槽一下小程序?qū)徍耸鼓耄话銓徍舜蟾?天左右的時(shí)間蜜徽,而且每次都是一項(xiàng)一項(xiàng)的審核不通過(guò),不會(huì)一次把所有不通過(guò)的項(xiàng)全部列出票摇,一次解決多痛快拘鞋,因此這樣審核導(dǎo)致周期會(huì)比較長(zhǎng),我的審核了5天才成功上線矢门。第一次因?yàn)樾〕绦蚶镩_(kāi)發(fā)了一個(gè)日歷控件盆色,沒(méi)有選擇工具-》日歷灰蛙,第二次因?yàn)樾〕绦蚶镉袀€(gè)報(bào)名功能,沒(méi)有選擇工具-》預(yù)約報(bào)名隔躲,第三次因?yàn)樾〕绦蚶镉袀€(gè)旅游信息查詢缕允,沒(méi)有選擇旅游類目,第四次需要我提供一個(gè)測(cè)試賬號(hào)蹭越。因此障本,服務(wù)類目特別重要,設(shè)置方法如下响鹃,登錄你的小程序控制臺(tái)

https://mp.weixin.qq.com/wxamp/index/index

  • 選擇設(shè)置驾霜,在右邊的面板中選擇基本設(shè)置,服務(wù)類目买置,按照你的小程序的功能選擇相應(yīng)的服務(wù)類目粪糙,最多只能有5個(gè)服務(wù)類目。比如你的小程序里有旅游功能忿项,需要選擇旅游蓉冈,然后選擇子類目,還比如你的小程序里有日歷功能轩触,需要選擇工具類目里的日歷子類目寞酿,因此一定要檢查你的小程序的相關(guān)功能,來(lái)選擇正確的服務(wù)類目脱柱。
  • 提供一個(gè)測(cè)試賬號(hào)和密碼伐弹,審核人員會(huì)運(yùn)行你的小程序來(lái)進(jìn)行審核。
  • 如果有審核不明白的地方榨为,可以在線人工服務(wù)惨好,響應(yīng)也比較及時(shí)。


    Screen Shot 2021-02-17 at 5.44.37 PM.png

創(chuàng)建短信簽名

小程序上線完成后随闺,就可以使用小程序的設(shè)置來(lái)申請(qǐng)短信簽名日川,如下圖,需要提供小程序的截圖矩乐,也就是小程序的控制臺(tái)的基本設(shè)置頁(yè)面的截圖龄句。簽名內(nèi)容是小程序的全程或者簡(jiǎn)稱,這個(gè)內(nèi)容在發(fā)送短信時(shí)需要用到绰精。


Screen Shot 2021-02-17 at 5.53.17 PM.png

創(chuàng)建短信正文模板

短信簽名完成后撒璧,就可以創(chuàng)建正文模板,系統(tǒng)也提供了一些內(nèi)置的標(biāo)準(zhǔn)模板笨使,也可以創(chuàng)建自定義模板,如

{1}為您的登錄驗(yàn)證碼僚害,請(qǐng)于{2}分鐘內(nèi)填寫(xiě)硫椰。如非本人操作繁调,請(qǐng)忽略本短信。(其中{1}靶草、{2}為可自定義的內(nèi)容蹄胰,須從1開(kāi)始連續(xù)編號(hào),如{1}奕翔、{2}等)
其中{1}裕寨,{2}這些在發(fā)送短信時(shí)需要作為模板參數(shù)傳入。

Screen Shot 2021-02-17 at 5.57.43 PM.png

等待審核

短信模板審核提交后派继,就只需要等待審核宾袜,這個(gè)過(guò)程很快就能完成。

發(fā)送短信

網(wǎng)上也有很多的方法來(lái)發(fā)送短信驾窟,但因?yàn)閟ms的版本也在不斷變化庆猫,因此請(qǐng)求參數(shù)也是不斷的在變化,肯定會(huì)出現(xiàn)版本兼容性的問(wèn)題绅络,因此大部分都不能正常使用月培。因此,盡量使用騰訊提供的SDK是最省事的辦法恩急,而且有sdk的版本信息杉畜。代碼片段可以參考git上的源碼。

https://github.com/TencentCloud/tencentcloud-sdk-nodejs/blob/master/examples/sms/v20190711/SendSms.js

隨著騰訊云SMS的升級(jí)衷恭,sms的sdk client應(yīng)該也會(huì)跟著升級(jí)寻行。在發(fā)送短信中,需要以下幾個(gè)關(guān)鍵配置匾荆。

SecretId和SecretKey

這兩項(xiàng)是必填項(xiàng)拌蜘,騰訊云賬戶密鑰對(duì)secretId,secretKey牙丽。獲取這兩項(xiàng)的方法是訪問(wèn)云控制平臺(tái)的CAM

https://console.cloud.tencent.com/cam/capi

Screen Shot 2021-02-18 at 8.55.35 AM.png

這兩項(xiàng)值涉及到你的賬號(hào)安全简卧,因此需要妥善保管,防止外泄烤芦,因此采用的是從環(huán)境變量讀取的方式举娩,需要在環(huán)境變量中先設(shè)置這兩個(gè)值。

短信應(yīng)用Id

短信應(yīng)用ID构罗,訪問(wèn)短息控制臺(tái)

https://console.cloud.tencent.com/smsv2/app-manage

短信SdkAppid在 [短信控制臺(tái)] 添加應(yīng)用后生成的實(shí)際SdkAppid铜涉,如下圖。


Screen Shot 2021-02-18 at 8.59.28 AM.png
短信簽名內(nèi)容

短信簽名內(nèi)容遂唧,使用 UTF-8 編碼芙代,必須填寫(xiě)已審核通過(guò)的簽名,簽名信息可登錄控制臺(tái)查看盖彭。

https://console.cloud.tencent.com/smsv2/csms-sign

模板ID

模板 ID纹烹,必須填寫(xiě)已審核通過(guò)的模板 ID页滚。模板ID可登錄 [短信控制臺(tái)] 查看。

https://console.cloud.tencent.com/smsv2/csms-template

模板參數(shù)

模板參數(shù)铺呵,若無(wú)模板參數(shù)裹驰,則設(shè)置為空。模板參數(shù)即創(chuàng)建模板時(shí)候的{1}{2}等內(nèi)容片挂。

電話號(hào)碼

這個(gè)就不用過(guò)多描述了幻林,接受短線的電話號(hào)碼,中國(guó)大陸電話需要有+86音念。

發(fā)送短信源碼

整個(gè)短信發(fā)送的代碼片段如下沪饺,接受三個(gè)參數(shù),templateId症昏,phone随闽,templateParamSet

// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
const tencentcloud = require('tencentcloud-sdk-nodejs');
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
  async function sendSms(phone, templateId, templateParamSet) {
    const smsClient = tencentcloud.sms.v20190711.Client
    console.log(process.env)

    /* 實(shí)例化要請(qǐng)求產(chǎn)品(以sms為例)的client對(duì)象 */
    const client = new smsClient({
      credential: {
        /* 必填:騰訊云賬戶密鑰對(duì)secretId,secretKey肝谭。
         * 這里采用的是從環(huán)境變量讀取的方式掘宪,需要在環(huán)境變量中先設(shè)置這兩個(gè)值。
         * 你也可以直接在代碼中寫(xiě)死密鑰對(duì)攘烛,但是小心不要將代碼復(fù)制魏滚、上傳或者分享給他人,
         * 以免泄露密鑰對(duì)危及你的財(cái)產(chǎn)安全坟漱。
         * CAM密匙查詢: https://console.cloud.tencent.com/cam/capi */
        secretId: process.env.SECRETID,
        secretKey: process.env.SECRETKEY,
      },
      /* 必填:地域信息鼠次,可以直接填寫(xiě)字符串a(chǎn)p-guangzhou,或者引用預(yù)設(shè)的常量 */
      region: "ap-guangzhou",
      /* 非必填:
       * 客戶端配置對(duì)象芋齿,可以指定超時(shí)時(shí)間等配置 */
      profile: {
        /* SDK默認(rèn)用TC3-HMAC-SHA256進(jìn)行簽名腥寇,非必要請(qǐng)不要修改這個(gè)字段 */
        signMethod: "HmacSHA256",
        httpProfile: {
          /* SDK默認(rèn)使用POST方法。
           * 如果你一定要使用GET方法觅捆,可以在這里設(shè)置赦役。GET方法無(wú)法處理一些較大的請(qǐng)求 */
          reqMethod: "POST",
          /* SDK有默認(rèn)的超時(shí)時(shí)間,非必要請(qǐng)不要進(jìn)行調(diào)整
           * 如有需要請(qǐng)?jiān)诖a中查閱以獲取最新的默認(rèn)值 */
          reqTimeout: 30,
          /**
           * SDK會(huì)自動(dòng)指定域名栅炒。通常是不需要特地指定域名的掂摔,但是如果你訪問(wèn)的是金融區(qū)的服務(wù)
           * 則必須手動(dòng)指定域名,例如sms的上海金融區(qū)域名: sms.ap-shanghai-fsi.tencentcloudapi.com
           */
          endpoint: "sms.tencentcloudapi.com"
        },
      },
    })

    /* 請(qǐng)求參數(shù)赢赊,根據(jù)調(diào)用的接口和實(shí)際情況乙漓,可以進(jìn)一步設(shè)置請(qǐng)求參數(shù)
     * 屬性可能是基本類型,也可能引用了另一個(gè)數(shù)據(jù)結(jié)構(gòu)
     * 推薦使用IDE進(jìn)行開(kāi)發(fā)释移,可以方便的跳轉(zhuǎn)查閱各個(gè)接口和數(shù)據(jù)結(jié)構(gòu)的文檔說(shuō)明 */
    const params = {
      /* 短信應(yīng)用ID: 短信SdkAppid在 [短信控制臺(tái)] 添加應(yīng)用后生成的實(shí)際SdkAppid叭披,示例如1400006666 */
      SmsSdkAppid:process.env.SMS_SDKAPPID,
      /* 短信簽名內(nèi)容: 使用 UTF-8 編碼,必須填寫(xiě)已審核通過(guò)的簽名秀鞭,簽名信息可登錄 [短信控制臺(tái)] 查看 */
      Sign:process.env.SMS_SIGN,
      //'process.env.SMS_SIGN',
      /* 短信碼號(hào)擴(kuò)展號(hào): 默認(rèn)未開(kāi)通趋观,如需開(kāi)通請(qǐng)聯(lián)系 [sms helper] */
      ExtendCode: "",
      /* 國(guó)際/港澳臺(tái)短信 senderid: 國(guó)內(nèi)短信填空扛禽,默認(rèn)未開(kāi)通锋边,如需開(kāi)通請(qǐng)聯(lián)系 [sms helper] */
      SenderId: "",
      /* 用戶的 session 內(nèi)容: 可以攜帶用戶側(cè) ID 等上下文信息皱坛,server 會(huì)原樣返回 */
      SessionContext: "",
      /* 下發(fā)手機(jī)號(hào)碼,采用 e.164 標(biāo)準(zhǔn)豆巨,+[國(guó)家或地區(qū)碼][手機(jī)號(hào)]
       * 示例如:+8613711112222剩辟, 其中前面有一個(gè)+號(hào) ,86為國(guó)家碼往扔,13711112222為手機(jī)號(hào)贩猎,最多不要超過(guò)200個(gè)手機(jī)號(hào)*/
      PhoneNumberSet: ["+86" + phone],
      /* 模板 ID: 必須填寫(xiě)已審核通過(guò)的模板 ID。模板ID可登錄 [短信控制臺(tái)] 查看 */
      TemplateID: templateId,
      /* 模板參數(shù): 若無(wú)模板參數(shù)萍膛,則設(shè)置為空*/
      TemplateParamSet: templateParamSet,
    }
    // 通過(guò)client對(duì)象調(diào)用想要訪問(wèn)的接口吭服,需要傳入請(qǐng)求對(duì)象以及響應(yīng)回調(diào)函數(shù)
    return client.SendSms(params);
  }
  return sendSms(event.phone, event.templateId, event.templateParamSet);
}

其中,需要配置4個(gè)環(huán)境變量蝗罗,在小程序開(kāi)發(fā)工具中選擇云函數(shù)艇棕,選擇版本與配置,高級(jí)配置里設(shè)置如下四個(gè)環(huán)境變量串塑。

  • SECRETID
  • SECRETKEY
  • SMS_SDKAPPI
  • SMS_SIGN沼琉。
    方法接受三個(gè)輸入?yún)?shù)
  • phone,電話號(hào)碼
  • templateId桩匪,短信模板ID
  • templateParamSet,短信模板參數(shù)打瘪,數(shù)組
Screen Shot 2021-02-18 at 9.26.46 AM.png

注意事項(xiàng)
本地調(diào)試版本貌似環(huán)境變量不能生效,必須上傳云函數(shù)傻昙,而且需要上傳所有文件環(huán)境變量才能生效闺骚,這上面花了很多時(shí)間一直沒(méi)通過(guò)。

測(cè)試SMS云函數(shù)

在小程序里測(cè)試短信云函數(shù)是否生效妆档,代碼如下:

wx.cloud.callFunction({
      name: 'sms',
      data: {
        phone: "136********",
        templateId: "859976",
        templateParamSet: ["123456"]
      }
    }).then(res=>{
      console.log(res);
    })

寫(xiě)在最后

上面就介紹完了在小程序中使用騰訊云sms來(lái)發(fā)送短信的整個(gè)流程僻爽,開(kāi)發(fā)不困難,關(guān)鍵是搞清小程序上線流程过吻,以及短信功能涉及到的一些關(guān)鍵必填信息的獲取进泼,需要涉及到騰訊云的CAM,短信sms,以及小程序這三個(gè)功能纤虽。環(huán)境變量的設(shè)置遇到來(lái)一些小坑乳绕,一直在本地云調(diào)試,所以沒(méi)能獲取到環(huán)境變量值逼纸,剛開(kāi)始上傳云函數(shù)洋措,也沒(méi)有選中上傳所有文件,導(dǎo)致也不能獲取到環(huán)境變量杰刽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末菠发,一起剝皮案震驚了整個(gè)濱河市王滤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滓鸠,老刑警劉巖雁乡,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異糜俗,居然都是意外死亡踱稍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)悠抹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)珠月,“玉大人,你說(shuō)我怎么就攤上這事楔敌∑】妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵卵凑,是天一觀的道長(zhǎng)庆聘。 經(jīng)常有香客問(wèn)我,道長(zhǎng)氛谜,這世上最難降的妖魔是什么掏觉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮值漫,結(jié)果婚禮上澳腹,老公的妹妹穿的比我還像新娘。我一直安慰自己杨何,他們只是感情好酱塔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著危虱,像睡著了一般羊娃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上埃跷,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天蕊玷,我揣著相機(jī)與錄音,去河邊找鬼弥雹。 笑死垃帅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剪勿。 我是一名探鬼主播贸诚,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了酱固?” 一聲冷哼從身側(cè)響起械念,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎运悲,沒(méi)想到半個(gè)月后龄减,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扇苞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年欺殿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寄纵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鳖敷。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖程拭,靈堂內(nèi)的尸體忽然破棺而出定踱,到底是詐尸還是另有隱情,我是刑警寧澤恃鞋,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布崖媚,位于F島的核電站,受9級(jí)特大地震影響恤浪,放射性物質(zhì)發(fā)生泄漏畅哑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一水由、第九天 我趴在偏房一處隱蔽的房頂上張望荠呐。 院中可真熱鬧,春花似錦砂客、人聲如沸泥张。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)媚创。三九已至,卻和暖如春彤恶,著一層夾襖步出監(jiān)牢的瞬間钞钙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工声离, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芒炼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓抵恋,卻偏偏與公主長(zhǎng)得像焕议,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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