bindbox-game/internal/api/wechat/generate_qrcode.go
邹方成 cd2093f594 feat(wechat): 添加微信小程序二维码生成功能
实现微信小程序二维码生成接口,包括获取access_token和生成二维码的逻辑
添加路由配置和handler处理函数,支持返回Base64编码的二维码图片
2025-10-18 10:40:41 +08:00

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)
}
}