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

@@ -8,6 +8,37 @@ import (
"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 微信公众号服务实现
type OfficialAccountService struct {
app *officialAccount.OfficialAccount