生成表结构、

This commit is contained in:
2025-05-29 16:23:14 +08:00
parent e8a8e36d61
commit ea87bc829e
97 changed files with 3795 additions and 0 deletions

View File

@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package admin

View File

@ -0,0 +1,15 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package admin
import (
"server/api/admin"
)
type ControllerV1 struct{}
func NewV1() admin.IAdminV1 {
return &ControllerV1{}
}

View File

@ -0,0 +1,14 @@
package admin
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"server/api/admin/v1"
)
func (c *ControllerV1) AdminInfo(ctx context.Context, req *v1.AdminInfoReq) (res *v1.AdminInfoRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

View File

@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package auth

View File

@ -0,0 +1,15 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package auth
import (
"server/api/auth"
)
type ControllerV1 struct{}
func NewV1() auth.IAuthV1 {
return &ControllerV1{}
}

View File

@ -0,0 +1,14 @@
package auth
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"server/api/auth/v1"
)
func (c *ControllerV1) AdminLogin(ctx context.Context, req *v1.AdminLoginReq) (res *v1.AdminLoginRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

View File

@ -0,0 +1,14 @@
package auth
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"server/api/auth/v1"
)
func (c *ControllerV1) MerchantLogin(ctx context.Context, req *v1.MerchantLoginReq) (res *v1.MerchantLoginRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

View File

@ -0,0 +1,14 @@
package auth
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"server/api/auth/v1"
)
func (c *ControllerV1) StoreLogin(ctx context.Context, req *v1.StoreLoginReq) (res *v1.StoreLoginRes, err error) {
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

View File

@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package wx

View File

@ -0,0 +1,15 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package wx
import (
"server/api/wx"
)
type ControllerV1 struct{}
func NewV1() wx.IWxV1 {
return &ControllerV1{}
}

View File

@ -0,0 +1,33 @@
package wx
import (
"context"
"github.com/gogf/gf/v2/os/glog"
"server/api/auth/v1"
)
func (c *ControllerV1) WeChatEvent(ctx context.Context, req *v1.WeChatEventReq) (res *v1.WeChatEventRes, err error) {
// 收到微信订阅事件
glog.Infof(ctx,
"微信消息推送:时间=%d, 消息类型=%s, 事件=%s, 事件Key=%s",
req.CreateTime,
req.MsgType,
req.Event,
req.EventKey,
)
// 根据事件类型进行不同的处理:
switch req.MsgType {
case "event":
switch req.Event {
case "subscribe":
// 未关注,扫描关注后, 注册账号,关联微信的 open_id
case "SCAN":
// 已关注,扫描后,根据 open_id 查找用户生成 token
default:
// 处理其他事件
}
}
return nil, nil
}

View File

@ -0,0 +1,59 @@
package wx
import (
"context"
"encoding/json"
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/glog"
"server/utility/ecode"
"server/utility/wechat"
"os"
"server/api/auth/v1"
)
func (c *ControllerV1) WeChatLogin(ctx context.Context, req *v1.WeChatLoginReq) (res *v1.WeChatLoginRes, err error) {
// 1、根据 uuid 构建redis 存入数据接口
cache := struct {
Token string `json:"token"`
OpenID string `json:"openid"`
}{
Token: "",
OpenID: "",
}
marshal, err := json.Marshal(cache)
if err != nil {
glog.Errorf(ctx, "反序列化数据出现异常")
return nil, ecode.Fail.Sub("反序列化数据出现异常")
}
// 2、存入 redis
_, err = g.Redis().Do(ctx, "SETEX", fmt.Sprintf("login_status:%s", req.UUID), 300, marshal)
if err != nil {
glog.Errorf(ctx, "写入 Redis 异常:%v", err)
return nil, ecode.Fail.Sub("写入 Redis 登录状态失败")
}
// 3、开始获取图片
weChatClient := wechat.GetWeChatClient()
ticket, err := weChatClient.GetTicket(req.UUID)
if err != nil {
return nil, ecode.Fail.Sub("微信登录获取 ticket 错误")
}
imagePath, err := weChatClient.GetQrCode(ticket, req.UUID+".jpg")
if err != nil {
return nil, ecode.Fail.Sub("微信登录获取二维码错误")
}
imageData, err := os.ReadFile(imagePath)
if err != nil {
return nil, ecode.Fail.Sub("读取二维码图片失败")
}
defer os.Remove(imagePath)
resp := g.RequestFromCtx(ctx).Response
resp.Header().Set("Content-Type", "image/jpeg")
resp.Write(imageData)
return nil, nil
}

View File

@ -0,0 +1,15 @@
package wx
import (
"context"
"github.com/gogf/gf/v2/errors/gcode"
"github.com/gogf/gf/v2/errors/gerror"
"server/api/auth/v1"
)
func (c *ControllerV1) WeChatPolling(ctx context.Context, req *v1.WeChatPollingReq) (res *v1.WeChatPollingRes, err error) {
// 收到请求根据 uuid 查询缓存中的数据,看看是否生成了 token
return nil, gerror.NewCode(gcode.CodeNotImplemented)
}

View File

@ -0,0 +1,32 @@
package wx
import (
"context"
"github.com/gogf/gf/v2/crypto/gsha1"
"github.com/gogf/gf/v2/frame/g"
"server/utility/ecode"
"sort"
"strings"
"server/api/auth/v1"
)
func (c *ControllerV1) WeChatVertify(ctx context.Context, req *v1.WeChatVertifyReq) (res *v1.WeChatVertifyRes, err error) {
weChatToken := g.Config().MustGet(ctx, "wechat.token").String()
// 1. 将 token、timestamp、nonce 组成 slice
params := []string{weChatToken, req.Timestamp, req.Nonce}
// 2. 字典序排序
sort.Strings(params)
// 3. 拼接字符串
joined := strings.Join(params, "")
// 4. SHA1 加密
encrypt := gsha1.Encrypt(joined)
// 5. 与 signature 对比
if encrypt != req.Signature {
return nil, ecode.InvalidOperation.Sub("微信服务器验证失败")
}
g.RequestFromCtx(ctx).Response.WriteJson(req.EchoStr)
return
}