|
@@ -0,0 +1,121 @@
|
|
|
|
+<?php
|
|
|
|
+
|
|
|
|
+namespace app\index\controller;
|
|
|
|
+
|
|
|
|
+use EasyWeChat\Factory;
|
|
|
|
+use think\facade\Session;
|
|
|
|
+use think\facade\Log;
|
|
|
|
+
|
|
|
|
+class Login extends Base
|
|
|
|
+{
|
|
|
|
+ private app_id;
|
|
|
|
+ private secret;
|
|
|
|
+ public function __construct()
|
|
|
|
+ {
|
|
|
|
+ parent::__construct();
|
|
|
|
+ $this->app_id = Config::get('wechat.request.app_id');
|
|
|
|
+ $this->secret = Config::get('wechat.request.secret');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public function wechatLogin(){
|
|
|
|
+
|
|
|
|
+ $callback = urldecode(input("callback", ''));
|
|
|
|
+ if ($callback == '') {
|
|
|
|
+
|
|
|
|
+ $callback=(String)url("/index",[],"",true);
|
|
|
|
+ }
|
|
|
|
+ Session::set('target_url', $callback);
|
|
|
|
+
|
|
|
|
+ $config = [
|
|
|
|
+
|
|
|
|
+ 'app_id' => $this->app_id,
|
|
|
|
+ 'secret' => $this->secret,
|
|
|
|
+ 'oauth' => [
|
|
|
|
+
|
|
|
|
+ 'response_type' => 'array',
|
|
|
|
+ 'scopes' => ['snsapi_userinfo'],
|
|
|
|
+ 'callback' => (String)url("Login/wechatGetInfo",['callback'=>$callback],"",true),
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+ $app = Factory::officialAccount($config);
|
|
|
|
+ $oauth = $app->oauth;
|
|
|
|
+ return $oauth->redirect();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public function wechatGetInfo(){
|
|
|
|
+ $param_callback = urldecode(input("callback", ''));
|
|
|
|
+
|
|
|
|
+ $user = Session::get('wx_user', '');
|
|
|
|
+ if($user != ''){
|
|
|
|
+ $target_url = Session::get('target_url', '');
|
|
|
|
+ if($target_url == ''){
|
|
|
|
+ $target_url = $param_callback;
|
|
|
|
+ }
|
|
|
|
+ $callback = $this->merge_link($target_url, $user);
|
|
|
|
+
|
|
|
|
+ header('location:' . $callback);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ $callback = (String)url("Login/wechatGetInfo",['callback'=>$param_callback],"",true);
|
|
|
|
+ $config = [
|
|
|
|
+
|
|
|
|
+ 'app_id' => $this->app_id,
|
|
|
|
+ 'secret' => $this->secret,
|
|
|
|
+ 'oauth' => [
|
|
|
|
+
|
|
|
|
+ 'response_type' => 'array',
|
|
|
|
+ 'scopes' => ['snsapi_userinfo'],
|
|
|
|
+
|
|
|
|
+ 'callback' => $callback,
|
|
|
|
+ ],
|
|
|
|
+ ];
|
|
|
|
+ $app = Factory::officialAccount($config);
|
|
|
|
+ $oauth = $app->oauth;
|
|
|
|
+
|
|
|
|
+ $userObj = $oauth->user()->toArray();
|
|
|
|
+ $user = [
|
|
|
|
+ "openid" => $userObj["id"],
|
|
|
|
+ "nickname" => $userObj["nickname"],
|
|
|
|
+ "avatar" => $userObj["avatar"],
|
|
|
|
+ ];
|
|
|
|
+ Log::info(' 授权信息 user:'.json_encode($user));
|
|
|
|
+ Session::set('wx_user', $user);
|
|
|
|
+
|
|
|
|
+ $wx_userinfo = [];
|
|
|
|
+ if($user['nickname'] != ''){
|
|
|
|
+ $wx_userinfo['nickname'] = $user['nickname'];
|
|
|
|
+ }
|
|
|
|
+ if($user['avatar'] != ''){
|
|
|
|
+ $wx_userinfo['avatar'] = $user['avatar'];
|
|
|
|
+ }
|
|
|
|
+ if($user['openid'] != '' && count($wx_userinfo) != 0){
|
|
|
|
+
|
|
|
|
+ * 登录后业务处理
|
|
|
|
+ */
|
|
|
|
+ }
|
|
|
|
+ $targetUrl = Session::get('target_url', '') == '' ? '/' : Session::get('target_url');
|
|
|
|
+ $targetUrl = $this->merge_link($targetUrl, $user);
|
|
|
|
+ Log::info('授权信息 targetUrl:'.json_encode($targetUrl));
|
|
|
|
+ header('location:' . $targetUrl);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ private function merge_link($targetUrl, $user=[]){
|
|
|
|
+ if(strpos($targetUrl, '#') === false){
|
|
|
|
+ $targetUrl .= '/#';
|
|
|
|
+ }
|
|
|
|
+ if(strpos($targetUrl, '?') === false){
|
|
|
|
+ $targetUrl .= '?';
|
|
|
|
+ }
|
|
|
|
+ else{
|
|
|
|
+ $targetUrl .= '&';
|
|
|
|
+ }
|
|
|
|
+ foreach($user as $k => $v){
|
|
|
|
+ $targetUrl .= $k.'='.$v.'&';
|
|
|
|
+ }
|
|
|
|
+ return $targetUrl;
|
|
|
|
+ }
|
|
|
|
+}
|