80 lines
1.8 KiB
Go

package v1
import (
"fmt"
"github.com/gin-gonic/gin"
v1 "hospital-open-api/api/requests/v1"
"hospital-open-api/api/responses"
"hospital-open-api/config"
"hospital-open-api/extend/weChat/Scheme"
"hospital-open-api/global"
"hospital-open-api/utils"
"regexp"
"strings"
)
type WeChat struct{}
// GetScheme 获取页面加密scheme码
func (r *WeChat) GetScheme(c *gin.Context) {
WeChatRequest := v1.WeChatRequest{}
req := WeChatRequest.GetScheme
if err := c.ShouldBind(&req); err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
// 参数验证
if err := global.Validate.Struct(req); err != nil {
responses.FailWithMessage(utils.Translate(err), c)
return
}
// 验证path参数
if strings.Count(req.Path, "/") != 3 || !strings.HasPrefix(req.Path, "/") || strings.HasSuffix(req.Path, "/") {
responses.FailWithMessage("path格式错误", c)
return
}
// 验证query参数
// 定义正则表达式,匹配 k1=v1&k2=v2 这种格式
pattern := `^([a-zA-Z0-9_-]+=[a-zA-Z0-9_-]+&)*([a-zA-Z0-9_-]+=[a-zA-Z0-9_-]+)$`
reg := regexp.MustCompile(pattern)
res := reg.MatchString(req.Query)
if !res {
responses.FailWithMessage("query格式错误", c)
return
}
// 判断环境
envVersion := "trial"
if config.C.Env == "prod" {
envVersion = "release"
}
fmt.Println(req.Query)
// 构建请求数据
JumpWxaData := &Scheme.GetSchemeJumpWxaRequest{
Path: req.Path,
Query: req.Query,
EnvVersion: envVersion,
}
GetSchemeRequest := &Scheme.GetSchemeRequest{
JumpWxa: JumpWxaData,
ExpireType: 1,
ExpireTime: 0,
ExpireInterval: req.ExpireInterval,
}
openLink, err := GetSchemeRequest.GetScheme(1)
if err != nil {
responses.FailWithMessage(err.Error(), c)
return
}
responses.OkWithData(openLink, c)
}