2026-05-29 23:17:01 +08:00
|
|
|
package app
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"errors"
|
|
|
|
|
"strings"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const mediaSupplyPublicSupplierCode = "authority_news"
|
|
|
|
|
|
|
|
|
|
var errMediaSupplyAccountUserIDMissing = errors.New("media supply account user_id is not configured")
|
|
|
|
|
|
|
|
|
|
func publicMediaSupplySupplierCode(supplier string) string {
|
|
|
|
|
supplier = strings.TrimSpace(supplier)
|
|
|
|
|
if supplier == "" {
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
if strings.EqualFold(supplier, mediaSupplySupplierMeijiequan) {
|
|
|
|
|
return mediaSupplyPublicSupplierCode
|
|
|
|
|
}
|
|
|
|
|
return "media_supply"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func publicMediaSupplyArticleURL(value string) string {
|
|
|
|
|
value = strings.TrimSpace(value)
|
|
|
|
|
if value == "" {
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
if isLikelyPublishedArticleURL(value) {
|
|
|
|
|
return value
|
|
|
|
|
}
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func mediaSupplyPublicErrorMessage(err error) string {
|
|
|
|
|
if err == nil {
|
|
|
|
|
return ""
|
|
|
|
|
}
|
|
|
|
|
switch {
|
|
|
|
|
case errors.Is(err, errMeijiequanCredentialsMissing):
|
|
|
|
|
return "媒体供应商账号未配置,请联系管理员处理"
|
|
|
|
|
case errors.Is(err, errMeijiequanSessionMissing), errors.Is(err, errMeijiequanSessionExpired), errors.Is(err, errMeijiequanAuthRequired):
|
|
|
|
|
return "媒体供应商登录状态已失效,请联系管理员处理"
|
|
|
|
|
case errors.Is(err, errMeijiequanChallengeRequired):
|
|
|
|
|
return "媒体供应商登录验证失败,请联系管理员处理"
|
|
|
|
|
case errors.Is(err, errMeijiequanOrderRejected):
|
|
|
|
|
return "媒体供应商拒绝投稿,请检查文章内容或联系管理员处理"
|
|
|
|
|
case errors.Is(err, errMediaSupplySelectedResourcesMissing):
|
2026-06-02 14:50:36 +08:00
|
|
|
return "媒体资源暂不可用或已下架,请重新选择媒体"
|
2026-05-29 23:17:01 +08:00
|
|
|
case errors.Is(err, errMediaSupplyLockedSellBelowCost):
|
|
|
|
|
return "媒体成本价已变化,当前锁定价格低于成本,请重新提交"
|
|
|
|
|
case errors.Is(err, errMediaSupplyAccountUserIDMissing):
|
|
|
|
|
return "媒体供应商账号信息不完整,请联系管理员处理"
|
|
|
|
|
default:
|
|
|
|
|
return mediaSupplyPublicGenericErrorMessage(err.Error())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func mediaSupplyPublicGenericErrorMessage(message string) string {
|
|
|
|
|
message = strings.TrimSpace(message)
|
|
|
|
|
if message == "" {
|
|
|
|
|
return "媒体投稿失败,请稍后重试或联系管理员"
|
|
|
|
|
}
|
|
|
|
|
lower := strings.ToLower(message)
|
|
|
|
|
switch {
|
|
|
|
|
case strings.Contains(lower, "failed to refresh supplier price"):
|
2026-06-02 14:50:36 +08:00
|
|
|
return "媒体资源暂不可用或已下架,请重新选择媒体"
|
2026-05-29 23:17:01 +08:00
|
|
|
case strings.Contains(lower, "supplier cost increased above locked sell price"):
|
|
|
|
|
return "媒体成本价已变化,当前锁定价格低于成本,请重新提交"
|
|
|
|
|
case strings.Contains(lower, "username") || strings.Contains(lower, "password") || strings.Contains(lower, "credentials"):
|
|
|
|
|
return "媒体供应商账号未配置,请联系管理员处理"
|
|
|
|
|
case strings.Contains(lower, "session") || strings.Contains(lower, "authentication") || strings.Contains(lower, "auth required"):
|
|
|
|
|
return "媒体供应商登录状态已失效,请联系管理员处理"
|
|
|
|
|
case strings.Contains(lower, "challenge") || strings.Contains(lower, "captcha"):
|
|
|
|
|
return "媒体供应商登录验证失败,请联系管理员处理"
|
|
|
|
|
case strings.Contains(lower, "user_id"):
|
|
|
|
|
return "媒体供应商账号信息不完整,请联系管理员处理"
|
|
|
|
|
case strings.Contains(lower, "meijiequan"):
|
|
|
|
|
return "媒体供应商请求失败,请稍后重试或联系管理员"
|
|
|
|
|
case strings.Contains(lower, "supplier"):
|
|
|
|
|
return "媒体投稿失败,请稍后重试或联系管理员"
|
|
|
|
|
case strings.Contains(lower, "failed to"):
|
|
|
|
|
return "媒体投稿失败,请稍后重试或联系管理员"
|
|
|
|
|
default:
|
|
|
|
|
if hasCJKText(message) {
|
|
|
|
|
return message
|
|
|
|
|
}
|
|
|
|
|
return "媒体投稿失败,请稍后重试或联系管理员"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func hasCJKText(message string) bool {
|
|
|
|
|
for _, r := range message {
|
|
|
|
|
if r >= '\u4e00' && r <= '\u9fff' {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|