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): return "媒体资源暂不可用或已下架,请重新选择媒体" 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"): return "媒体资源暂不可用或已下架,请重新选择媒体" 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 }