package wechat import ( "encoding/base64" "fmt" "net/http" "mini-chat/internal/code" "mini-chat/internal/pkg/core" "mini-chat/internal/pkg/wechat" ) type generateQRCodeRequest struct { AppID string `json:"app_id" binding:"required"` // 微信小程序 AppID AppSecret string `json:"app_secret" binding:"required"` // 微信小程序 AppSecret Path string `json:"path" binding:"required"` // 小程序页面路径 } type generateQRCodeResponse struct { Success bool `json:"success"` Message string `json:"message"` Data string `json:"data"` // Base64 编码的图片数据 } // GenerateQRCode 生成微信小程序二维码 // @Summary 生成微信小程序二维码 // @Description 根据 AppID、AppSecret 和页面路径生成微信小程序二维码 // @Tags 微信 // @Accept json // @Produce json // @Param request body generateQRCodeRequest true "请求参数" // @Success 200 {object} generateQRCodeResponse // @Failure 400 {object} code.Failure // @Failure 500 {object} code.Failure // @Router /api/wechat/qrcode [post] func (h *handler) GenerateQRCode() core.HandlerFunc { return func(ctx core.Context) { req := new(generateQRCodeRequest) if err := ctx.ShouldBindJSON(req); err != nil { ctx.AbortWithError(core.Error( http.StatusBadRequest, code.ParamBindError, code.Text(code.ParamBindError), )) return } // 调用微信小程序二维码生成函数 imageData, err := wechat.GenerateQRCode(ctx, req.AppID, req.AppSecret, req.Path) if err != nil { h.logger.Error(fmt.Sprintf("生成微信小程序二维码失败: %s", err.Error())) ctx.AbortWithError(core.Error( http.StatusInternalServerError, code.ServerError, err.Error(), )) return } // 将图片数据转换为 Base64 编码 base64Data := base64.StdEncoding.EncodeToString(imageData) res := &generateQRCodeResponse{ Success: true, Message: "二维码生成成功", Data: base64Data, } ctx.Payload(res) } }