爆火微信公众号自定义早安推送,爱她就给她推送

为女朋友打造专属早安推送

先上截图

电脑端看的效果

手机端看的效果

一、申请微信公众号测试号

mp.weixin.qq.com/debug/cgi-b...

打开链接,微信扫码登录即可

二、让他/她扫码关注测试公众号

三、新增模板消息

点击 【新增测试模板】

根据自己所需,输入想要展示的标题、内容即可,点击 【提交】 之后,会生成 【模板ID】 ,后面代码里会用到。

比如,下面是我的三个模板。这一步大家可以自由发挥,这里只弄了一个天气的api,其他的api网上都有。至于相识、相恋的天数等计时可自行设置计算即可。

比如开篇的效果截图的模板如下:大家按需自取

java 复制代码
今天是:{{date.DATA}} 
{{startText.DATA}} 
当前城市:{{city.DATA}} {{textDay.DATA}} 
最低气温:{{tempMin.DATA}} 
最高气温:{{tempMax.DATA}} 
白天风力:{{windScaleDay.DATA}} 
夜间风力:{{windScaleNight.DATA}} 
今天是我们相识的第{{know_day.DATA}}天 
今天是我们相恋的第{{love_day.DATA}}天 
{{note_en.DATA}} 
{{note_ch.DATA}}

四、天气API

想要获得天气信息,需要调用天气的接口

我使用的是 和风天气

  1. 注册登录
  2. 应用管理->创建应用->得到key
  3. 城市代码查询 和风天气常用地区列表,可以按住Ctrl+F查找,比如北京-朝阳代码是:101010300
  4. 开发版的天气api 为:devapi.qweather.com/v7/weather/...

五、使用 leancloud 部署云函数

  1. 进入leancloud官网注册登录
  2. 控制台->创建应用
  3. 进入该应用->云函数->部署部署步骤

    部署完成之后,在云函数处可看到:

    也可配置定时任务

    至此,大功告成,快行动起来,给她你的关心吧

六、源代码

核心文件:cloud.js,按需自取,把 ****** 对应的内容,替换成自己的配置即可

javascript 复制代码
const AV = require('leanengine')
const fs = require('fs')
const path = require('path')
const axios = require('axios')

const config = {
  token: '********', //对应测试号接口配置信息里填的 token, 随便填什么
  appid: '********', //对应测试号信息里的 appID
  secret: '********', //对应测试号信息里的 appsecret
  grant_type: 'client_credential', //默认
  tousers:['********','********']// 测试公众号处显示的要接收人的微信号
};
// 
/**
 * Loads all cloud functions under the `functions` directory.
 */
fs.readdirSync(path.join(__dirname, 'functions')).forEach(file => {
  require(path.join(__dirname, 'functions', file))
})

/**
 * A simple cloud function.
 */
AV.Cloud.define('******', function () { // **** 代表云函数名
  (function getAccessToken() {
    const appid = config.appid;
    const secret = config.secret;
    const grant_type = config.grant_type;

    const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=${grant_type}&appid=${appid}&secret=${secret}`;

    axios.get(url).then(res => {
        if (res.status === 200) {
            getWeather(res.data.access_token)
        } else {
            throw '获取access_token失败,请检查appid和secret'
        }
    }).catch(err => {
        console.log(err)
    })
})()

// 获取当天天气情况
function getWeather(access_token) {
    // 刚刚和风天气的api 
    axios.get('https://devapi.qweather.com/v7/weather/3d?location=101131101&key=*************').then((res, res2) => {
        sendTemplateMsg(access_token, res.data.daily[0]); //获取access_token成功后调用发送模板消息的方法
    })
}

// 计算是周几
function getTodayofSeven() {
    var now = new Date();
    var day = now.getDay();
    var text = "";
    console.log('模板消息推送成功 day = ' + day);
    switch (day) {
      case 1:
        text = "今天比昨天更爱你了哟,新的一周开始了,加油,宝贝儿,想你";
        break;
      case 2:
        text = "今天比昨天更爱你了哟,搬砖快乐哦,宝贝儿,想你";
        break;
      case 3:
        text = "今天比昨天更爱你了哟,一周已过半,继续加油,宝贝儿,想你";
        break;
      case 4:
        text = "今天比昨天更爱你了哟,周四周四,V我50,宝贝儿,想你";
        break;
      case 5:
        text = "今天比昨天更爱你了哟,马上周末,可以见到宝贝儿了,想你";
        break;
      case 6:
        text = "今天比昨天更爱你了哟,周末开始啦,好好休息,放松一下疲惫的身体,宝贝儿,想你";
        break;
      case 0:
        text = "今天比昨天更爱你了哟,抓紧最后一天休息时间,多陪陪他,宝贝儿,想你";
        break;
    }
    return text;
}

/**
 * 比如:5月21号
 * @param {*} month 阳历月份,5
 * @param {*} day   阳历几号,21
 * @returns 计算还有多少天过生日
 */
function getDaysToBirthday(month, day){
  var now = new Date();
  var thisYear = now.getFullYear();
  // 今年的生日
  var birthday = new Date(thisYear, month - 1, day);
  if(birthday < now) {
    birthday.setFullYear(now.getFullYear()+1);
  }
  var timeDec = birthday - now;
  var days = timeDec / (24 * 60 * 60 * 1000);
  return Math.ceil(days);
}


function sendTemplateMsg(access_token, res) {
    var today = new Date().toLocaleDateString();
    var endTime4Know = parseInt(new Date().getTime() / 1000) - new Date('2022-8-10 00:00:00').getTime() / 1000;
    var endTime4Love = parseInt(new Date().getTime() / 1000) - new Date('2022-11-6 00:00:00').getTime() / 1000;
    var knowDays = parseInt(endTime4Know / 60 / 60 / 24);
    var loveDays = parseInt(endTime4Love / 60 / 60 / 24); 
    var birthDays1 = getDaysToBirthday(2, 27);
    var birthDays2 = getDaysToBirthday(6, 15);
    var firstDayOfYear = getDaysToBirthday(1, 1);
    var newYear = getDaysToBirthday(1, 21);
    var startText = getTodayofSeven();
    const url = `https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=${access_token}`; //发送模板消息的接口
    const requestData = { //发送模板消息的数据
        template_id: '**********************',//消息的模板id
        url: 'http://weixin.qq.com/download',
        data: {
            name: {
                value: '小猪',
                color: "#173177"
            },
            link: {
                value: 'https://blog.csdn.net/u011489043?type=blog',
                color: '#1d1d1d'
            },
            city: {
                value: '北京-朝阳区',
                color: '#1d1d1d'
            },
            startText: {
                value: startText,
                color: '#FF0000'
            },
            textDay: {
                value: res.textDay,
                color: '#228B22'
            },
            tempMin: { //最低温
                value: res.tempMin + '℃',
                color: '#1d1dff'
            },
            tempMax: { //最高温
                value: res.tempMax + '℃',
                color: '#ff1d1d'
            },
            windScaleDay: { // 白天风力等级
              value: res.windScaleDay + '级',
              color: '#8B4513'
            },
            windScaleNight: { // 夜间风力等级
              value: res.windScaleNight + '级',
              color: '#8B4513'
            },
            date: { // 
              value: today,
              color: '#000000'
            },
            know_day: { //
              value: knowDays,
              color: '#FF69B4'
            },
            love_day: { //
              value: loveDays,
              color: '#FF69B4'
            },
            birthday1: { //
              value: birthDays1,
              color: '#FF00FF'
            },
            birthday2: { //
              value: birthDays2,
              color: '#000000'
            },
            firstDayOfYear: {
              value: firstDayOfYear,
              color: '#8B0000'
            },
            newYear: {
              value: newYear,
              color: '#8B0000'
            },
        
        }
    };

    config.tousers.forEach(item => {
        requestData.touser = item
        axios.post(url, requestData).then(res => {
            if (res.status === 200) {
                console.log('模板消息推送成功');
            } else {
                throw '模板消息推送失败'
            }
        }).catch(err => {
            console.log(err)
        })
    })
  }
})

大家如果有问题,欢迎评论区留言

------致所有正在努力奋斗的程序猿们!加油!!

有码走遍天下 无码寸步难行

1024 - 梦想,永不止步!

爱编程 不爱Bug

爱加班 不爱黑眼圈

固执 但不偏执

疯狂 但不疯癫

生活里的菜鸟

工作中的大神

身怀宝藏,一心憧憬星辰大海

追求极致,目标始于高山之巅

一群怀揣好奇,梦想改变世界的孩子

一群追日逐浪,正在改变世界的极客

你们用最美的语言,诠释着科技的力量

你们用极速的创新,引领着时代的变迁

------乐于分享,共同进步,欢迎补充

------Treat Warnings As Errors

------Any comments greatly appreciated

------Talking is cheap, show me the code

------GitHub:github.com/selfconzrr\

相关推荐
丁总学Java10 小时前
微信小程序,点击bindtap事件后,没有跳转到详情页,有可能是app.json中没有正确配置页面路径
微信小程序·小程序·json
mosen86811 小时前
Uniapp去除顶部导航栏-小程序、H5、APP适用
vue.js·微信小程序·小程序·uni-app·uniapp
qq229511650211 小时前
微信小程序的汽车维修预约管理系统
微信小程序·小程序·汽车
小飞哥liac21 小时前
微信小程序的组件
微信小程序
stormjun1 天前
Java基于微信小程序的私家车位共享系统(附源码,文档)
java·微信小程序·共享停车位·私家车共享停车位小程序·停车位共享
Bessie2341 天前
微信小程序eval无法使用的替代方案
微信小程序·小程序·uni-app
shenweihong1 天前
javascript实现md5算法(支持微信小程序),可分多次计算
javascript·算法·微信小程序
1 天前
微信小程序运营日记(第四天)
微信小程序·小程序
qq22951165021 天前
小程序Android系统 校园二手物品交换平台APP
微信小程序·uni-app
一只不会编程的猫2 天前
微信小程序配置
微信小程序·小程序