feat: add WeChat MP channel support and enhance widget configuration

- Updated output path for generated enums to reflect new structure.
- Enhanced ChannelController to handle WeChat MP OAuth authorization and callback.
- Introduced WechatMPChannelConfig DTO for WeChat MP specific configurations.
- Modified WidgetConfigResponse to include channel type and external source.
- Added enums for WeChat MP channel type and external source.
- Implemented OAuth flow for WeChat MP, including state signing and verification.
- Updated frontend forms to accommodate WeChat MP configurations.
- Enhanced API interactions to support WeChat MP external ID and source.
- Updated generated enums to include WeChat MP external source.
This commit is contained in:
mlogclub
2026-04-27 15:42:04 +08:00
parent 15d0d81fa1
commit fbabb174d2
14 changed files with 665 additions and 75 deletions
+12
View File
@@ -23,3 +23,15 @@ type WebChannelConfig struct {
Position string `json:"position"`
Width string `json:"width"`
}
type WechatMPChannelConfig struct {
Title string `json:"title"`
Subtitle string `json:"subtitle"`
ThemeColor string `json:"themeColor"`
Position string `json:"position"`
Width string `json:"width"`
AppID string `json:"appId"`
AppSecret string `json:"appSecret"`
OAuthScope string `json:"oauthScope"`
OAuthEnabled bool `json:"oauthEnabled"`
}
+8 -6
View File
@@ -1,10 +1,12 @@
package response
type WidgetConfigResponse struct {
ChannelID string `json:"channelId"`
Title string `json:"title"`
Subtitle string `json:"subtitle"`
ThemeColor string `json:"themeColor"`
Position string `json:"position"`
Width string `json:"width"`
ChannelID string `json:"channelId"`
ChannelType string `json:"channelType"`
ExternalSource string `json:"externalSource"`
Title string `json:"title"`
Subtitle string `json:"subtitle"`
ThemeColor string `json:"themeColor"`
Position string `json:"position"`
Width string `json:"width"`
}
+3 -1
View File
@@ -7,11 +7,13 @@ type ExternalSource string
const (
ExternalSourceWebChat ExternalSource = "web_chat"
ExternalSourceWechatMP ExternalSource = "wechat_mp"
ExternalSourceWxWorkKF ExternalSource = "wxwork_kf"
)
var externalSourceLabelMap = map[ExternalSource]string{
ExternalSourceWebChat: "网页客服",
ExternalSourceWechatMP: "微信公众号",
ExternalSourceWxWorkKF: "企业微信客服",
}
@@ -25,7 +27,7 @@ func GetExternalSourceLabel(v ExternalSource) string {
// IsAllowedOpenImExternalSource 开放 IM 入口允许的外部来源(闭集校验)。
func IsAllowedOpenImExternalSource(s ExternalSource) bool {
switch s {
case ExternalSourceWebChat:
case ExternalSourceWebChat, ExternalSourceWechatMP:
return true
default:
return false
+1
View File
@@ -18,6 +18,7 @@ const (
const (
ChannelTypeWeb = "web"
ChannelTypeWechatMP = "wechat_mp"
ChannelTypeWxWorkKF = "wxwork_kf"
)