NodeJS为GBlog-wx小程序增加推送功能

NodeJS为GBlog-wx小程序增加推送功能

Scroll Down

项目来由

首先感谢fuzui开源的GBlog-wx小程序项目,

starstar

用于halo博客,继上次PR的海报功能,总体来说,作为一个个人博客的小程序端已经很完善了,看到在评论处设有留言回复通知(这个是用于邮件通知),由于我一般很少打开邮箱,就想到了微信推送,另外在海报功能处用到了云函数生成小程序码,考虑到免费用户的月额度有限,于是也一并写成了接口。

功能预览

安装

git clone https://gitee.com/ufec/GBlog-wxpush.git

运行

npm install
npm start                //默认端口5000,可在package.json文件中修改
node /utils/schedule.js  //启动定时器程序

这里用宝塔PM2管理器作为演示

run.jpg

不用宝塔也可以,后台挂起这两个服务(或者使用nodejs的forever/nodemon模块),主服务用nginx反向代理即可实现一样的效果。

需要服务器可以入手腾讯云,618优惠1核2G1M50G硬盘,标准型SA2服务器三年288RMB
腾讯云服务器

用户端效果

111.jpg

实现过程

项目由 NodeJS + MongoDB + Redis 构成,搭建方便,性能高效,快速开发。

目录结构

├── app.js                   //主程序
├── config                   //配置目录
│   ├── config.js            //主要配置
│   ├── database.js          //数据库配置
│   └── log4js.json          //日志配置
├── db                       //数据库目录
│   ├── collection           //数据模型
│   │   ├── article.js       //文章模型
│   │   └── comment.js       //评论模型
│   └── db.js                //数据库文件
├── log                      //日志目录
├── package.json             
├── routes                   //路由文件目录
│   ├── article.js           //文章路由
│   ├── comment.js           //评论路由
│   ├── getOpenId.js         //获取用户openid路由
│   └── getQRCode.js         //生成小程序码路由
└── utils                    //功能
    ├── getToken.js          //获取微信AccessToken
    ├── log.js               //初始化日志配置
    ├── redis.js             //redis
    ├── schedule.js          //定时器
    ├── sendMsg.js           //下发模板信息

用到的模块:

express
fs
log4js
mongoose
node-schedule
path
redis
request

项目共有两个推送功能:留言审核和新作品推荐,需要前往小程序后台
功能->订阅消息处添加,格式如下图
comment.jpg

article.jpg

!注:由于发送信息格式写死,请务必按照上图添加

app为项目主服务,主要用于接收处理用户请求,utils/schedule为项目的推送服务,用于定时定点发送(此项目定于每天晚上21:30:30执行,一般那个时候都下班了),你也可以自定义,详见 node-schedule文档
routes下为项目路由,comment为评论订阅,article为文章订阅,其他两个就显而易见。

更多选项

你可以更改halo博客的微信分享功能,如下图:

微信分享
这是基于寒山主题的修改版本,前提是小程序为GBlog-wx
做如下修改:
在post.ftl的最后一行添加如下代码

<script>
  var img = null;
  var articleId = ${post.id?c};
  function share(e){
    $.ajax({
      url: "你的服务端地址/getQRCode?scene=id="+articleId+"&page=pages/details/index",
      success:function(result){
          img.attr('src', result.base);
      }
    });
  }
  
  $(document).ready(function () {
    img = $("div.social-share > a.social-share-icon.icon-wechat > div.wechat-qrcode > div.qrcode > img");
  });
</script>

并在74行添加

onclick="share(this);">

80行改为如下内容

<div class="social-share" data-disabled="${settings.share_disabeld!''}" data-wechat-qrcode-title="打开微信扫一扫" data-wechat-qrcode-helper="添加到我的小程序,更方便"></div>

即可实现。

一些可能的Bug

7.png

  • 当你看到生成小程序码出现如图所示,他明显不是一个正确的小程序码,但为什么
    结果还是0?,这....这我遇到了好多次,原因是在你的token重复获取,导致上一次的token失效,这个有待更新,解决的方法就是:本地调试无误后上传程序到服务端运行,本地不要再获取token,如有必要测试,请测试完成后务必删除缓存中的token,设置的有效期与微信官方给出的一致,为:7200。在程序运行期间可能出现延迟等种种问题,你可以将他改为3600,
  • 文章标题建议尽量简短,微信限制为20个字(服务以及做了处理,但为了用户体验请在发布时斟酌)。

项目地址
Ufec/GBlog-wxpush