# 响应格式

接口的返回格式统一为

{
    "code": 200,
    "data": [],
    "msg": "",
}

# 异常

系统内置了基本异常,您可以按需取用

./vendor/mochat/framework/src/Exception
├── CommonException.php
└── Handler
   ├── AuthExceptionHandler.php
   ├── CommonExceptionHandler.php
   ├── ErrorExceptionHandler.php
   ├── GuzzleRequestExceptionHandler.php
   └── ValidationExceptionHandler.php

# 错误码

系统同样已经定义了基本的错误码,如下。

<?php

declare(strict_types=1);

namespace MoChat\Framework\Constants;

use Hyperf\Constants\AbstractConstants;
use Hyperf\Constants\Annotation\Constants;

/**
 * 错误code
 * 3位HTTP码 + 6位业务码[前3位为模块,后3位为业务]
 * 有其它错误码需求,即使补充
 * 业务模块码:
 * 100  -  公共模块
 * 100  -  授权模块
 * 200  -  通讯录模块
 * 300  -  外部联系人模块
 * 301  -  外部联系人 - 高级属性模块
 * 400  -  会话内容存档模块.
 * @Constants
 * @method static string getMessage(int $code)  获取错误码信息
 * @method static int getHttpCode(int $code) 获取错误码的httpCode
 */
class ErrorCode extends AbstractConstants
{
    /**
     * @Message("token失效")
     * @HttpCode("401")
     */
    const TOKEN_INVALID = 100001;

    /**
     * @Message("用户或密码错误")
     * @HttpCode("401")
     */
    const AUTH_LOGIN_FAILED = 100002;

    /**
     * @Message("非法token")
     * @HttpCode("401")
     */
    const AUTH_TOKEN_INVALID = 100003;

    /**
     * @Message("token过期")
     * @HttpCode("401")
     */
    const AUTH_SESSION_EXPIRED = 100004;

    /**
     * @Message("未认证,没有token")
     * @HttpCode("401")
     */
    const AUTH_UNAUTHORIZED = 100005;

    /**
     * @Message("认证失败")
     * @HttpCode("401")
     */
    const AUTH_FAILED = 100006;

    /**
     * @Message("没有权限")
     * @HttpCode("403")
     */
    const ACCESS_DENIED = 100007;

    /**
     * @Message("拒绝客户端请求")
     * @HttpCode("403")
     */
    const ACCESS_REFUSE = 100008;

    /**
     * @Message("禁止重复操作")
     * @HttpCode("403")
     */
    const NO_REPETITION_OPERATION = 100009;

    /**
     * @Message("客户端错误")
     * @HttpCode("400")
     */
    const BAD_REQUEST = 100010;

    /**
     * @Message("非法的Content-Type头")
     * @HttpCode("401")
     */
    const INVALID_CONTENT_TYPE = 100011;

    /**
     * @Message("资源未找到")
     * @HttpCode("404")
     */
    const URI_NOT_FOUND = 100012;

    /**
     * @Message("非法的参数")
     * @HttpCode("422")
     */
    const INVALID_PARAMS = 100013;

    /**
     * @Message("服务器异常")
     * @HttpCode("500")
     */
    const SERVER_ERROR = 100014;

    /**
     * @Message("服务器异常(third-party-api)")
     * @HttpCode("500")
     */
    const THIRD_API_ERROR = 100015;
}