github.com/fzfile/BaiduPCS-Go@v0.0.0-20200606205115-4408961cf336/baidupcs/pcserror/panerrorinfo.go (about)

     1  package pcserror
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  type (
     8  	// PanErrorInfo 网盘网页的api错误
     9  	PanErrorInfo struct {
    10  		Operation string
    11  		ErrType   ErrType
    12  		Err       error
    13  		ErrNo     int `json:"errno"`
    14  		// ErrMsg    string `json:"err_msg"`
    15  	}
    16  )
    17  
    18  // NewPanErrorInfo 提供operation操作名称, 返回 *PanErrorInfo
    19  func NewPanErrorInfo(operation string) *PanErrorInfo {
    20  	return &PanErrorInfo{
    21  		Operation: operation,
    22  		ErrType:   ErrorTypeNoError,
    23  	}
    24  }
    25  
    26  // SetJSONError 设置JSON错误
    27  func (pane *PanErrorInfo) SetJSONError(err error) {
    28  	pane.ErrType = ErrTypeJSONParseError
    29  	pane.Err = err
    30  }
    31  
    32  // SetNetError 设置网络错误
    33  func (pane *PanErrorInfo) SetNetError(err error) {
    34  	pane.ErrType = ErrTypeNetError
    35  	pane.Err = err
    36  }
    37  
    38  // SetRemoteError 设置远端服务器错误
    39  func (pane *PanErrorInfo) SetRemoteError() {
    40  	pane.ErrType = ErrTypeRemoteError
    41  }
    42  
    43  // GetOperation 获取操作
    44  func (pane *PanErrorInfo) GetOperation() string {
    45  	return pane.Operation
    46  }
    47  
    48  // GetErrType 获取错误类型
    49  func (pane *PanErrorInfo) GetErrType() ErrType {
    50  	return pane.ErrType
    51  }
    52  
    53  // GetRemoteErrCode 获取远端服务器错误代码
    54  func (pane *PanErrorInfo) GetRemoteErrCode() int {
    55  	return pane.ErrNo
    56  }
    57  
    58  // GetRemoteErrMsg 获取远端服务器错误消息
    59  func (pane *PanErrorInfo) GetRemoteErrMsg() string {
    60  	return FindPanErr(pane.ErrNo)
    61  }
    62  
    63  // GetError 获取原始错误
    64  func (pane *PanErrorInfo) GetError() error {
    65  	return pane.Err
    66  }
    67  
    68  func (pane *PanErrorInfo) Error() string {
    69  	if pane.Operation == "" {
    70  		if pane.Err != nil {
    71  			return pane.Err.Error()
    72  		}
    73  		return StrSuccess
    74  	}
    75  
    76  	switch pane.ErrType {
    77  	case ErrTypeInternalError:
    78  		return fmt.Sprintf("%s: %s, %s", pane.Operation, StrInternalError, pane.Err)
    79  	case ErrTypeJSONParseError:
    80  		return fmt.Sprintf("%s: %s, %s", pane.Operation, StrJSONParseError, pane.Err)
    81  	case ErrTypeNetError:
    82  		return fmt.Sprintf("%s: %s, %s", pane.Operation, StrNetError, pane.Err)
    83  	case ErrTypeRemoteError:
    84  		if pane.ErrNo == 0 {
    85  			return fmt.Sprintf("%s: %s", pane.Operation, StrSuccess)
    86  		}
    87  
    88  		errmsg := FindPanErr(pane.ErrNo)
    89  		return fmt.Sprintf("%s: 遇到错误, %s, 代码: %d, 消息: %s", pane.Operation, StrRemoteError, pane.ErrNo, errmsg)
    90  	case ErrTypeOthers:
    91  		if pane.Err == nil {
    92  			return fmt.Sprintf("%s: %s", pane.Operation, StrSuccess)
    93  		}
    94  
    95  		return fmt.Sprintf("%s, 遇到错误, %s", pane.Operation, pane.Err)
    96  	default:
    97  		panic("panerrorinfo: unknown ErrType")
    98  	}
    99  }
   100  
   101  // FindPanErr 根据 ErrNo, 解析网盘错误信息
   102  func FindPanErr(errno int) (errmsg string) {
   103  	switch errno {
   104  	case 0:
   105  		return StrSuccess
   106  	case -1:
   107  		return "由于您分享了违反相关法律法规的文件,分享功能已被禁用,之前分享出去的文件不受影响。"
   108  	case -2:
   109  		return "用户不存在,请刷新页面后重试"
   110  	case -3:
   111  		return "文件不存在,请刷新页面后重试"
   112  	case -4:
   113  		return "登录信息有误,请重新登录试试"
   114  	case -5:
   115  		return "host_key和user_key无效"
   116  	case -6:
   117  		return "请重新登录"
   118  	case -7:
   119  		return "该分享已删除或已取消"
   120  	case -8:
   121  		return "该分享已经过期"
   122  	case -9:
   123  		return "文件不存在"
   124  	case -10:
   125  		return "分享外链已经达到最大上限100000条,不能再次分享"
   126  	case -11:
   127  		return "验证cookie无效"
   128  	case -12:
   129  		return "访问密码错误"
   130  	case -14:
   131  		return "对不起,短信分享每天限制20条,你今天已经分享完,请明天再来分享吧!"
   132  	case -15:
   133  		return "对不起,邮件分享每天限制20封,你今天已经分享完,请明天再来分享吧!"
   134  	case -16:
   135  		return "对不起,该文件已经限制分享!"
   136  	case -17:
   137  		return "文件分享超过限制"
   138  	case -19:
   139  		return "需要输入验证码"
   140  	case -21:
   141  		return "分享已取消或分享信息无效"
   142  	case -30:
   143  		return "文件已存在"
   144  	case -31:
   145  		return "文件保存失败"
   146  	case -33:
   147  		return "一次支持操作999个,减点试试吧"
   148  	case -62:
   149  		return "可能需要输入验证码"
   150  	case -70:
   151  		return "你分享的文件中包含病毒或疑似病毒,为了你和他人的数据安全,换个文件分享吧"
   152  	case 2:
   153  		return "参数错误"
   154  	case 3:
   155  		return "未登录或帐号无效"
   156  	case 4:
   157  		return "存储好像出问题了,请稍候再试"
   158  	case 105:
   159  		return "啊哦,链接错误没找到文件,请打开正确的分享链接"
   160  	case 108:
   161  		return "文件名有敏感词,优化一下吧"
   162  	case 110:
   163  		return "分享次数超出限制,可以到“我的分享”中查看已分享的文件链接"
   164  	case 112:
   165  		return "页面已过期,请刷新后重试"
   166  	case 113:
   167  		return "签名错误"
   168  	case 114:
   169  		return "当前任务不存在,保存失败"
   170  	case 115:
   171  		return "该文件禁止分享"
   172  	case 132:
   173  		return "您的帐号可能存在安全风险,为了确保为您本人操作,请先进行安全验证。"
   174  	default:
   175  		return "未知错误"
   176  	}
   177  }