微信服务商微管家本地化部署

服务商微管家本地化部署和一些其他优化调整

功能介绍

官方提供的服务商微管家版本已满足大部分人使用,而且很适合学习和二次开发,抛砖引玉的告诉大家如何开始从三方平台接触微信开发、部署到云托管、二次开发其他应用等,具体功能参考官网的介绍。有能力的还是推荐使用官方的云托管

wx-open是基于官方代码修改的本地化部署, 优先阅读官方文档服务商微管家介绍

本项目初衷仅仅是为了让微管家能在本地或者其他云服务器运行,适合人群也仅仅是想省一点点时间的不太熟悉 Go 的开发者或者微管家现有功能部署就够用的人群。微信三方平台对接大致有两种,第一是直接撸一套三方接口,自己按需对接三方接口,这样最灵活也更方便发展其他业务(当然基于 wxcloudrun-wxcomponent 二次开发同理);第二是通过官方服务与业务系统集成 这个文档做业务集成。我们仅是把第二种思路放到本地部署,如果需要其他接口还是得做业务继承。大致思路是『微管家』可以通过内网把 token 或者 ticket 抛给自己的业务系统,业务系统自己按需请求三方其他接口。

主要变动

  • 添加消息解密中间件,本地化部署,不在依赖云托管。

  • 统一数据表开头为wx避免和自己其他业务数据表区分

  • 配置文件不再区分envserver.conf,统一在根目录调整config.conf官方用env主要是为了结合云托管,部分参数在创建环境的时候设置,我们本地化部署后统一管理相对方便一些

  • 前端新增拉取部署微管家以前的授权数据,修复一些其他小bug。 这个接口是官方预留的,原来只能通过postman自己跑一下,拿出来更方便操作一些

更新230809

升级方法:点击下载 wx-open。备份当前目录,覆盖 client 目录,wx-open 文件,按照 config_example.conf 文件自己删除掉本地 config.conf,最后重启服务。

  • 优化后端日志打印

  • 废弃配置文件里一些无用的配置项,对一些关键的配置做了详细的说明

  • 废弃云托管一些判断逻辑

  • 前端页面调整为本地部署相关信息

更新231017

目前我个人或者工作中并没有业务场景在用这个系统,新增接口是根据大家(挑)共(简)同(单)的需求开发的,基本没有在业务中测试,如果使用过程中发现 bug 微信或邮件联系反馈。讨论问题是相互学习的过程,所以有时候,你问了个问题,我大概是基于猜测给出的思路,所以也请尽量把这个猜测的结果反馈给我,以便于别的同学再遇到的同样问题的时候,我能及时回复或是根据你的反馈整理到这个文档里面方便其他同学去查,新增接口涉及到的文档去微信官方文档去看即可。区分新增内容的数据库表名以 wx_ 开头。后续如果还有需要新增的内容,我们还是尽量按照『微管家』现有服务去新增或者更新。

初次使用直接点击下载 wx-open 启动即可。老版本升级请备份当前目录,覆盖 client 目录和 wx-open 文件,config.conf 无需修改,重启服务即可。

1
2
# 在 MySQL执行,调整字段长度,估计以后小程序权限集越来越多了(这个改不改都行,官方源码改成 TEXT 类型了)
ALTER TABLE `wxauthorizers` CHANGE `funcinfo` `funcinfo` VARCHAR(512) CHARACTER SET utf8mb3 COLLATE utf8_general_ci NOT NULL DEFAULT '';
  • 『同步官方修改』授权链接auth_type更新为 6,文档参考这里

  • 新增『代注册小程序』接口。 ~~ 听说通过这个接口可以省300大洋认证 ~~ ,有同学需要微管家支持,后来又有同学想把这个功能放到其他地方使用,所以这个接口也提供了内网服务接口。

  • 新增『rid查询』接口。官方接口能查7天内的请求,我们会把你查过的请求记录,下次查的时候哪怕是超过7天,也会读出来。具体我也不清楚这个接口『辅助开发者高效定位问题』到底能不能解决问题。

  • 新增『清空Api次数』接口。

使用方法

  • 下载Linux文件[wx-open](https://pan.baidu.com/s/1lAT1QsqCmombFgdrf_IFqQ?pwd=zfdf) 根目录为最早起的版本,文件夹里的版本都是按照上面更新记录的版本,直接下载最新文件夹的版本部署就可以

  • 重命名config_example.conf=>config.conf,自行修改对应配置项,最终目录结构如下

  • 运行./wx-open

  • 根据自己ip+端口或者域名登陆后台,进入Secret与密码管理修改第三方 Secret,别忘了开https

1
2
3
4
5
# 目录结构
├── client       # 前端文件
│   └── dist
├── config.conf  # 全局配置文件
└── wx-open      # Linux打包的可执行文件,需要打包其他平台留言
  • 内网端口是干什么用的?

内网服务主要用于二次开发或者对接自己其他业务系统,比如想接入微信三方平台的小程序代注册功能,这时就会到微管家内部服务接口获取需要的token,内部服务包含获取component-access-token,authorizer-access-tokenticket,例如:其他业务系统需要微信三方平台这两种token或者ticket,就可以通过内部服务免云管家的接口auth调用。『切记:只有通过localhost或者127.0.0.1+端口访问!!!』

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 下面三个是对应的三个接口,都是 GET
<http://localhost:8091/inner/component-access-token> # 通过微管家获取 component-access-token
<http://localhost:8091/inner/authorizer-access-token?appid=wx88324f5750ebxxxx> # 通过微管家获取 authorizer-access-token
<http://localhost:8091/inner/ticket> # 通过微管家获取 ticket

# 代注册小程序
curl --location --request POST '<http://127.0.0.1:8091/inner/regist-weapp/create>' \\
--header 'Content-Type: application/json' \\
--data-raw '{
   "name": "企业名",
   "code": "92330110MA2GJ94D5E", // 企业代码
   "code_type": 1, // 企业代码类型(1:统一社会信用代码, 2:组织机构代码,3:营业执照注册号)
   "legal_persona_wechat": "法人微信",
   "legal_persona_name": "法人名",
   "component_phone": "" //第三方联系电话
}'

常见问题

  • 关于配置文件的问题,建议多读官方文档

  • 如果授权链接没有复制成功,应该是没有开 https 导致的。打开浏览器控制台,自己手动复制授权链接即可

  • 配置文件仔细核对

  • 端口被占用,修改配置文件即可

  • 还有其他问题请提供测试服务器或者运行日志

  • 拉取已授权账号失败,在MySQL运行select now();查一下自己MySQL配置的时区是否正常,不正常的话查下修改时区即可。

重申下 wx-open 的意义:仅作为官方开源版本的一种本地化部署方案。三方平台开放的接口越来越多,每个用户用到的接口和使用场景也不太相同,推荐的二次开发方式『利用wx-open项目提供的 token 接入其他三方接口』。前端单独部署原理是用 NGINX 把自己业务系统 API 相关路由的转发到其他端口。

前端源码

如果想在一个系统中完成其他前端页面,可以下载下面这个版本

Github-wx-open-frontend

使用方法

config.toml 的 IS_API 为 true,则 NGINX 配置需要调整成下面方式,此时前端项目发布不在需要重启 API 服务;如果为 false,则项目目录结构必须按照原来的结构(参考 wx-open 老版本),但 client/dist 目录可以替换成自己 build 后的文件。- 下载最新 wx-open-api.tar.gz API,修改 config.toml,新增 IS_API=true,否则会启动失败。

  • 如果自己重新发布前端项目,自己只build前端代码即可,无需重启接口服务(强烈建议前后端分开部署,要么每次修改代码都得重启wx-open

Nginx参考

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
server {
   listen 443 ssl;
   server_name wx-open.com;
   root /www/wx-open/dist;
   ssl_certificate /ssl/xxx_bundle.crt;
   ssl_certificate_key /ssl/xxx.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1.2 TLSv1.3;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;
   access_log /var/log/nginx/wx-open.access.log;
   error_log /var/log/nginx/wx-open.error.log;
   client_max_body_size 200m;
   location ~ ^/(wxcomponent|wxcallback)/ {
       proxy_set_header  Host $host;
       proxy_set_header  X-Real-IP $remote_addr;
       proxy_set_header  X-Forwarded-Proto https; #
       proxy_set_header  X-Forwarded-For $remote_addr;
       proxy_set_header  X-Forwarded-Host $remote_addr;
       proxy_pass <http://xxx.xxx.xx.xx:8666>;
   }
}

二次开发思路

  • 首先要把上面的 Go的Api(后面统称wx-open)部署好,主要是让微信平台callback,稳定提供最新的小程序token。比如配置的域名是wx-open.com

  • 本地用自己常用的开发语言(随便python/node/go/php/java) 起一个web服务(假设端口8668),在nginx配置匹配到wx-open.com/api/python这个uri开头的服务都代理到8668

  • 方案一 想用一套前端代码把所有三方平台的接口都接了

    • 上面前端代码下载。fork后,自己本地开发即可
- 前端在本地用`npm run dev`就可以调试了
- 连老接口用`wx-open.com`

- 连自己新开发的接口用`wx-open.com/api/python/xxxx`
  • 方案二 不想维护官方的前端代码,自己其他的业务逻辑都写到别的前端项目。

    • 新起一个前端项目,其他开发思路同方案一。优点:新项目可以随便用VueReact以及其他UI组件库
## 感谢各位

在此非常感谢各位的啤酒/咖啡/可乐支持,不要超过 100,祝大家事业有成(名单更新不及时,见谅)。

时间 昵称
2023-06-06 木子
2023-06-07 大猩猩
2023-10-12 叶子
2023-10-12 珧小珧
2023-10-12 阿鑫
2023-10-12 寒江雪
2023-10-12 雨ه٥
2023-10-12 蘑菇
2023-10-12 ROBOT
2023-10-12 年华不似水
2023-10-12 归去来