pub enum WeChatError {
Show 18 variants
Configuration(String),
Transport(TransportError),
ResponseParseFailed {
url: String,
error: String,
preview: String,
},
ApiError {
errcode: i32,
errmsg: String,
},
AccessTokenExpired {
code: i32,
},
AccessTokenMissing,
TokenInvalidated,
InvalidCode,
CodeUsed,
CodeExpired,
RefreshTokenInvalid,
RefreshTokenExpired,
UserUnauthorized,
RateLimitExceeded {
code: i32,
msg: String,
},
IpNotWhitelisted,
SystemBusy,
InvalidParameter(String),
HttpBuildError(String),
}Expand description
微信授权错误类型
Variants§
Configuration(String)
配置错误
Transport(TransportError)
网络传输错误
ResponseParseFailed
响应解析失败
ApiError
微信API通用错误
AccessTokenExpired
Access Token过期或无效
错误码: 40001, 40014, 42001
解决方案:
- 检查AppSecret是否正确
- 使用refresh_token刷新access_token
- 如果refresh_token也过期,需要重新授权
AccessTokenMissing
Access Token缺失
错误码: 41001
解决方案: 检查API调用时是否传递了access_token参数
TokenInvalidated
用户修改密码导致Token失效
错误码: 42007
原因: 用户修改了微信密码,导致之前授权的所有token失效
解决方案: 引导用户重新进行授权
InvalidCode
无效的授权码
错误码: 40029
原因:
- 授权码格式错误
- 授权码不是通过微信授权流程获得
- AppID与授权码不匹配
解决方案: 检查授权流程是否正确,确保使用正确的AppID
CodeUsed
授权码已被使用
错误码: 40163
原因:
- 授权码(code)只能使用一次
- 页面刷新或重复请求导致code被重复使用
- 服务端错误导致回调接口被调用多次
解决方案:
- 检查前端是否有重复请求
- 确保回调接口没有抛出异常
- 避免页面刷新时重复使用旧的code
- 让用户重新进行授权获取新的code
CodeExpired
授权码已过期
错误码: 42003
原因: 授权码(code)的有效期为5分钟,超时后无法使用
解决方案: 引导用户重新进行授权获取新的code
RefreshTokenInvalid
Refresh Token无效
错误码: 40030
解决方案: 引导用户重新授权
RefreshTokenExpired
Refresh Token已过期
错误码: 42002
原因: refresh_token的有效期为30天,超时后无法使用
解决方案: 引导用户重新进行授权
用户未授权该API
错误码: 50001
原因:
- 授权作用域不足
- 账号类型不支持该API
- 未配置授权回调域名
解决方案:
- 检查授权时的scope参数
- 确认账号类型是否支持(如需要认证的服务号)
- 在微信后台配置授权回调域名
RateLimitExceeded
API调用频率超限
错误码: 45009(分钟级), 45011(日级)
解决方案:
- 实施请求限流
- 使用缓存减少API调用
- 等待限制解除后重试
IpNotWhitelisted
服务器IP未在白名单中
错误码: 40164
解决方案: 在微信公众平台后台添加服务器IP到白名单
SystemBusy
微信系统繁忙
错误码: -1
解决方案: 这是临时性错误,等待后重试即可
InvalidParameter(String)
参数错误
错误码: 61451
解决方案: 检查API调用参数是否正确
HttpBuildError(String)
HTTP构建错误
Implementations§
Source§impl WeChatError
impl WeChatError
Trait Implementations§
Source§impl Debug for WeChatError
impl Debug for WeChatError
Source§impl Display for WeChatError
impl Display for WeChatError
Source§impl Error for WeChatError
impl Error for WeChatError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0: use the Display impl or to_string()
Source§impl From<Error> for WeChatError
impl From<Error> for WeChatError
Source§impl From<TransportError> for WeChatError
impl From<TransportError> for WeChatError
Source§fn from(source: TransportError) -> Self
fn from(source: TransportError) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl Freeze for WeChatError
impl RefUnwindSafe for WeChatError
impl Send for WeChatError
impl Sync for WeChatError
impl Unpin for WeChatError
impl UnwindSafe for WeChatError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
Source§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.