Varys
分布式AccessToken中控服务器, 支持微信公众号/企业微信/小程序/第三方平台/头条开放平台/蜂鸟开放平台.
Install / Use
/learn @CharLemAznable/VarysREADME
varys
AccessToken 中控服务器
统一DB存储AccessToken, 支持分布式部署服务访问和更新.
配置文件
config.toml 示例
Port = 4236
ContextPath = ""
LogLevel = "info"
ClusterNodeAddresses = [ "http://localhost:4236" ]
DriverName = "mysql"
DataSourceName = "admin:test123@tcp(127.0.0.1:3306)/rock?charset=utf8"
部署执行
-
下载最新的可执行文件压缩包并解压
下载地址: varys release
$ tar -xvJf varys-[version].[arch].[os].tar.xz
- 新建/编辑配置文件, 启动运行
$ nohup ./varys-[version].[arch].[os].bin &
数据库
建表SQL:
本地缓存
包含微信公众号/小程序配置缓存和access_token缓存, 其中:
- 公众号/小程序配置缓存默认1小时
- access_token缓存默认5分钟, 当access_token即将过期并被其他分布式节点更新时缓存1分钟
包含微信第三方平台配置缓存和报文解密器缓存, 其中
- 第三方平台配置缓存默认1小时
- 第三方平台报文解密器缓存默认1小时
包含微信第三方平台component_access_token/授权用户authorizer_access_token缓存, 其中
- component_access_token缓存默认5分钟, 当component_access_token即将过期并被其他分布式节点更新时缓存1分钟
- authorizer_access_token缓存默认5分钟, 当authorizer_access_token即将过期并被其他分布式节点更新时缓存1分钟
wechat_tp_token_cache.go wechat_tp_auth_token_cache.go
包含企业微信配置缓存和access_token缓存, 其中:
- 企业微信配置缓存默认1小时
- access_token缓存最大5分钟, 当access_token即将过期时, 缓存时间最大至其有效期结束
包含企业微信第三方应用配置缓存和报文解密器缓存, 其中
- 企业微信第三方应用配置缓存默认1小时
- 企业微信第三方应用报文解密器缓存默认1小时
包含企业微信第三方应用suite_access_token/access_token缓存, 其中
- suite_access_token缓存最大5分钟, 当suite_access_token即将过期时, 缓存时间最大至其有效期结束
- access_token缓存最大5分钟, 当access_token即将过期时, 缓存时间最大至其有效期结束
wechat_corp_tp_token_cache.go wechat_corp_tp_auth_token_cache.go
包含字节小程序配置缓存和access_token缓存, 其中:
- 小程序配置缓存默认1小时
- access_token缓存默认5分钟, 当access_token即将过期并被其他分布式节点更新时缓存1分钟
包含蜂鸟应用配置缓存和授权商户access_token缓存,其中:
- 应用配置缓存默认1小时
- 商户access_token缓存默认8分钟
包含闪送应用配置缓存和授权商户access_token缓存,其中:
- 应用配置缓存默认1小时
- 商户access_token缓存默认5分钟
访问路径
默认服务地址:
http://localhost:4236
微信公众号/小程序:
/query-wechat-app-token/{codeName:string}
获取指定codeName对应的公众号/小程序当前的access_token和jsapi_ticket
返回数据:
成功: {"appId": #appId#, "token": #access_token#, "ticket": #jsapi_ticket#}
错误: {"error": #ErrorMessage#}
/proxy-wechat-app/{codeName:string}/...
代理指定codeName对应的公众号/小程序微信接口, 自动添加access_token参数
/proxy-wechat-app-mp-login/{codeName:string}?js_code=JSCODE
代理指定codeName对应的小程序登录凭证校验
通过 wx.login 接口获得临时登录凭证 code 后调用此接口,获取微信提供的用户身份标识
/query-wechat-app-js-config/{codeName:string}?url=URL
获取指定codeName对应的公众号使用JS-SDK的注入配置信息
返回数据:
成功: {"appId": #appId#, "timestamp": #timestamp#, "nonceStr": #nonceStr#, "signature": #signature#}
错误: {"error": #ErrorMessage#}
详见: 微信开放文档 JS-SDK说明文档 通过config接口注入权限验证配置
微信第三方平台:
/accept-wechat-tp-info/{codeName:string}
第三方平台在微信配置的授权事件接收URL
用于接收component_verify_ticket以及公众号对第三方平台进行授权、取消授权、更新授权的推送通知,以及快速创建小程序的审核结果通知
返回数据: "success"
/accept-wechat-tp-msg/{codeName:string}
第三方平台在微信配置的消息与事件接收URL
用于代收用户发送给公众号/小程序的消息,以及小程序改名的审核结果通知
返回数据: "success"
/query-wechat-tp-token/{codeName:string}
获取指定codeName对应的第三方平台当前的component_access_token
返回数据:
成功: {"appId": #appId#, "token": #component_access_token#}
错误: {"error": #ErrorMessage#}
/proxy-wechat-tp/{codeName:string}/...
代理指定codeName对应的第三方平台微信接口, 自动添加component_access_token参数
微信第三方平台授权方:
/wechat-tp-authorize-scan/{codeName:string}
第三方平台扫码授权入口页面, 跳转到微信的扫码授权页面
用于引导公众号和小程序管理员向第三方平台授权
跳转页面地址:
https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=#appId#&pre_auth_code=#pre_auth_code#&redirect_uri=#url_to_/app-authorize-redirect/{codeName:string}#
/wechat-tp-authorize-link/{codeName:string}
第三方平台移动端链接授权入口页面, 跳转到微信的链接授权页面
用于引导公众号和小程序管理员向第三方平台授权
跳转页面地址:
https://mp.weixin.qq.com/safe/bindcomponent?action=bindcomponent&no_scan=1&component_appid=#appId#&pre_auth_code=#pre_auth_code#&redirect_uri=#url_to_/app-authorize-redirect/{codeName:string}##wechat_redirect
/wechat-tp-authorize-redirect/{codeName:string}
第三方平台授权回调地址
跳转页面地址:
如果第三方平台配置了WECHAT_APP_THIRD_PLATFORM_CONFIG.REDIRECT_URL, 则跳转到此地址
/query-wechat-tp-auth-token/{codeName:string}/{authorizerAppId:string}
获取指定codeName对应的第三方平台所代理的authorizerAppId对应的公众号当前的authorizer_access_token和jsapi_ticket
返回数据:
成功: {"appId": #appId#, "authorizerAppId": #authorizerAppId#, "token": #authorizer_access_token#, "ticket": #jsapi_ticket#}
错误: {"error": #ErrorMessage#}
/proxy-wechat-tp-auth/{codeName:string}/{authorizerAppId:string}/...
代理指定codeName对应的第三方平台所代理的authorizerAppId对应的公众号/小程序微信接口, 自动添加access_token参数
/proxy-wechat-tp-auth-mp-login/{codeName:string}/{authorizerAppId:string}?js_code=JSCODE
代理指定codeName对应的第三方平台所代理的authorizerAppId对应的小程序登录凭证校验
通过 wx.login 接口获得临时登录凭证 code 后调用此接口,获取微信提供的用户身份标识
/query-wechat-tp-auth-js-config/{codeName:string}/{authorizerAppId:string}?url=URL
获取指定codeName对应的第三方平台所代理的authorizerAppId对应的公众号使用JS-SDK的注入配置信息
返回数据:
成功: {"appId": #appId#, "timestamp": #timestamp#, "nonceStr": #nonceStr#, "signature": #signature#}
错误: {"error": #ErrorMessage#}
详见: 微信开放文档 JS-SDK说明文档 通过config接口注入权限验证配置 详见: 微信开放文档 第三方平台代公众号实现业务 代公众号使用JS-SDK说明
企业微信:
/query-wechat-corp-token/{codeName:string}
获取指定codeName对应的企业微信当前的access_token
返回数据:
成功: {"corpId": #corpId#, "token": #access_token#}
错误: {"error": #ErrorMessage#}
/proxy-wechat-corp/{codeName:string}/...
代理指定codeName对应的企业微信接口, 自动添加access_token参数
企业微信第三方平台:
/accept-wechat-corp-tp-info/{codeName:string}
企业第三方应用在微信配置的授权事件接收URL
用于接收suite_ticket以及企业微信对第三方应用进行授权、取消授权、更新授权的推送通知
返回数据: "success"
企业微信第三方平台授权方:
/wechat-corp-tp-authorize-component/{codeName:string}?state={state:string}
企业第三方应用授权入口页面, 跳转到微信的授权页面
用于引导企业微信管理员向第三方应用授权
跳转页面地址:
https://open.work.weixin.qq.com/3rdapp/install?suite_id=#suiteId#&pre_auth_code=#pre_auth_code#&redirect_uri=#url_to_/corp-authorize-redirect/{codeName:string}#&state=#state#
/wechat-corp-tp-authorize-redirect/{codeName:string}
企业第三方应用授权回调地址
跳转页面地址:
如果第三方平台配置了WECHAT_CORP_THIRD_PLATFORM_CONFIG.REDIRECT_URL, 则跳转到此地址
/query-wechat-corp-tp-auth-token/{codeName:string}/{corpId:string}
获取指定codeName对应的企业第三方应用所代理的corpId对应的企业微信当前的access_token
返回数据:
成功: {"suiteId": #suiteId#, "corpId": #corpId#, "token": #access_token#}
错误: {"error": #ErrorMessage#}
头条APP:
/query-toutiao-app-token/{codeName:string}
获取指定codeName对应的字节小程序当前的access_token
返回数据:
成功: {"appId": #appId#, "token": #access_token#}
错误: {"error": #ErrorMessage#}
蜂鸟:
/fengniao-app-auth/{codeName:string}
蜂鸟应用授权入口页面, 跳转到蜂鸟的授权页面
用于引导商户向应用授权
跳转页面地址:
https://open.ele.me/app-auth?app_id=#AppId##&dev_id=#DevId#
/fengniao-app-auth-callback/{codeName:string}
配置蜂鸟商户授权回调地址: 开发者中心 -> 应用管理 -> 查看应用详情
授权完成后, 将授权商户的merchantId以authNotify类型回调至蜂鸟应用配置fengniao_app_config.callback_url地址(POST JSON)
/query-fengniao-app-token/{codeName:string}/{merchantId:string}
获取指定codeName对应的蜂鸟应用获取授权的商户当前的access_token
返回数据:
成功: {"appId": #appId#, "merchantId": #merchantId#, "token": #accessToken#}
错误: {"error": #ErrorMessage#}
/proxy-fengniao-app/{codeName:string}/{merchantId:string}/...
代理指定codeName对应的蜂鸟应用获取授权的商户接口, 包装原请求体为business_data并签名
/fengniao-app-callback/{codeName:string}
配置蜂鸟应用消息推送回调地址: 开发者中心 -> 应用管理 -> 查看应用详情 -> 编辑
验证蜂鸟回调消息签名, 并将回调请求中的business_data提取转发到蜂鸟应用配置fengniao_app_config.callback_url地址(POST JSON)
闪送:
/shansong-app-auth/{codeName:string}/{merchantCode:string}
闪送应用授权入口页面, 跳转到闪送的授权页面
用于引导商户向应用授权
merchantCode将作为state值传递, 并作为varys的商户标识
跳转页面地址:
http://open.ishansong.com/auth?response_type=code&client_id=#AppId#&scope=shop_open_api&redirect_uri=#url_to_/shansong-app-auth-redirect/{codeName:string}#&state=#MerchantCode#
/shansong-app-auth-redirect/{codeName:string}
闪送应用授权回调地址
跳转页面地址:
如果第三方平台配置了shansong_app_config.redirect_url, 则跳转到此地址
/query-shansong-app-token/{codeName:string}/{merchantCode:string}
获取指定codeName对应的闪送应用获取授权的商户当前的access_token
返回数据:
成功: {"appId": #appId#, "merchantCode": #merchantCode#, "token": #accessToken#}
错误: {"error": #ErrorMessage#}
/proxy-shansong-app-developer/{codeName
Related Skills
node-connect
342.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
85.3kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
342.5kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
342.5kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
