Parcourir la source

微信手机网页登录接口

Sven dunn il y a 2 ans
Parent
commit
f07b486913

+ 121 - 0
其它规范示例/微信相关接口/微信登录手机网页/登录接口示例.php

@@ -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'); //微信appid,推荐写在配置文件或环境变量
+        $this->secret 	= Config::get('wechat.request.secret'); //微信appid对应secret,推荐写在配置文件或环境变量
+    }
+
+
+	//微信登录
+	public function wechatLogin(){
+		//回调地址
+		$callback = urldecode(input("callback", ''));
+        if ($callback == '') {
+			//跳去欢迎页
+            $callback=(String)url("/index",[],"",true);
+        }
+		Session::set('target_url', $callback);
+		
+        $config = [
+            // 'http' => $this->proxy,
+            'app_id' => $this->app_id,
+            'secret' => $this->secret,	
+            'oauth' => [
+                // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
+                '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); // 跳转到 user/profile
+			return;
+		}	
+		$callback 	= (String)url("Login/wechatGetInfo",['callback'=>$param_callback],"",true);
+        $config = [
+			// 'http' => $this->proxy,
+            'app_id' => $this->app_id,
+            'secret' => $this->secret,	
+            'oauth' => [
+                // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
+                'response_type' => 'array',
+                'scopes' => ['snsapi_userinfo'],
+                // 'callback' => ,
+                'callback' => $callback,
+            ],
+        ];
+        $app = Factory::officialAccount($config);
+        $oauth = $app->oauth;
+        // 获取 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); // 跳转到 user/profile
+	}
+	
+	//整合登录链接
+	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;
+	}
+}