微信小程序云开发,使用阿里云短信服务,搜索员工生日定期发送短信。
相关API文档地址:
阿里云短信服务API文档地址
小程序云开发云函数正则匹配API文档地址
小程序云开发云函数定时触发器
1.登录阿里云,购买短信服务并添加签名和模板
2., 登录阿里云,鼠标放在右上角的头像图标就会显示 AccessKey 管理,在里面找到你的 AccessKey ID 和 AccessKey Secret ,没有的话创建一个。
3.创建云函数,右键点击云函数,选择在终端打开,然后在 cmd 执行 npm install @alicloud/pop-core -S 命令,安装短信的node.js SDK 。
安装 短信的node.js SDK , npm 命令 npm install @alicloud/pop-core -S
npm install @alicloud/pop-core -S
4. 发送短信示例代码:
// 云函数入口文件
const cloud = require('wx-server-sdk')
const Core = require('@alicloud/pop-core');cloud.init()// 云函数入口函数
exports.main = async (event, context) => {const wxContext = cloud.getWXContext()var params = {"RegionId": "cn-hangzhou","PhoneNumberJson": "[\"13977280000\"]","SignNameJson": "[\"*****公司\"]","TemplateCode": "SMS_194900262","TemplateParamJson": "[{\"name\":\"李2\",\"date\":\"2020-7-5\"}]"}var client = new Core({accessKeyId: 'LTAI4G8Vi**********',accessKeySecret: 'Me2tWwsNFGPsf************',endpoint: 'https://dysmsapi.aliyuncs.com',apiVersion: '2017-05-25'});var requestOption = {method: 'POST'};const post_res= await client.request('SendBatchSms', params, requestOption).then((result) => {console.log(JSON.stringify(result));return {code:1,result: result,}}, (ex) => {return {code:0,result: ex,}})return post_res;}
5.发送短信,模糊搜索数据库匹配的完整发送短信代码:
// 云函数入口文件
const cloud = require('wx-server-sdk')
const Core = require('@alicloud/pop-core');cloud.init()
const db = cloud.database()function getDate(){var date = new Date();var year = date.getFullYear();var month = date.getMonth() + 1;var day = date.getDate();if (month < 10) {month = "0" + month;}if (day < 10) {day = "0" + day;}var nowDate = "-"+month + "-" + day;return nowDate;
}
// 云函数入口函数
exports.main = async (event, context) => {const wxContext = cloud.getWXContext()const _ = db.commandconst birthdayArr = await db.collection('birthday').where({_date: db.RegExp({regexp: getDate(),options: 'i',})}).get().then(res => {return res.data;})var phoneArr =[];var TemplateParamJson =[];var SignNameJson=[]birthdayArr.forEach(item=>{if(item.phone){phoneArr.push(item.phone)let obj ={name:item.name,date:item._date}SignNameJson.push('****公司')TemplateParamJson.push(obj)}})var params = {"RegionId": "cn-hangzhou","PhoneNumberJson":JSON.stringify(phoneArr),"SignNameJson": JSON.stringify(SignNameJson),"TemplateCode": "SMS_194900262","TemplateParamJson": JSON.stringify(TemplateParamJson)}var client = new Core({accessKeyId: 'LTAI4G8Vit3SfF4p********',accessKeySecret: 'Me2tWwsNFGPsfPgB**********',endpoint: 'https://dysmsapi.aliyuncs.com',apiVersion: '2017-05-25'});var requestOption = {method: 'POST'};const post_res= await client.request('SendBatchSms', params, requestOption).then((result) => {console.log(JSON.stringify(result));return {code:1,result: result,params:params}}, (ex) => {return {code:0,result: ex,params:params}})return post_res;}
在小程序端调用API的示例代码:
onLoad(){console.log('000')wx.cloud.callFunction({name: "birthday",success(res) {console.log('res',res)},fail(err){console.log('err',err)}})},
调用后打印结果如图说明发送短信成功了:
6.发送短信成功了,最后写定时器,规定每天上午8点自动执行一次该函数,在云函数的 config.json 文件添加 triggers,代码:
{"triggers": [{"name": "birthday","type": "timer","config": "0 0 8 * * * *"}]
}
代码写完了,下面是官方文档------------------------------------------------------------------------
阿里云发送短信API参数说明文档:
调用SendBatchSms接口批量发送短信。
SendBatchSms接口是短信批量发送接口,支持在一次请求中分别向多个不同的手机号码发送不同签名的短信。手机号码等参数均为JSON格式,字段个数相同,一一对应,短信服务根据字段在JSON中的顺序判断发往指定手机号码的签名。
如果您需要往多个手机号码中发送同样签名的短信,请使用SendSms接口实现。
调用该接口发送短信时,请注意:
- 发送短信会根据发送量计费,价格请参考计费说明。
- 在一次请求中,最多可以向100个手机号码分别发送短信。
请求参数
名称 | 类型 | 是否必选 | 示例值 | 描述 |
---|---|---|---|---|
PhoneNumberJson | String | 是 | ["15900000000","13500000000"] | 接收短信的手机号码,JSON数组格式。 手机号码格式:
说明 验证码类型短信,建议使用接口SendSms单独发送。 |
SignNameJson | String | 是 | ["阿里云","阿里巴巴"] | 短信签名名称,JSON数组格式。 请在控制台签名管理页面签名名称一列查看。 说明 必须是已添加、并通过审核的短信签名;且短信签名的个数必须与手机号码的个数相同、内容一一对应。 |
TemplateCode | String | 是 | SMS_152550005 | 短信模板CODE。请在控制台模板管理页面模板CODE一列查看。 说明 必须是已添加、并通过审核的模板CODE;且发送国际/港澳台消息时,请使用国际/港澳台短信模版。 |
AccessKeyId | String | 否 | LTAIP00vvvvvvvvv | 主账号AccessKey的ID。 |
Action | String | 否 | SendBatchSms | 系统规定参数。取值:SendBatchSms。 |
SmsUpExtendCodeJson | String | 否 | ["90999","90998"] | 上行短信扩展码,JSON数组格式。无特殊需要此字段的用户请忽略此字段。 |
TemplateParamJson | String | 否 | [{"name":"TemplateParamJson"},{"name":"TemplateParamJson"}] | 短信模板变量对应的实际值,JSON格式。 说明 如果JSON中需要带换行符,请参照标准的JSON协议处理;且模板变量值的个数必须与手机号码、签名的个数相同、内容一一对应,表示向指定手机号码中发对应签名的短信,且短信模板中的变量参数替换为对应的值。 |
返回数据
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
BizId | String | 900619746936498440^0 | 发送回执ID,可根据该ID在接口QuerySendDetails中查询具体的发送状态。 |
Code | String | OK | 请求状态码。
|
Message | String | OK | 状态码的描述。 |
RequestId | String | F655A8D5-B967-440B-8683-DAD6FF8DE990 | 请求ID。 |
示例
请求示例
http(s)://[Endpoint]/?PhoneNumberJson=["15900000000","13500000000"]
&SignNameJson=["阿里云","阿里巴巴"]
&TemplateCode=SMS_152550005
&<公共请求参数>
正常返回示例
XML
格式
<SendSmsResponse><Message>OK</Message><RequestId>44DF7A95-603F-4651-9298-BE1850BEB53F</RequestId><BizId>336006646937050335^0</BizId><Code>OK</Code>
</SendSmsResponse>
JSON
格式
{"Message":"OK","RequestId":"2184201F-BFB3-446B-B1F2-C746B7BF0657","BizId":"197703245997295588^0","Code":"OK"
}
相关文章:

信息安全系统设计基础家庭作业
《深入理解计算机系统》家庭作业 * 8.9 答案: 进程对 是否并发 AB 否 AC 是 AD 是 BC 是 BD 是 CD 是 * 8.10 答案: A. 调用一次,返回两次: fork B. 调用一次,从不返回: execve, longjmp C. 调…

css游戏代码_介绍CSSBattle-第一个CSS代码搜寻游戏
css游戏代码by kushagra gour由kushagra gour 介绍CSSBattle-第一个CSS代码搜寻游戏 (Introducing CSSBattle — the first CSS code-golfing game) If you are learning Web development or are already a professional Web developer, there is a very high chance you have…

IOS手机全屏长按识别二维码HTML代码
代码段作用讲解: 1. 二维码的全屏样式, opacity: 0; 透明样式, touch-callout: none; -webkit-touch-callout: none; -ms-touch-callout: none; -moz-touch-callout: none; 禁止IOS默认长按事件 .codePage {position: absolute;touch-callout: none;…

[亲测]在Mac下配置php开发环境:Apache+php+MySql
公司给我们配上了高大上的Apple Mac Pro本本,这两天自己正在习惯中。通过虚拟机PD,确实解决了一些因为工作习惯无法在iOS上很好完成的事情,但是我想,既然用起了iOS就尽量将一些事务在iOS环境下处理,免得好似关羽耍着大…

RabbitMQ 异常与任务分发
RabbitMQ 异常与任务分发 异常情况处理 上篇最后提到了这个问题, consumer异常退出、queue出错、甚至rabbitMQ崩溃。因为它们都是软件 ,软件都会有bug,这是无法避免的。所以RabbitMQ在设计的时候也想到了这一点 在之前,消息分发给…

reddit_如何使用Python创建自定义Reddit通知系统
redditby Kelsey Wang王凯西 如何使用Python创建自定义Reddit通知系统 (How to make a custom Reddit notification system with Python) Don’t you just love automated emails? I know I do. I mean, who doesn’t enjoy waking up to 236 new messages from Nike, Ticket…

1016. Phone Bills (25)
时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, Yue去掉非法数据计算账单A long-distance telephone company charges its customers by the following rules:Making a long-distance call costs a certain amount per minute, depending on the…

样式集(五)微信朋友圈样式模拟
效果图: 小图标: 源码: <!--pages/findList/findList.wxml--> <image class"xxiangji" catchtap"xxiangji" src"/images/xxiangji.png"></image> <image class"top_img" src&…

为什么要选择useState而不是useReducer
by Austin Malerba奥斯汀马勒巴(Austin Malerba) 为什么要选择useState而不是useReducer (Why you should choose useState instead of useReducer) 通过useState进行本地和全局状态管理的指南 (A guide to local and global state management via useState) Since the introd…

php 类中的变量的定义
php 如果在类中定义变量,在类的方法中调用时应该加上$this-> . class ClassName {private $a 333;function __construct(){$this->a 2222;}public function bbb($value){echo $this->a;} } $b new className(); echo $b->bbb();转载于:https://www.c…

微信小程序云数据库触底分页加载,下拉无限加载,第一次请求数据随机,随机获取数据库的数据
效果图 小程序云开发分页加载代码 <!--pages/chatList/chatList.wxml--> <view class"pageTitle">家博慧</view> <view class" search_arr"><icon class"searchcion" size16 typesearch></icon><input …

Linux(Centos)之安装Java JDK及注意事项
1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a解释:如果有x86_64就是64位的,没有就是32位的。后面是X686或X86_64则内核是64位的&…

2019web前端趋势_2019年最值得关注的Web开发趋势
2019web前端趋势by Mrudul Shah通过Mrudul Shah 2019年最值得关注的Web开发趋势 (Top Web Development trends to look out for in 2019) Do you know that nearly 200 websites are pushed out every minute? Sounds astonishing right? But it is a fact and that’s why …

WPF入门教程系列九——布局之DockPanel与ViewBox(四)
七. DockPanel DockPanel定义一个区域,在此区域中,您可以使子元素通过描点的形式排列,这些对象位于 Children 属性中。停靠面板其实就是在WinForm类似于Dock属性的元 素。DockPanel会对每个子元素进行排序,并停靠在面板的一侧&…

tabBar 自定义,小程序自定义底部导航栏
创建一个自定义组件 my_tab,组件代码在后面,先看调用自定义组件的代码,比如我需要在index 页面调用,就在index.json中引用组件,index.json 代码(引用的路径为你创建的自定义组件路径) {"n…

2015年最新出炉的JavaScript开发框架
前端框架简化了开发过程中,像 Bootstrap 和 Foundation 就是前端框架的佼佼者。在这篇文章了,我们编制了一组新鲜的,实用的,可以帮助您建立高质量的 Web 应用程序的 JavaScript 框架清单。 1.Aurelia Aurelia是下一代JavaScript客…

小程序前端性能测试_如何提高前端应用程序的性能
小程序前端性能测试If your website takes longer than 3 seconds to load, you could already be losing nearly half of your visitors.如果您的网站加载时间超过3秒,则可能已经失去了将近一半的访问者。 Yes this is a fact, proven by several research studie…

10-TypeScript中的接口
接口是一种规约的约定,从接口继承的类必须实现接口的约定。在高级开发中,通常接口是用于实现各种设计模式的基础,没有接口,设计模式无从谈起。 定义接口: interface ILog{recordlog():boolean; } 类从接口继承…

样式集(六)仿微信通讯录样式
效果图: 这里有引用到 自定义底部导航,自定义底部导航组件链接 <!--pages/chatList/chatList.wxml--><!-- <include src"/components/common/common" /> --> <view class"top"><view class"pageTi…

WCF动态添加ServiceKnownType
WCF中传输自定义类型时,必须在服务接口类(服务协定)上加上ServiceKnownType(typeof(yourClass)), 在实际应用中比较麻烦,可以用动态的办法来实现动态添加。 服务接口类,加上一行 [ServiceKnownType("GetKnownType…

博客 rss 如何使用_如何使用RSS从您的GatsbyJS博客自动交叉发布
博客 rss 如何使用With the recent exodus from Medium many developers are now creating their own GatsbyJS Blogs and then cross-posting to Medium or publications like freecodecamp.org and dev.to.随着Medium最近的离职,许多开发人员现在正在创建自己的Ga…

大型技术网站的技术( 高并发、大数据、高可用、分布式....)(一)
面对高并发、大流量、高可用、海量数据、用户分布广泛、网络情况复杂这类网站系统我们如何应对??? 第一阶段 一台服务器不行就上多台服务器 1.应用程序与数据服务分离 将应用程序、数据库、文件等资源放在一台服务器上,面对海量…

BestCoder Round #65 B C D || HDU 5591 5592 5593
B 题意:ZYB在远足中,和同学们玩了一个“数字炸弹”游戏:由主持人心里想一个在[1,N][1,N]中的数字XX,然后玩家们轮流猜一个数字,如果一个玩家恰好猜中XX则算负,否则主持人将告诉全场的人当前的数和XX比是偏大还是偏小&a…

数组去重,ES6数组去重 new Set()
普通数组去重 var b [...new Set([1,2, 3, 4, 5, 5, 5, 5])]console.log(b); 输出结果: 包含对象的数组去重 var o {a:1}var b [...new Set([o, o, 3, 4, 5, 5, 5, 5])]console.log(b); 输出结果: 包含对象的数组去重有一个坑 var b [...new Set([{…

使用angular的好处_在项目中使用Angular的最大好处
使用angular的好处by Irina Sidorenko伊琳娜西多连科(Irina Sidorenko) 在项目中使用Angular的最大好处 (The top benefits of using Angular for your project) 在项目实施中使用Angular的11个理由及其好处 (11 reasons to use Angular and its benefits for your project im…

python之路——模块和包
一、模块 1、什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀。 但其实import加载的模块分为四个通用类别: 1、使用Python编写的代码(.py文件) 2、…

夺命雷公狗---linux NO:3 centos_mini版的安装和备份
废话不多说,和前面的其实是差不多的,如下图所示: 安装其实是和桌面版的差不多的,但是经典版的不能自定义分区(如详细区,如home之类的)。。。 因为我们使用的是命令行方式的所以直接选英文&#…

快速学习 async await 的使用, Demo 解析
async 和 await 字面都很好理解,分别是异步和等待。 来两个简单的 demo, demo1 tt2(){return new Promise(rps>{setTimeout(() > {rps(true)}, 1500);})},async tt1(){var a await this.tt2();console.log(a)},/*** 生命周期函数--监听页面加载*…

小型工作室创业项目_为什么新开发人员应该在小型创业公司工作
小型工作室创业项目In my first year of working in the industry (6 months as an intern, 6 months as a full-time employee), I worked at startups that were less than 10 people large. I was one of the only 2 or 3 developers, and usually one of the first. Throug…

head first python菜鸟学习笔记(第六章)
1. Python提供字典,允许有效组织数据,将数据与名关联,从而实现快速查找,而不是以数字关联。 字典是内置数据结构,允许将数据与键而不是数字关联。这样可以使内存中的数据与实际数据的结构保持一致。?&#…