作者 yangfu

二维码

@@ -18,6 +18,10 @@ service Core { @@ -18,6 +18,10 @@ service Core {
18 @handler commonSmsCode 18 @handler commonSmsCode
19 post /common/sms/code (CommonSmsCodeRequest) returns (CommonSmsCodeResposne) 19 post /common/sms/code (CommonSmsCodeRequest) returns (CommonSmsCodeResposne)
20 20
  21 + @doc "微信二维码"
  22 + @handler miniQrcodeInvite
  23 + post /mini/qrcode (MiniQrCodeRequest)
  24 +
21 @doc "日志查询" 25 @doc "日志查询"
22 @handler commonGetLog 26 @handler commonGetLog
23 get /log/:module 27 get /log/:module
@@ -35,4 +39,12 @@ type( @@ -35,4 +39,12 @@ type(
35 CommonSmsCodeResposne{ 39 CommonSmsCodeResposne{
36 40
37 } 41 }
  42 +)
  43 +
  44 +type(
  45 + MiniQrCodeRequest{
  46 + Page string `json:"page"` // 微信页面入口
  47 + Path string `json:"path"` //
  48 + Scene string `json:"scene"` // 参数
  49 + }
38 ) 50 )
  1 +package common
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result"
  5 + "net/http"
  6 +
  7 + "github.com/zeromicro/go-zero/rest/httpx"
  8 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/common"
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  11 +)
  12 +
  13 +func MiniQrcodeInviteHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  14 + return func(w http.ResponseWriter, r *http.Request) {
  15 + var req types.MiniQrCodeRequest
  16 + if err := httpx.Parse(r, &req); err != nil {
  17 + httpx.ErrorCtx(r.Context(), w, err)
  18 + return
  19 + }
  20 +
  21 + l := common.NewMiniQrcodeInviteLogic(r.Context(), svcCtx)
  22 + resp, err := l.MiniQrcodeInvite(&req)
  23 + if err != nil {
  24 + result.HttpResult(r, w, resp, err)
  25 + }
  26 + w.Header().Set("Content-Disposition", "attachment; filename="+"qrcode.png")
  27 + w.Header().Set("Content-Type", "application/octet-stream")
  28 + w.Write(resp)
  29 + }
  30 +}
@@ -27,6 +27,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { @@ -27,6 +27,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
27 Handler: common.CommonSmsCodeHandler(serverCtx), 27 Handler: common.CommonSmsCodeHandler(serverCtx),
28 }, 28 },
29 { 29 {
  30 + Method: http.MethodPost,
  31 + Path: "/mini/qrcode",
  32 + Handler: common.MiniQrcodeInviteHandler(serverCtx),
  33 + },
  34 + {
30 Method: http.MethodGet, 35 Method: http.MethodGet,
31 Path: "/log/:module", 36 Path: "/log/:module",
32 Handler: common.CommonGetLogHandler(serverCtx), 37 Handler: common.CommonGetLogHandler(serverCtx),
  1 +package common
  2 +
  3 +import (
  4 + "context"
  5 + "github.com/samber/lo"
  6 + "github.com/silenceper/wechat/v2/miniprogram/qrcode"
  7 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"
  8 +
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  11 +
  12 + "github.com/zeromicro/go-zero/core/logx"
  13 +)
  14 +
  15 +type MiniQrcodeInviteLogic struct {
  16 + logx.Logger
  17 + ctx context.Context
  18 + svcCtx *svc.ServiceContext
  19 +}
  20 +
  21 +func NewMiniQrcodeInviteLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MiniQrcodeInviteLogic {
  22 + return &MiniQrcodeInviteLogic{
  23 + Logger: logx.WithContext(ctx),
  24 + ctx: ctx,
  25 + svcCtx: svcCtx,
  26 + }
  27 +}
  28 +
  29 +func (l *MiniQrcodeInviteLogic) MiniQrcodeInvite(req *types.MiniQrCodeRequest) (resp []byte, err error) {
  30 + q := l.svcCtx.MiniProgram.GetQRCode()
  31 + var data []byte
  32 + data, err = q.GetWXACodeUnlimit(qrcode.QRCoder{
  33 + Page: req.Page,
  34 + Path: req.Page,
  35 + Scene: req.Scene,
  36 + CheckPath: lo.ToPtr(false),
  37 + EnvVersion: "release",
  38 + })
  39 + if err != nil {
  40 + return nil, xerr.NewErr(err)
  41 + }
  42 + return data, nil
  43 +}
1 package svc 1 package svc
2 2
3 import ( 3 import (
  4 + "github.com/silenceper/wechat/v2"
  5 + minicache "github.com/silenceper/wechat/v2/cache"
  6 + "github.com/silenceper/wechat/v2/miniprogram"
  7 + miniConfig "github.com/silenceper/wechat/v2/miniprogram/config"
4 "github.com/zeromicro/go-zero/core/stores/redis" 8 "github.com/zeromicro/go-zero/core/stores/redis"
5 "github.com/zeromicro/go-zero/rest" 9 "github.com/zeromicro/go-zero/rest"
6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/config" 10 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/config"
@@ -44,6 +48,8 @@ type ServiceContext struct { @@ -44,6 +48,8 @@ type ServiceContext struct {
44 ApiAuthService authlib.ApiAuthService 48 ApiAuthService authlib.ApiAuthService
45 SmsService smslib.SMSService 49 SmsService smslib.SMSService
46 50
  51 + MiniProgram *miniprogram.MiniProgram
  52 +
47 LoginStatusCheck rest.Middleware 53 LoginStatusCheck rest.Middleware
48 LogRequest rest.Middleware 54 LogRequest rest.Middleware
49 } 55 }
@@ -57,6 +63,11 @@ func NewServiceContext(c config.Config) *ServiceContext { @@ -57,6 +63,11 @@ func NewServiceContext(c config.Config) *ServiceContext {
57 apiAuth := authlib.ApiAuthService{ 63 apiAuth := authlib.ApiAuthService{
58 Service: gateway.NewService(c.ApiAuth.Name, c.ApiAuth.Host, c.ApiAuth.Timeout), 64 Service: gateway.NewService(c.ApiAuth.Name, c.ApiAuth.Host, c.ApiAuth.Timeout),
59 } 65 }
  66 + miniProgram := wechat.NewWechat().GetMiniProgram(&miniConfig.Config{
  67 + AppID: c.Wechat.AppID,
  68 + AppSecret: c.Wechat.AppSecret,
  69 + Cache: minicache.NewMemory(),
  70 + })
60 return &ServiceContext{ 71 return &ServiceContext{
61 Config: c, 72 Config: c,
62 DB: db, 73 DB: db,
@@ -65,6 +76,7 @@ func NewServiceContext(c config.Config) *ServiceContext { @@ -65,6 +76,7 @@ func NewServiceContext(c config.Config) *ServiceContext {
65 SmsService: smslib.SMSService{Service: gateway.NewService("短信服务", "https://sms.fjmaimaimai.com:9897", time.Second*5)}, 76 SmsService: smslib.SMSService{Service: gateway.NewService("短信服务", "https://sms.fjmaimaimai.com:9897", time.Second*5)},
66 LoginStatusCheck: middleware.NewLoginStatusCheckMiddleware(apiAuth).Handle, 77 LoginStatusCheck: middleware.NewLoginStatusCheckMiddleware(apiAuth).Handle,
67 LogRequest: middleware.NewLogRequestMiddleware(c.LogRequest).Handle, 78 LogRequest: middleware.NewLogRequestMiddleware(c.LogRequest).Handle,
  79 + MiniProgram: miniProgram,
68 80
69 ArticleBackupRepository: repository.NewArticleBackupRepository(cache.NewCachedRepository(mlCache)), 81 ArticleBackupRepository: repository.NewArticleBackupRepository(cache.NewCachedRepository(mlCache)),
70 ArticleCommentRepository: repository.NewArticleCommentRepository(cache.NewCachedRepository(mlCache)), 82 ArticleCommentRepository: repository.NewArticleCommentRepository(cache.NewCachedRepository(mlCache)),
@@ -8,6 +8,11 @@ type CommonSmsCodeRequest struct { @@ -8,6 +8,11 @@ type CommonSmsCodeRequest struct {
8 type CommonSmsCodeResposne struct { 8 type CommonSmsCodeResposne struct {
9 } 9 }
10 10
  11 +type MiniQrCodeRequest struct {
  12 + Page string `json:"page"` // 微信页面入口
  13 + Scene string `json:"scene"` // 参数
  14 +}
  15 +
11 type CommentAuthor struct { 16 type CommentAuthor struct {
12 Id int64 `json:"id"` // 人员id 17 Id int64 `json:"id"` // 人员id
13 Name string `json:"name"` // 人员的名字 18 Name string `json:"name"` // 人员的名字