feat: 公众号服务新增 GetJSSDKConfig 方法及 JSSDK 配置 DTO

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-16 18:37:59 +08:00
parent 0cba6fd6d5
commit ed1facc1b8
3 changed files with 57 additions and 0 deletions

View File

@@ -54,3 +54,17 @@ type WechatPayH5Params struct {
ID uint `path:"id" description:"订单ID" required:"true"` ID uint `path:"id" description:"订单ID" required:"true"`
WechatPayH5Request WechatPayH5Request
} }
// JSSDKConfigRequest 获取 JSSDK 签名配置请求
type JSSDKConfigRequest struct {
URL string `query:"url" validate:"required" required:"true" description:"当前页面完整 URL含协议和路径不含 # 及其后内容)"`
}
// JSSDKConfigResponse JSSDK 签名配置响应
// 前端使用这些字段调用 wx.config() 初始化微信 JS-SDK
type JSSDKConfigResponse struct {
AppID string `json:"app_id" description:"公众号 AppID"`
Timestamp int64 `json:"timestamp" description:"时间戳(秒)"`
NonceStr string `json:"nonce_str" description:"随机字符串"`
Signature string `json:"signature" description:"签名SHA1"`
}

View File

@@ -8,6 +8,37 @@ import (
"go.uber.org/zap" "go.uber.org/zap"
) )
// GetJSSDKConfig 获取 JSSDK 签名配置
// url 为当前页面完整 URL含协议和路径不含 # 及其后内容)
func (s *OfficialAccountService) GetJSSDKConfig(ctx context.Context, url string) (*JSSDKConfig, error) {
if url == "" {
return nil, errors.New(errors.CodeInvalidParam, "页面 URL 不能为空")
}
signMap, err := s.app.JSSDK.ConfigSignature(ctx, url, "", 0)
if err != nil {
s.logger.Error("获取 JSSDK 签名失败", zap.String("url", url), zap.Error(err))
return nil, errors.Wrap(errors.CodeInternalError, err, "获取 JSSDK 签名失败")
}
appID, _ := (*signMap)["appId"].(string)
nonceStr, _ := (*signMap)["nonceStr"].(string)
timestamp, _ := (*signMap)["timestamp"].(int64)
signature, _ := (*signMap)["signature"].(string)
s.logger.Debug("获取 JSSDK 签名配置成功",
zap.String("app_id", appID),
zap.String("url", url),
)
return &JSSDKConfig{
AppID: appID,
Timestamp: timestamp,
NonceStr: nonceStr,
Signature: signature,
}, nil
}
// OfficialAccountService 微信公众号服务实现 // OfficialAccountService 微信公众号服务实现
type OfficialAccountService struct { type OfficialAccountService struct {
app *officialAccount.OfficialAccount app *officialAccount.OfficialAccount

View File

@@ -10,11 +10,23 @@ type Service interface {
GetUserInfo(ctx context.Context, code string) (openID, unionID string, err error) GetUserInfo(ctx context.Context, code string) (openID, unionID string, err error)
} }
// JSSDKConfig JSSDK 签名配置
// 用于前端调用 wx.config() 初始化微信 JS-SDK
type JSSDKConfig struct {
AppID string // 公众号 AppID
Timestamp int64 // 时间戳(秒)
NonceStr string // 随机字符串
Signature string // 签名SHA1
}
// OfficialAccountServiceInterface 微信公众号服务接口 // OfficialAccountServiceInterface 微信公众号服务接口
type OfficialAccountServiceInterface interface { type OfficialAccountServiceInterface interface {
Service Service
GetUserInfoDetailed(ctx context.Context, code string) (*UserInfo, error) GetUserInfoDetailed(ctx context.Context, code string) (*UserInfo, error)
GetUserInfoByToken(ctx context.Context, accessToken, openID string) (*UserInfo, error) GetUserInfoByToken(ctx context.Context, accessToken, openID string) (*UserInfo, error)
// GetJSSDKConfig 获取 JSSDK 签名配置,用于前端调用 wx.config() 初始化
// url 为当前页面完整 URL含协议和路径不含 # 及其后内容)
GetJSSDKConfig(ctx context.Context, url string) (*JSSDKConfig, error)
} }
// PaymentServiceInterface 微信支付服务接口 // PaymentServiceInterface 微信支付服务接口