BaseController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace backend\controllers;
  3. use backend\models\Member;
  4. use Yii;
  5. use yii\web\Controller;
  6. use yii\web\Response;
  7. abstract class BaseController extends Controller
  8. {
  9. /**
  10. * @inheritdoc
  11. */
  12. public function init()
  13. {
  14. parent::init();
  15. $this->enableCsrfValidation = false;
  16. }
  17. /**
  18. * @inheritdoc
  19. */
  20. public function beforeAction($action)
  21. {
  22. if (parent::beforeAction($action)) {
  23. //检验签名
  24. if ($this->checkRequestToken()) {
  25. return true;
  26. } else {
  27. $this->outJson(0, '', '验签失败');
  28. return false;
  29. }
  30. }
  31. return false;
  32. }
  33. /**
  34. * json 输出方法
  35. * @param int $code api code 码 0 失败 1 正常
  36. * @param array $data 输出信息
  37. * @param string $msg 提示语
  38. * @return Response
  39. */
  40. public function outJson($code = 0, $data = array(), $msg = null)
  41. {
  42. $data = [
  43. 'code' => $code,
  44. 'message' => $msg,
  45. 'data' => $data,
  46. 'timestamp' => time()
  47. ];
  48. return $this->asJson($data);
  49. }
  50. /**
  51. * 验证签名
  52. * @return bool true验证成功 false验证失败
  53. */
  54. private function checkRequestToken()
  55. {
  56. $strOauth = '';
  57. $params = array_merge(Yii::$app->getRequest()->get(), Yii::$app->getRequest()->post());
  58. $secret = Yii::$app->params['appSignSecret'];//密钥
  59. //去掉sign值
  60. $token = isset($params['token']) ? trim($params['token']) : '';
  61. if ($token == '') {
  62. return false;
  63. }
  64. unset($params['token']);
  65. ksort($params);//升序排序
  66. foreach ($params as $key => $val) {
  67. if ($key == 'token' || is_array($val) || $val === null) {
  68. continue;
  69. }
  70. $strOauth .= $key . '=' . $val . '&';//&符拼接
  71. }
  72. $strOauth = rtrim($strOauth, '&') . $secret;//加上密钥
  73. //md5后验证签名
  74. if (strcmp(md5($strOauth), $token) !== 0) {
  75. return false;
  76. }
  77. return true;
  78. }
  79. /**
  80. * @param Member $member
  81. * @return int
  82. */
  83. public function getMainLogin(Member $member)
  84. {
  85. if (empty($member->main_login)) {
  86. $login = explode(',', $member->logins);
  87. $member->main_login = $login[0];
  88. $member->save();
  89. }
  90. return intval($member->main_login);
  91. }
  92. }