BeforeSend.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace api\behaviors;
  3. use common\enums\LoginEnum;
  4. use common\models\user\User;
  5. use Yii;
  6. use yii\base\Behavior;
  7. /**
  8. * Class BeforeSend
  9. * @package api\behaviors
  10. * @author qimall
  11. */
  12. class BeforeSend extends Behavior
  13. {
  14. /**
  15. * {@inheritdoc}
  16. */
  17. public function events()
  18. {
  19. return [
  20. 'beforeSend' => 'beforeSend',
  21. ];
  22. }
  23. /**
  24. * 格式化返回
  25. *
  26. * @param $event
  27. * @throws \yii\base\InvalidConfigException
  28. */
  29. public function beforeSend($event)
  30. {
  31. $response = $event->sender;
  32. if ($response->statusCode == 401) {
  33. $code = LoginEnum::checkMessage($response->data['message']);
  34. $replace_map = LoginEnum::getReplaceMap();
  35. $response = $event->sender;
  36. $response->format = yii\web\Response::FORMAT_JSON;
  37. $response->data['code'] = $code??401;
  38. $response->data['message'] = $replace_map[$response->data['message']] ? $replace_map[$response->data['message']] : $response->data['message'];
  39. //支付宝小程序 401状态码修改成200
  40. $platform = \Yii::$app->request->headers['x-app-platform'] ?? '';
  41. if($platform == User::PLATFORM_MP_ALI){
  42. $response->statusCode = 200;
  43. }
  44. return;
  45. }
  46. // if (YII_DEBUG && isset(Yii::$app->controller->module->id) && Yii::$app->controller->module->id === "debug") {
  47. // return;
  48. // }
  49. // // 不进行格式化出处理
  50. // if (Yii::$app->params['triggerBeforeSend'] == false) {
  51. // $response = $event->sender;
  52. // $response->format = yii\web\Response::FORMAT_JSON;
  53. // $response->statusCode = 200;
  54. // return;
  55. // }
  56. // $response = $event->sender;
  57. // $response->data = [
  58. // 'code' => $response->statusCode,
  59. // 'message' => $response->statusText,
  60. // 'data' => $response->data,
  61. // 'timestamp' => time(),
  62. // ];
  63. // // 记录日志
  64. // $errData = Yii::$app->services->log->record($response, true);
  65. // // 格式化报错输入格式
  66. // if ($response->statusCode >= 500) {
  67. // $response->data['data'] = YII_DEBUG ? $errData : '服务器打瞌睡了~';
  68. // }
  69. // // 提取系统 300-499 的报错信息
  70. // if ($response->statusCode >= 300 && $response->statusCode <= 499) {
  71. // if (isset($response->data['data']['message']) && isset($response->data['data']['status'])) {
  72. // $response->data['message'] = $response->data['data']['message'];
  73. // }
  74. // if (isset($errData['errorMessage'])) {
  75. // $response->data['message'] = $errData['errorMessage'];
  76. // $response->data['message'] == $response->data['data'] && $response->data['data'] = [];
  77. // }
  78. // }
  79. // // 加入ip黑名单
  80. // $response->statusCode == 429 && Yii::$app->services->ipBlacklist->create(Yii::$app->request->userIP, '请求频率过高');
  81. // $response->format = yii\web\Response::FORMAT_JSON;
  82. // // 考虑到了某些前端必须返回成功操作,所以这里可以设置为都返回200的状态码
  83. // $response->statusCode = 200;
  84. }
  85. }