Fix db_query field value to string

This commit is contained in:
若海 2024-01-12 09:02:19 +08:00
parent cd19e7d3f8
commit c9d8115c65
10 changed files with 102 additions and 61 deletions

View File

@ -1,4 +1,4 @@
# REST 接口
# HTTP 接口
httpd:
address: 127.0.0.1:7600 # Api 监听地址
token: "" # 使用 Token 验证请求

View File

@ -7,7 +7,7 @@ require (
github.com/knadh/koanf v1.5.0
github.com/knadh/koanf/v2 v2.0.1
github.com/opentdp/go-helper v0.5.5-0.20240109013403-7323088c3f39
github.com/opentdp/wechat-rest v0.6.0
github.com/opentdp/wechat-rest v0.8.1
)
require (
@ -51,7 +51,7 @@ require (
golang.org/x/net v0.20.0 // indirect
golang.org/x/sys v0.16.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.16.1 // indirect
golang.org/x/tools v0.17.0 // indirect
google.golang.org/protobuf v1.32.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect

View File

@ -250,8 +250,8 @@ github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnu
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/opentdp/go-helper v0.5.5-0.20240109013403-7323088c3f39 h1:qIzCCWpIPhzZq9ZXevYuqBV3w4F/D8/SK+W6UjKhSf0=
github.com/opentdp/go-helper v0.5.5-0.20240109013403-7323088c3f39/go.mod h1:9m+t/2x1CmjZ9YQP37+xECCO84eqMnsxnRE/7y37GjE=
github.com/opentdp/wechat-rest v0.6.0 h1:e7Co8Bne32gQ8MDGNyBzJ0dhIMhlrIwsDhOxSXI4j1Q=
github.com/opentdp/wechat-rest v0.6.0/go.mod h1:F3rutIf4PahHxPGuAm3wlM6d1S7nznaU/ZNrk0dMEDA=
github.com/opentdp/wechat-rest v0.8.1 h1:2M7BFYCotM3gJkGxJ3mOczmftByxqRNSj4Q2Ec96Dws=
github.com/opentdp/wechat-rest v0.8.1/go.mod h1:F3rutIf4PahHxPGuAm3wlM6d1S7nznaU/ZNrk0dMEDA=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
@ -378,8 +378,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@ -437,8 +437,8 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@ -0,0 +1,41 @@
# WeChat Rest Api
基于 [wcferry](https://github.com/opentdp/wechat-rest/tree/master/wcferry) 实现的 HTTP 接口服务,已实现如下功能:
- 检查登录状态
- 获取登录账号 wxid
- 获取登录账号个人信息
- 获取所有消息类型
- 获取完整通讯录
- 获取好友列表
- 获取所有数据库
- 获取数据库中所有表
- 执行 SQL 查询
- 发送文本消息(可 @
- 发送图片
- 发送文件
- 发送卡片消息
- 保存图片
- 保存语音
- 图片 OCR
- 接受好友申请
- 接收转账
- 刷新朋友圈
- 添加群成员
- 删除群成员
- 获取群列表
- 获取群成员列表
- 获取群成员昵称
- 邀请群成员
- 拍一拍群友
- 转发消息给好友
- 转发收到的消息到URL
## 生成 OpenApi 文档
```shell
go get github.com/swaggo/swag/cmd/swag
go install github.com/swaggo/swag/cmd/swag
swag init --parseDependency -g httpd/server.go -o public/swag -ot json
```

View File

@ -8,9 +8,9 @@ import (
"wechat-rest/httpd/wcfrest"
)
// @title Wechat Rest API
// @version v0.4.6
// @description 基于 WeChatFerry RPC 实现的电脑版微信 REST API使用 Go 语言编写,无第三方运行时依赖。基于 HTTP 提供操作接口,轻松对接任意编程语言。
// @title WeChat Rest Api
// @version v0.5.0
// @description 基于 WeChatFerry RPC 实现的微信接口,使用 Go 语言编写,无第三方运行时依赖,易于对接任意编程语言。
// @contact.name WeChatRest
// @contact.url https://github.com/opentdp/wechat-rest
// @license.name Apache 2.0

View File

@ -110,7 +110,7 @@ func (wc *Controller) dbSqlQuery(c *gin.Context) {
return
}
c.Set("Payload", wc.CmdClient.DbSqlQueryMap(req.Db, req.Sql))
c.Set("Payload", wc.CmdClient.DbSqlQuery(req.Db, req.Sql))
}
@ -531,14 +531,14 @@ func (wc *Controller) receiveTransfer(c *gin.Context) {
}
// @Summary 开启转发消息到URL
// @Summary 开启推送消息到URL
// @Produce json
// @Param body body ForwardMsgRequest true "消息转发请求参数"
// @Param body body ReceiverRequest true "消息推送请求参数"
// @Success 200 {object} RespPayload
// @Router /enable_forward_msg [post]
func (wc *Controller) enableForwardMsg(c *gin.Context) {
// @Router /enable_receiver [post]
func (wc *Controller) enabledReceiver(c *gin.Context) {
var req ForwardMsgRequest
var req ReceiverRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.Set("Error", err)
return
@ -549,7 +549,7 @@ func (wc *Controller) enableForwardMsg(c *gin.Context) {
return
}
err := wc.enableForwardToUrl(req.Url)
err := wc.enableUrlReceiver(req.Url)
c.Set("Payload", RespPayload{
Success: err == nil,
Error: err,
@ -557,20 +557,20 @@ func (wc *Controller) enableForwardMsg(c *gin.Context) {
}
// @Summary 关闭转发消息到URL
// @Summary 关闭推送消息到URL
// @Produce json
// @Param body body ForwardMsgRequest true "消息转发请求参数"
// @Param body body ReceiverRequest true "消息推送请求参数"
// @Success 200 {object} RespPayload
// @Router /disable_forward_msg [post]
func (wc *Controller) disableForwardMsg(c *gin.Context) {
// @Router /disable_receiver [post]
func (wc *Controller) disableReceiver(c *gin.Context) {
var req ForwardMsgRequest
var req ReceiverRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.Set("Error", err)
return
}
err := wc.disableForwardToUrl(req.Url)
err := wc.disableUrlReceiver(req.Url)
c.Set("Payload", RespPayload{
Success: err == nil,
Error: err,

View File

@ -9,15 +9,15 @@ import (
"github.com/opentdp/wechat-rest/wcferry"
)
var forwardToUrlStat = false
var forwardToUrlList = map[string]bool{}
var urlReceiverStat = false
var urlReceiverList = map[string]bool{}
func (wc *Controller) enableForwardToUrl(url string) error {
func (wc *Controller) enableUrlReceiver(url string) error {
if !forwardToUrlStat {
if !urlReceiverStat {
err := wc.EnrollReceiver(true, func(msg *wcferry.WxMsg) {
ret := wcferry.WxMsgParser(msg)
for url := range forwardToUrlList {
ret := wcferry.ParseWxMsg(msg)
for url := range urlReceiverList {
logman.Info("forward msg", "url", url, "Id", ret.Id)
go request.JsonPost(url, ret, request.H{})
}
@ -27,30 +27,30 @@ func (wc *Controller) enableForwardToUrl(url string) error {
}
}
if _, ok := forwardToUrlList[url]; ok {
if _, ok := urlReceiverList[url]; ok {
return errors.New("url already exists")
}
forwardToUrlStat = true
forwardToUrlList[url] = true
urlReceiverStat = true
urlReceiverList[url] = true
return nil
}
func (wc *Controller) disableForwardToUrl(url string) error {
func (wc *Controller) disableUrlReceiver(url string) error {
if _, ok := forwardToUrlList[url]; !ok {
if _, ok := urlReceiverList[url]; !ok {
return errors.New("url not exists")
}
delete(forwardToUrlList, url)
delete(urlReceiverList, url)
if len(forwardToUrlList) == 0 {
if len(urlReceiverList) == 0 {
if err := wc.DisableReceiver(false); err != nil {
return err
}
forwardToUrlStat = false
urlReceiverStat = false
}
return nil

View File

@ -45,7 +45,7 @@ func Route(rg *gin.RouterGroup) {
rg.POST("accept_new_friend", ctrl.acceptNewFriend)
rg.POST("receive_transfer", ctrl.receiveTransfer)
rg.POST("enable_forward_msg", ctrl.enableForwardMsg)
rg.POST("disable_forward_msg", ctrl.disableForwardMsg)
rg.POST("enable_receiver", ctrl.enabledReceiver)
rg.POST("disable_receiver", ctrl.disableReceiver)
}

View File

@ -14,7 +14,7 @@ type DbSqlQueryRequest struct {
}
// 消息转发参数
type ForwardMsgRequest struct {
type ReceiverRequest struct {
Url string `json:"url"`
}

View File

@ -1,8 +1,8 @@
{
"swagger": "2.0",
"info": {
"description": "基于 WeChatFerry RPC 实现的电脑版微信 REST API使用 Go 语言编写,无第三方运行时依赖。基于 HTTP 提供操作接口,轻松对接任意编程语言。",
"title": "Wechat Rest API",
"description": "基于 WeChatFerry RPC 实现的微信接口,使用 Go 语言编写,无第三方运行时依赖,易于对接任意编程语言。",
"title": "WeChat Rest Api",
"contact": {
"name": "WeChatRest",
"url": "https://github.com/opentdp/wechat-rest"
@ -11,7 +11,7 @@
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "v0.4.6"
"version": "v0.5.0"
},
"basePath": "/api",
"paths": {
@ -269,20 +269,20 @@
}
}
},
"/disable_forward_msg": {
"/disable_receiver": {
"post": {
"produces": [
"application/json"
],
"summary": "关闭转发消息到URL",
"summary": "关闭推送消息到URL",
"parameters": [
{
"description": "消息转发请求参数",
"description": "消息推送请求参数",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/wcfrest.ForwardMsgRequest"
"$ref": "#/definitions/wcfrest.ReceiverRequest"
}
}
],
@ -350,20 +350,20 @@
}
}
},
"/enable_forward_msg": {
"/enable_receiver": {
"post": {
"produces": [
"application/json"
],
"summary": "开启转发消息到URL",
"summary": "开启推送消息到URL",
"parameters": [
{
"description": "消息转发请求参数",
"description": "消息推送请求参数",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/wcfrest.ForwardMsgRequest"
"$ref": "#/definitions/wcfrest.ReceiverRequest"
}
}
],
@ -1059,14 +1059,6 @@
}
}
},
"wcfrest.ForwardMsgRequest": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"wcfrest.GetAudioMsgRequest": {
"type": "object",
"properties": {
@ -1092,6 +1084,14 @@
}
}
},
"wcfrest.ReceiverRequest": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
}
},
"wcfrest.RespPayload": {
"type": "object",
"properties": {