生成表结构、
This commit is contained in:
5
internal/controller/admin/admin.go
Normal file
5
internal/controller/admin/admin.go
Normal file
@ -0,0 +1,5 @@
|
||||
// =================================================================================
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package admin
|
||||
15
internal/controller/admin/admin_new.go
Normal file
15
internal/controller/admin/admin_new.go
Normal 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{}
|
||||
}
|
||||
14
internal/controller/admin/admin_v1_admin_info.go
Normal file
14
internal/controller/admin/admin_v1_admin_info.go
Normal 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)
|
||||
}
|
||||
5
internal/controller/auth/auth.go
Normal file
5
internal/controller/auth/auth.go
Normal file
@ -0,0 +1,5 @@
|
||||
// =================================================================================
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package auth
|
||||
15
internal/controller/auth/auth_new.go
Normal file
15
internal/controller/auth/auth_new.go
Normal 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{}
|
||||
}
|
||||
14
internal/controller/auth/auth_v1_admin_login.go
Normal file
14
internal/controller/auth/auth_v1_admin_login.go
Normal 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)
|
||||
}
|
||||
14
internal/controller/auth/auth_v1_merchant_login.go
Normal file
14
internal/controller/auth/auth_v1_merchant_login.go
Normal 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)
|
||||
}
|
||||
14
internal/controller/auth/auth_v1_store_login.go
Normal file
14
internal/controller/auth/auth_v1_store_login.go
Normal 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)
|
||||
}
|
||||
5
internal/controller/wx/wx.go
Normal file
5
internal/controller/wx/wx.go
Normal file
@ -0,0 +1,5 @@
|
||||
// =================================================================================
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package wx
|
||||
15
internal/controller/wx/wx_new.go
Normal file
15
internal/controller/wx/wx_new.go
Normal 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{}
|
||||
}
|
||||
33
internal/controller/wx/wx_v1_we_chat_event.go
Normal file
33
internal/controller/wx/wx_v1_we_chat_event.go
Normal 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
|
||||
|
||||
}
|
||||
59
internal/controller/wx/wx_v1_we_chat_login.go
Normal file
59
internal/controller/wx/wx_v1_we_chat_login.go
Normal 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
|
||||
}
|
||||
15
internal/controller/wx/wx_v1_we_chat_polling.go
Normal file
15
internal/controller/wx/wx_v1_we_chat_polling.go
Normal 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)
|
||||
}
|
||||
32
internal/controller/wx/wx_v1_we_chat_vertify.go
Normal file
32
internal/controller/wx/wx_v1_we_chat_vertify.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user