package taxerr import ( "errors" "git.listensoft.net/tool/jspkit/logger" "strings" "github.com/go-rod/rod" ) // FormatLoginError 格式化错误信息 func FormatLoginError(str string) error { logger.Info("原始错误信息 - ", str) if strings.Contains(str, "短信发送次数超限") { return TelSmsOverrun } if strings.Contains(str, "手机号不在线") { return SmsUnOnline } if strings.Contains(str, "请调用发送验证码") || strings.Contains(str, "您的登录已掉线,请重新授权后再次发起任务") { return TelOffline } if strings.Contains(str, "手机验证码接收失败") || strings.Contains(str, "服务未获取到短信验证码") { return SmsCodeNotReceived } if strings.Contains(str, "连续认证错误次数过多") || strings.Contains(str, "次输入个人用户密码错误") || strings.Contains(str, "次输入密码错误") { return PasswdLockError } if strings.Contains(str, "输入的短信验证码错误") { return TelSmsError } if strings.Contains(str, "输入的个人账号或密码错误") { return PasswdError } if strings.Contains(str, "税局服务繁忙") { return TaxAbnormalError(true) } if strings.Contains(str, "输入的统一社会信用代码或纳税人识别号错误") { return TaxNoError } if strings.Contains(str, "未查询到您与该企业的关联关系") { return ComIrrelevantRelationError } if strings.Contains(str, "未查询到您与该代理企业的关联关系信息") { return NewUserV3("税局提示:未查询到您与该代理企业的关联关系信息", "请确认录入的信息是否正确") } if strings.Contains(str, "办税人登录信息与企业无关联关系") { return ComIrrelevantRelationError } if strings.Contains(str, "税局服务繁忙") || strings.Contains(str, `登录失败~`) || strings.Contains(str, "内部异常:") || strings.Contains(str, "应用令牌无效") || str == "税局服务异常,请稍后重试" || strings.Contains(str, "渠道认证") { // {"code":-1,"data":{},"message":"内部异常:error parse true"} // {"code":-1,"data":{},"message":"登录失败~syntax error, pos 1, json : Read timed out"} return TaxAbnormalError(true) } if strings.Contains(str, "手机号码不存在") { return NewUserV3("税局提示:手机号码不存在", "您可以尝试使用证件号码登录") } if strings.Contains(str, "您与该企业的绑定关系已过期") { return NewUserV3("税局提示:您与该企业的绑定关系已过期", "请重新绑定版税身份后重试") } if strings.Contains(str, "请在自然人业务入口进行用户注册") { return UnRegisteredError } if strings.Contains(str, "登记企业信息不存在") { return NewSystemV3("税局提示:登记企业信息不存在", "请核实") } if strings.Contains(str, "查询到您与该企业的关联关系信息仍未确认,请确认是否扫脸或稍后再试") { return NewUserV3(`税局提示:查询到您与该企业的关联关系信息仍未确认,请确认是否扫脸或稍后再试`, "请核实该企业与办税员绑定是否正常") } if strings.Contains(str, "请先完成扫脸认证") || strings.Contains(str, "请前往税务APP扫脸认证身份") { return NewUser(str) } if strings.Contains(str, "输入的个人账号、密码或报税手机号错误,请重新输入!") { return TaxNotMatch } if strings.Contains(str, `确认成为该企业办税人失败,请在网站自行扫脸验证确认后使用`) { return FaceVerifyError } if strings.Contains(str, "请核对账套内填写的手机号") || strings.Contains(str, "请自行确认为该企业内的身份2") { return NewUser(str) } // 扫码失败或者login一分钟超时后等等待一分钟扫码失败 if strings.Contains(str, "请登陆后再操作") || strings.Contains(str, "请先完成登录,再执行此项业务") { return TaxAbnormalError(true) } if strings.Contains(str, "不存在用户") || strings.Contains(str, "返回当前用户") { return NewUser("代理登录未绑定该企业,请先去税局绑定") } if strings.Contains(str, "税号错误") { return NewUserV3(`输入的纳税人识别号与公司名不匹配`, `请在“企业信息”修改后重试`) } if strings.Contains(str, "您使用短信验证码过于频繁") || strings.Contains(str, "短信发送申请过于频繁") { return NewUser("税局提示:您使用短信验证码过于频繁") } if strings.Contains(str, "请先完成渠道认证") { return NewUserV3(`请先完成渠道认证`, `再执行此项业务`) } return New(str) } // TaskErrMsg 尝试从错误中提取任务错误信息 func TaskErrMsg(err error) (string, bool) { if se := new(SystemErr); errors.As(err, &se) { return se.Msg, true } if ue := new(UserErr); errors.As(err, &ue) { return ue.Msg, true } return "", false } // AsTaskErr 尝试将错误强转为 tax 错误 func AsTaskErr(err error) (error, bool) { if se := new(SystemErr); errors.As(err, &se) { return se, true } if ue := new(UserErr); errors.As(err, &ue) { return ue, true } return nil, false } func M(err error) { if err != nil { panic(err) } } func E[T any](t T, err error) T { if err != nil { panic(err) } return t } // U 尝试解析 rod.Try 返回 err 的底层 error func U(err error) error { if err == nil { return nil } te := new(rod.TryError) if !errors.As(err, &te) { return err } ue := errors.Unwrap(te) if ue == nil { return te } return ue }