BaseController.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?php
  2. /**
  3. * 入口
  4. * @author wesmiler
  5. */
  6. namespace app\weixin\controller;
  7. use app\weixin\model\Member;
  8. use app\weixin\model\Wechat;
  9. use cmf\controller\HomeBaseController;
  10. use think\Request;
  11. class BaseController extends HomeBaseController
  12. {
  13. public $userId = 0;
  14. public $userInfo = 2;
  15. public $userType = 2;
  16. public function __construct(Request $request = null)
  17. {
  18. parent::__construct($request);
  19. $controller = request()->controller();
  20. // AJAX请求 不验证授权
  21. if($this->request->isAjax()){
  22. $this->userInfo = session('userInfo');
  23. $debug = config('weixin.debug');
  24. if(empty($this->userInfo) && $debug){
  25. // 调试模式
  26. $curOpenId = session('openid');
  27. $openid = $curOpenId? $curOpenId : config('weixin.openid');
  28. session('openid', $openid);
  29. $field = 'id,openid,user_login,mobile,real_name,user_nickname,avatar';
  30. $this->userInfo = Member::getInfo(['openid'=> $openid,'user_type'=> 2],$field);
  31. session('userInfo', $this->userInfo);
  32. }
  33. $this->userId = isset($this->userInfo['id'])? intval($this->userInfo['id']) : 0;
  34. $this->userType = isset($this->userInfo['user_type'])? intval($this->userInfo['user_type']) : 2;
  35. if(empty($this->userId) && strtolower($controller) != 'register'){
  36. showJson('login','请先登录',['url'=> url('/weixin/login/index')]);
  37. }
  38. return true;
  39. }
  40. // 调用微信授权校验
  41. $debug = config('weixin.debug');
  42. if(empty($debug)){
  43. $this->userInfo = session('userInfo');
  44. $this->userId = isset($this->userInfo['id'])? intval($this->userInfo['id']) : 0;
  45. $openid = session('openid');
  46. if(empty($openid)){
  47. Wechat::auth();
  48. }
  49. if(empty($this->userInfo)){
  50. $url = strtolower($controller)=='register'? '/weixin/register/index' : '/weixin/login/index';
  51. $this->redirect($url);
  52. }
  53. }else{
  54. $this->userInfo = session('userInfo');
  55. if(empty($this->userInfo)){
  56. $curOpenId = session('openid');
  57. $openid = $curOpenId? $curOpenId : config('weixin.openid');
  58. session('openid', $openid);
  59. $field = 'id,openid,user_login,mobile,real_name,user_nickname,avatar';
  60. $this->userInfo = Member::getInfo(['openid'=> $openid,'user_type'=> 2],$field);
  61. session('userInfo', $this->userInfo);
  62. }
  63. $this->userId = isset($this->userInfo['id'])? $this->userInfo['id'] : 0;
  64. }
  65. $this->userType = isset($this->userInfo['user_type'])? intval($this->userInfo['user_type']) : 2;
  66. }
  67. /**
  68. * 验证是否绑定手机号和实名
  69. * @return bool
  70. */
  71. private function checkBind(){
  72. $userInfo = session('userInfo');
  73. $this->userId = isset($userInfo['id'])? intval($userInfo['id']) : 0;
  74. $mobile = isset($userInfo['mobile'])? trim($userInfo['mobile']) : '';
  75. $realName = isset($userInfo['real_name'])? trim($userInfo['real_name']) : '';
  76. if(empty($this->userId)){
  77. Wechat::init();
  78. $this->checkBind();
  79. }
  80. if($mobile && $realName){
  81. return true;
  82. }
  83. $field = 'id,openid,user_login,mobile,real_name,user_nickname,avatar';
  84. $userInfo = db('user')->field($field)->where(['id'=> $this->userId,'user_type'=> 2])->find();
  85. $mobile = isset($userInfo['mobile'])? trim($userInfo['mobile']) : '';
  86. $realName = isset($userInfo['real_name'])? trim($userInfo['real_name']) : '';
  87. // 若未绑定手机号码
  88. if(empty($mobile)){
  89. session('mealUrl', request()->domain().request()->url());
  90. saveLogCache('Meal:'.$this->userId,request()->domain().request()->url());
  91. $this->redirect(url('/weixin/bind/bindMobile'));
  92. exit;
  93. }
  94. // 未实名
  95. if(empty($realName)){
  96. $this->redirect(url('/weixin/bind/bindName'));
  97. exit;
  98. }
  99. }
  100. /**
  101. * 验证状态
  102. */
  103. public function checkUser(){
  104. $userStatus = isset($this->userInfo['user_status'])? intval($this->userInfo['user_status']) : 0;
  105. if($this->userInfo && $userStatus != 1){
  106. showJson(1006, 2102);
  107. }
  108. }
  109. }
  110. ?>