原生php 实现微信授权登录

 
不依赖任何框架,原生php 实现微信授权登录:
 
只需要两个文件:
 
  1. index.php
  2. weixin.class.php

 
index.php代码如下:
 
<?php

session_start();

if($_SESSION['openid']){
exit('已经授权登录过了。。。');

} {
include_once "weixin.class.php";
$wx_login = new Wxlogin();
$userinfo = $wx_login->getUserInfo();

if($userinfo['openid']){

$_SESSION['openid'] = $userinfo['openid'];

var_dump($userinfo);

} else {
exit('授权失败');
}
}

weixin.clsss.php 代码如下(自行替换当中 app_id 和 app_key 和 授权回调地址):
 
<?php
class Wxlogin{

//private $login_page_url = "https://open.weixin.qq.com/connect/qrconnect?";//微信登录界面
private $login_page_url = "https://open.weixin.qq.com/connect/oauth2/authorize?";//微信登录界面
private $get_accessToken_url = "https://api.weixin.qq.com/sns/oauth2/access_token?";//后去token的url
//private $get_openId_url = 'https://graph.qq.com/oauth2.0/me';//获取openid的url
private $get_user_info = "https://api.weixin.qq.com/sns/userinfo?";//获取用户信息的url
private $app_id = '';
private $app_key = '';
public $redirect_url = '';
private $access_token;
//QQ登录页面
private function get_wx_login_page()
{
$state = md5(rand(1,1000));
$query = [
'appid' => $this->app_id,
'redirect_uri' => $this->redirect_url,
'response_type' => 'code',
'scope' => 'snsapi_userinfo',
'state' => $state,
];
$_SESSION['state'] = $state;//保存state验证

$url= $this->login_page_url.http_build_query($query).'#wechat_redirect';

header("Location:$url");
exit;
}

//获取access_token
private function get_code()
{
//获取code
@$code = $_GET['code'];
if(!$code){
$this->get_wx_login_page();
}
$state = $_GET['state'];
/*
if($state != $_SESSION['state']){
echo "state is wrong!";
exit;
}
*/
$_SESSION['state'] = null;
$query = [
'grant_type' => 'authorization_code',
'code' => $code,
'secret' => $this->app_key,
'appid' => $this->app_id,
];

return $this->get_curl($this->get_accessToken_url, http_build_query($query));

}

//获取token
private function get_token_info()
{
//获取access_token
/* {
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
} */
$data = json_decode($this->get_code(),true);
//参数组装数组


$this->access_token = $data["access_token"];

$array = array(
'access_token' => $data["access_token"],
'openid' => $data['openid'],
);

return $this->get_curl($this->get_user_info, http_build_query($array));
}

//获取openid&&获取用户信息
public function getUserInfo()
{
$data = $this->get_token_info();


$data = json_decode($data, true);
$data['access_token'] = $this->access_token;
return $data;
}

//curl GET请求
private function get_curl($url,$query)
{
$url_request = $url.$query;
$curl = curl_init();

//设置抓取的url
curl_setopt($curl, CURLOPT_URL, $url_request);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出.
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//执行命令
$data = curl_exec($curl);
//关闭URL请求
curl_close($curl);
return $data;

}
}

 
以上,有问题留言回复。。
 
 
 

0 个评论

要回复文章请先登录注册