node package manager

wanhu-wechat-server

x-weixin

开发者文档

开发测试准备

  • /callback: 第三方平台相关信息推送
  • /$APPID$/callback: 公众号相关信息推送
  • 服务器ip需要加入白名单
  • 测试公众号需要加入白名单

开发环境

技术栈

  • typescript
  • express + mongoDB
  • http请求:request
  • 文件上传: multer
  • 跨域通讯:jsonwebtoken
  • 日志: morgan + winston + winston-daily-rotate-file
  • 安全: helmet

本地调试 - 方便debug

NatApp 映射服务器地址到本地

数据获取&存储

能使用微信获取存储,使用微信。不能使用则本地数据库

  1. 底层Promise化,方便调用时使用async/await
  • mongoose
(<any>mongoose).Promise = global.Promise; 
  • request
    • request-promise-native
    • 自己封装
import {get, post} from "request";
new Promise((resolve, reject) => {
    get(url, {json: true}, (err, httpResponse, body) => {
        if (body.errcode) {
            reject(body);
        } else {
            resolve(body);
        }
    })
});

日志

  • console: debug级别
  • file: info & error级别

合并并日期输出

  • http: morgan
  • other: winston

使用插件 winston-daily-rotate-file

// 详情见 /server/util/logger.ts 
app.use(morgan('combined', {stream: logger.stream}));

typescript 相关说明

  • lib.d.ts 分离lib.ts的interface到lib.d.ts,然后在lib.ts头部使用
/// <reference path="./lib.d.ts" />
  • 自动添加"use strict";
// tsconfig.json
{   
    "compilerOptions":{
        "alwaysStrict": true
    }
}

cross-env:解决不同系统设置环境变量

    cross-env NODE_ENV=dev CONFIG_DIR=./server/config PORT=12345 node ./bin/www"

server

1. 微信推送第三方平台相关信息

    /callback
  • 公众号授权信息
  • 公众号更新授权信息
  • 公众号取消授权信息
  • component_verify_ticket

2. 微信推送粉丝发给公众号相关信息

    /$APPID$/callback

代替公众号接受用户发送的信息

  • 关注,取消关注
  • 消息
  • ...

3. 用户ID加密解密

  • session
  • jwt

4. access_token过期处理

过期时间: 26060 = 7200

component_verify_ticket ==> component_access_token

authorizer_refresh_token ==> authorizer_access_token

    1. 定时器刷新
    1. 存储时,记录过期时间。获取时,判断是否过期。
    1. 存储时,使用Mongo过期索引,过期自动删除。获取时,判断是否存在。

5. API

详情见/doc文件夹

6. 日志处理

client

暂时废弃

demo

[TODO] 样板

admin/login

[TODO] 登录后,授权公众号信息管理与统一

1. 微信图片防盗链应对方案

地址

相关名词

  • Authorization 授权
  • Authorizer 授权方
  • Component 第三方平台

素材类型

  • text
  • image
  • voice
  • video: 视频消息(包含描述和标题)
  • mpvideo: 视频消息(video转换后, 仅有media_id)
  • shortvideo
  • news: 图文消息(原始内容,无media_id)
  • mpnews: 图文消息(已经在素材库中,含media_id)
  • location: 不是事件的location
  • link

事件类型

  • subscribe
  • unsubscribe
  • SCAN
  • LOCATION
  • CLICK
  • VIEW

资料