Common.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace app\index\controller;
  3. use think\Controller;
  4. use think\Request;
  5. use think\Db;
  6. require_once('function.php');
  7. class Common extends Controller{
  8. public $accessToken =""; //属性保存在access_token
  9. public $appid =APPID;
  10. public $appsecret=APPSECRET;
  11. public function __construct(Request $request)
  12. {
  13. parent::__construct();
  14. $this->accessToken = get_access_token();
  15. //获得方法
  16. $action_name =$request->action();
  17. //获得控制器
  18. $controller_name = $request->controller();
  19. if(!cookie('user')){
  20. if($action_name !='getcode'){
  21. $this->auth($action_name, $controller_name);
  22. }
  23. }
  24. }
  25. public function auth($action_name, $controller_name)
  26. {
  27. // var_dump($action_name, $controller_name);
  28. $bak = urlencode(HOSTNAME."/index/".$controller_name."/".$action_name);
  29. $redirecr_uri =urlencode(HOSTNAME.'/index/common/getcode?bak='.$bak);
  30. $url ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".$redirecr_uri."&response_type=code&scope=snsapi_userinfo&state=".time()."#wechat_redirect";
  31. header("Location:$url");exit;
  32. }
  33. public function getcode(Request $request)
  34. {
  35. $code = $_GET['code'];
  36. if(!$code){
  37. echo '微信服务器故障';
  38. exit;
  39. }
  40. // 通过code换取网页授权中的access_token
  41. $url ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code";
  42. $result =file_get_contents($url);
  43. $result = json_decode($result,true);
  44. if(!$result){
  45. echo '微信服务器故障';
  46. exit;
  47. }
  48. // 获取用户的基本信息,此操作仅限scope为snspai_userinfo
  49. $url ="https://api.weixin.qq.com/sns/userinfo?access_token=".$result['access_token']."&openid=".$result['openid']."&lang=zh_CN";
  50. $result =file_get_contents($url);
  51. $result = json_decode($result,true);
  52. $userInfo = db('user')->where("openid","=",$result['openid'])->find();
  53. if(!$userInfo){
  54. $data = [
  55. 'nickname' =>$result['nickname'] ,
  56. 'openid'=>$result['openid'],
  57. 'headimgurl'=>$result['headimgurl'],
  58. 'addtime' =>time()
  59. ];
  60. db('user')->insert($data);
  61. $userInfo = $result;
  62. }
  63. $bak = $_GET['bak'];
  64. cookie('user',$userInfo);
  65. header('Location:'.$bak);exit;
  66. }
  67. }