跟我学微信小程序之五(云短信篇)

发送短信在小程序中是一个常见功能,比如注册账号时发送验证码,发送短信通知等等,这些都需要用到云短信功能。使用腾讯云的SMS来发送短信功能开发比较简单,但申请流程还是比较麻烦,整理下来避免大家少走弯路。

第一步,上线小程序

访问腾讯的SMS控制台的快速开始页面

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

给出了短信功能的快速入门的步骤,第一步是创建短信签名,这一步需要使用小程序来申请短信签名,因此需要上线小程序,并提供小程序的相关信息才能申请短信签名。上线小程序特别注意小程序的类目设置,如果这个设置不正确,审核就不能通过,吐槽一下小程序审核,一般审核大概1天左右的时间,而且每次都是一项一项的审核不通过,不会一次把所有不通过的项全部列出,一次解决多痛快,因此这样审核导致周期会比较长,我的审核了5天才成功上线。第一次因为小程序里开发了一个日历控件,没有选择工具-》日历,第二次因为小程序里有个报名功能,没有选择工具-》预约报名,第三次因为小程序里有个旅游信息查询,没有选择旅游类目,第四次需要我提供一个测试账号。因此,服务类目特别重要,设置方法如下,登录你的小程序控制台

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

  • 选择设置,在右边的面板中选择基本设置,服务类目,按照你的小程序的功能选择相应的服务类目,最多只能有5个服务类目。比如你的小程序里有旅游功能,需要选择旅游,然后选择子类目,还比如你的小程序里有日历功能,需要选择工具类目里的日历子类目,因此一定要检查你的小程序的相关功能,来选择正确的服务类目。
  • 提供一个测试账号和密码,审核人员会运行你的小程序来进行审核。
  • 如果有审核不明白的地方,可以在线人工服务,响应也比较及时。


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

创建短信签名

小程序上线完成后,就可以使用小程序的设置来申请短信签名,如下图,需要提供小程序的截图,也就是小程序的控制台的基本设置页面的截图。签名内容是小程序的全程或者简称,这个内容在发送短信时需要用到。


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

创建短信正文模板

短信签名完成后,就可以创建正文模板,系统也提供了一些内置的标准模板,也可以创建自定义模板,如

{1}为您的登录验证码,请于{2}分钟内填写。如非本人操作,请忽略本短信。(其中{1}、{2}为可自定义的内容,须从1开始连续编号,如{1}、{2}等)
其中{1},{2}这些在发送短信时需要作为模板参数传入。

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

等待审核

短信模板审核提交后,就只需要等待审核,这个过程很快就能完成。

发送短信

网上也有很多的方法来发送短信,但因为sms的版本也在不断变化,因此请求参数也是不断的在变化,肯定会出现版本兼容性的问题,因此大部分都不能正常使用。因此,尽量使用腾讯提供的SDK是最省事的办法,而且有sdk的版本信息。代码片段可以参考git上的源码。

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

随着腾讯云SMS的升级,sms的sdk client应该也会跟着升级。在发送短信中,需要以下几个关键配置。

SecretId和SecretKey

这两项是必填项,腾讯云账户密钥对secretId,secretKey。获取这两项的方法是访问云控制平台的CAM

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

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

这两项值涉及到你的账号安全,因此需要妥善保管,防止外泄,因此采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。

短信应用Id

短信应用ID,访问短息控制台

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

短信SdkAppid在 [短信控制台] 添加应用后生成的实际SdkAppid,如下图。


Screen Shot 2021-02-18 at 8.59.28 AM.png
短信签名内容

短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录控制台查看。

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

模板ID

模板 ID,必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看。

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

模板参数

模板参数,若无模板参数,则设置为空。模板参数即创建模板时候的{1}{2}等内容。

电话号码

这个就不用过多描述了,接受短线的电话号码,中国大陆电话需要有+86。

发送短信源码

整个短信发送的代码片段如下,接受三个参数,templateId,phone,templateParamSet

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

    /* 实例化要请求产品(以sms为例)的client对象 */
    const client = new smsClient({
      credential: {
        /* 必填:腾讯云账户密钥对secretId,secretKey。
         * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
         * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
         * 以免泄露密钥对危及你的财产安全。
         * CAM密匙查询: https://console.cloud.tencent.com/cam/capi */
        secretId: process.env.SECRETID,
        secretKey: process.env.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 params = {
      /* 短信应用ID: 短信SdkAppid在 [短信控制台] 添加应用后生成的实际SdkAppid,示例如1400006666 */
      SmsSdkAppid:process.env.SMS_SDKAPPID,
      /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
      Sign:process.env.SMS_SIGN,
      //'process.env.SMS_SIGN',
      /* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
      ExtendCode: "",
      /* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
      SenderId: "",
      /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
      SessionContext: "",
      /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
       * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
      PhoneNumberSet: ["+86" + phone],
      /* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
      TemplateID: templateId,
      /* 模板参数: 若无模板参数,则设置为空*/
      TemplateParamSet: templateParamSet,
    }
    // 通过client对象调用想要访问的接口,需要传入请求对象以及响应回调函数
    return client.SendSms(params);
  }
  return sendSms(event.phone, event.templateId, event.templateParamSet);
}

其中,需要配置4个环境变量,在小程序开发工具中选择云函数,选择版本与配置,高级配置里设置如下四个环境变量。

  • SECRETID
  • SECRETKEY
  • SMS_SDKAPPI
  • SMS_SIGN。
    方法接受三个输入参数
  • phone,电话号码
  • templateId,短信模板ID
  • templateParamSet,短信模板参数,数组
Screen Shot 2021-02-18 at 9.26.46 AM.png

注意事项
本地调试版本貌似环境变量不能生效,必须上传云函数,而且需要上传所有文件环境变量才能生效,这上面花了很多时间一直没通过。

测试SMS云函数

在小程序里测试短信云函数是否生效,代码如下:

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

写在最后

上面就介绍完了在小程序中使用腾讯云sms来发送短信的整个流程,开发不困难,关键是搞清小程序上线流程,以及短信功能涉及到的一些关键必填信息的获取,需要涉及到腾讯云的CAM,短信sms,以及小程序这三个功能。环境变量的设置遇到来一些小坑,一直在本地云调试,所以没能获取到环境变量值,刚开始上传云函数,也没有选中上传所有文件,导致也不能获取到环境变量。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容