使用ThinkJs搭建微信中控服务的实现方法

本人前端渣渣一枚,这篇文章是第一次写,如果有硬核bug,请大佬们轻喷、指出... 另外,本文不涉及任何接口安全、参数校验之类的东西,默认对调用方无脑级的信任:joy: 目前自用的接口包括但不限于以下这些

|--- 微信相关 | |--- 0. 处理微信推过来的一些消息 | |--- 1. 获取微信SDK配置参数 | |--- 2. 微信鉴权登陆 | |--- 3. 获取微信用户信息 | |--- 4. 获取AccessToken | |--- 5. 批量发送模版消息 | |--- 6. 获取模版消息列表 | |--- 7. 批量发送客服消息

背景

【需求】小项目很多很杂,而且大部分需求都是基于微信开发的,每次都查微信文档的话就会很郁闷:unamused:...

【号多】公众号超级多,项目中偶尔会涉及借权获取用户信息(在不绑定微信开放平台的前提下,需要临时自建各个公众号的openid关联关系),类似这样同时需要不止一个公众号配合来完成一件事的需求,就容易把人整懵逼...

【支付】微信支付的商户号也很多,而且有时候支付需要用的商户号,还不能用关联的公众号取出来的openid去支付...

【官方】微信官方文档建议!把获取AccessToken等微信API抽离成单独的服务... 等等等等........所以...:joy:

创建ThinkJS项目

官网

thinkjs.org/

简介

ThinkJS 是一款面向未来开发的 Node.js 框架,整合了大量的项目最佳实践,让企业级开发变得如此简单、高效。从 3.0 开始,框架底层基于 Koa 2.x 实现,兼容 Koa 的所有功能。

安装脚手架

$ npm install -g think-cli

创建及启动项目

$ thinkjs new demo; $ cd demo; $ npm install; $ npm start;

目录结构

|--- development.js //开发环境下的入口文件 |--- nginx.conf //nginx 配置文件 |--- package.json |--- pm2.json //pm2 配置文件 |--- production.js //生产环境下的入口文件 |--- README.md |--- src | |--- bootstrap //启动自动执行目录 | | |--- master.js //Master 进程下自动执行 | | |--- worker.js //Worker 进程下自动执行 | |--- config //配置文件目录 | | |--- adapter.js // adapter 配置文件 | | |--- config.js // 默认配置文件 | | |--- config.production.js //生产环境下的默认配置文件,和 config.js 合并 | | |--- extend.js //extend 配置文件 | | |--- middleware.js //middleware 配置文件 | | |--- router.js //自定义路由配置文件 | |--- controller //控制器目录 | | |--- base.js | | |--- index.js | |--- logic //logic 目录 | | |--- index.js | |--- model //模型目录 | | |--- index.js |--- view //模板目录 | |--- index_index.html

安装think-wechat插件

介绍

微信中间件,基于 node-webot/wechat,支持 thinkJS 3.0

安装

$ npm install think-wechat --save

$ cnpm install think-wechat --save

配置

文件:/src/config/middleware.js

const wechat = require('think-wechat') module.exports = [ ... { handle: wechat, match: '/index', options: { token: '', // 令牌,和公众号/基本配置/服务器配置里面写一样的即可 appid: '', // 这里貌似可以随便填,因为我们后面要用数据库配置多个公众号 encodingAESKey: '', checkSignature: false } }, { handle: 'payload', // think-wechat 必须要在 payload 中间件前面加载,它会代替 payload 处理微信发过来的 post 请求中的数据。 options: { keepExtensions: true, limit: '5mb' } }, ]

注:match下我这里写的是 /index ,对应的项目文件是 /src/controller/index.js ,对应的公众号后台所需配置的服务器地址就是 http(https)://域名:端口/index

创建数据库和相关表

我这里创建了三个微信的相关表。

配置表:wx_config

字段 类型 说明
id   int   主键  
name   varchar   名称  
appid   varchar   appid  
secret   varchar   secret  

用户表:wx_userinfo

字段 类型 注释
id   int   主键  
subscribe   int   用户是否订阅该公众号标识,值为0时,代表此用户没有关注该公众号,拉取不到其余信息。  
nickname   varchar   用户的昵称  
sex   int   用户的性别,值为1时是男性,值为2时是女性,值为0时是未知  
language   varchar   用户所在省份  
city   varchar   用户所在城市  
province   varchar   用户所在省份  
country   varchar   用户所在国家  
headimgurl   longtext   用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。  
subscribe_time   double   用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间  
unionid   varchar   只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。  
openid   varchar   用户的标识,对当前公众号唯一  
wx_config_id   int   对应配置的微信号id  

模版消息日志表:wx_template_log

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a9cc9d49876738c76e803f71ef62c02c.html