86 lines
1.9 KiB
Go
86 lines
1.9 KiB
Go
package v1
|
|
|
|
import (
|
|
"context"
|
|
"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.ShouldBindJSON(&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"
|
|
}
|
|
|
|
// 获取缓存
|
|
redisKey := "c:official_account.scheme." + req.Path + "." + req.Query
|
|
scheme, _ := global.Redis.Get(context.Background(), redisKey).Result()
|
|
if scheme != "" {
|
|
responses.OkWithData(scheme, c)
|
|
return
|
|
}
|
|
|
|
// 构建请求数据
|
|
JumpWxaData := &Scheme.GetSchemeJumpWxaRequest{
|
|
Path: req.Path,
|
|
Query: req.Query,
|
|
EnvVersion: envVersion,
|
|
}
|
|
|
|
GetSchemeRequest := &Scheme.GetSchemeRequest{
|
|
JumpWxa: JumpWxaData,
|
|
ExpireType: 1,
|
|
ExpireTime: 0,
|
|
ExpireInterval: 10,
|
|
}
|
|
|
|
openLink, err := GetSchemeRequest.GetScheme(1)
|
|
if err != nil {
|
|
responses.FailWithMessage(err.Error(), c)
|
|
return
|
|
}
|
|
|
|
responses.OkWithData(openLink, c)
|
|
}
|