当前位置: 首页 > news >正文

php 微信网页授权代码,php 微信公众平台OAuth2.0网页授权,获取用户信息代码类封装demo...

* 获取微信用户信息

* @author: Lucky hypo*/

classGetWxData{private $appid = 'xxx';private $appsecret = 'xxxxxx';/**

* 1、获取微信用户信息,判断有没有code,有使用code换取access_token,没有去获取code。

* @return array 微信用户信息数组*/

public functionget_user_all(){if (!isset($_GET['code'])){//没有code,去微信接口获取code码

$callback = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];//微信服务器回调url,这里是本页url

$this->get_code($callback);

}else {//获取code后跳转回来到这里了

$code = $_GET['code'];$data = $this->get_access_token($code);//获取网页授权access_token和用户openid

$data_all = $this->get_user_info($data['access_token'],$data['openid']);//获取微信用户信息

return $data_all;

}

}/**

* 2、用户授权并获取code

* @param string $callback 微信服务器回调链接url*/

private function get_code($callback){$appid = $this->appid;$scope = 'snsapi_userinfo';$state = md5(uniqid(rand(), TRUE));//唯一ID标识符绝对不会重复

$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect';header("Location:$url");

}/**

* 3、使用code换取access_token

* @param string 用于换取access_token的code,微信提供

* @return array access_token和用户openid数组*/

private function get_access_token($code){$access_token_file = './access_token.txt';$get_data_status = false;$data = file_get_contents($access_token_file);if($data){$data = json_decode($data,true);$expire_time = isset($data['expire_time'])?$data['expire_time']:'0';if(time() > ($expire_time - 600)){$get_data_status = true;

}

}else{$get_data_status = true;

}if($get_data_status == true){$appid = $this->appid;$appsecret = $this->appsecret;$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';$user = json_decode(file_get_contents($url));if (isset($user->errcode)) {echo 'error:' . $user->errcode.'


msg :' . $user->errmsg;exit;

}$data = json_decode(json_encode($user),true);//返回的json数组转换成array数组

$data['expire_time'] = time()+$data['expires_in'];file_put_contents($access_token_file,json_encode($data));

}return $data;

}/**

* 4、使用access_token获取用户信息

* @param string access_token

* @param string 用户的openid

* @return array 用户信息数组*/

private function get_user_info($access_token,$openid){$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';$user = json_decode(file_get_contents($url));if (isset($user->errcode)) {echo 'error:' . $user->errcode.'


msg :' . $user->errmsg;exit;

}$data = json_decode(json_encode($user),true);//返回的json数组转换成array数组

return $data;

}//对外开放,获取access_token

public functionget_access_token_open(){if (!isset($_GET['code'])){//没有code,去微信接口获取code码

$protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://": "http://";//$callback = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];//微信服务器回调url,这里是本页url

$callback = $protocol.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];//微信服务器回调url,这里是本页url

$this->get_code($callback);

}else {//获取code后跳转回来到这里了

$code = $_GET['code'];$data = $this->get_access_token($code);//获取网页授权access_token和用户openid

return $data;

}

}

}//使用方法:

$getWxData = newGetWxData();if(isset($_GET['model']) && $_GET['model'] == 'get_access_token'){$data = $getWxData->get_access_token_open();echo(json_encode($data));exit();

}else{$data = $getWxData->get_user_all();echo '

';print_r($data);exit();

}//访问链接:

//http://127.0.0.1/get_wx_data.php

//http://127.0.0.1/get_wx_data.php?model=get_access_token

?>

相关文章:

  • game.php403,wm_game_demining.php
  • php 对象集合 查询,ThinkPHP5.1:数组对象查询的使用
  • php5.1.4,apache2.2.2+php5.1.4+my5.0
  • php x63 157 162,php – 这个代码是漏洞吗?这段代码是什么?
  • event类型 php,系统文件说明c_system_event.php事件相关函数的函数说明列表
  • matlab remez函数作用,remez函数怎么用 MATLAB中remezord的功能,格式,说明,举例设计一个滤波器?...
  • ema matlab实现,用vba实现EMA函数
  • centos上mysql乱码6,centos6.5和centos7.5统一字符集为zh_CN.UTF-8解决系统和MySQL数据库乱码问题...
  • php odbc 中文,ODBC - [ php中文手册 ] - 在线原生手册 - php中文网
  • matlab频率采样法设计FIR滤波器,用频率采样法设计FIR滤波器
  • php 单独验证码可以显示_但调用验证码时无法显示,ThinkPHP(SAE)调用验证码不能正确调用验证码...
  • php中转源码,PHP 转 ASCII
  • php+5+windows,PHP5终极安装——PHP5+IIS5+Windows2000Server
  • php网站目录禁止访问,禁止访问Apache目录
  • php上传打包下载,php在线打包下载
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • 10个确保微服务与容器安全的最佳实践
  • github指令
  • Median of Two Sorted Arrays
  • mysql外键的使用
  • Python学习之路13-记分
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vim 折腾记
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 《天龙八部3D》Unity技术方案揭秘
  • Mac 上flink的安装与启动
  • RDS-Mysql 物理备份恢复到本地数据库上
  • #### go map 底层结构 ####
  • #Linux(帮助手册)
  • #pragma multi_compile #pragma shader_feature
  • ${ }的特别功能
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (多级缓存)多级缓存
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .Net6使用WebSocket与前端进行通信
  • .NET框架
  • .net下简单快捷的数值高低位切换
  • .NET中winform传递参数至Url并获得返回值或文件
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • .sdf和.msp文件读取
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • @RunWith注解作用
  • [ Linux ] git工具的基本使用(仓库的构建,提交)
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • [Android实例] 保持屏幕长亮的两种方法 [转]