72 lines
1.9 KiB
Go
72 lines
1.9 KiB
Go
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(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)
|
|
}
|
|
}
|