一、微信授权使用的是OAuth2.0授权的方式。主要有以下简略步骤:

  第一步:用户同意授权,获取code

  第二步:通过code换取网页授权access_token

  第三步:拉取用户信息(需scope为 snsapi_userinfo)

  微信网页授权开发文档请看官网:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

二、我这里直接出代码了,一共2个文件。

//其它文件调用UserInfo.php的时候注意namespace。
use wx\userInfo\UserInfo;
include 'UserInfo.php';
$wx = new UserInfo();
$data = $wx->get_user_all();

1配置文件config.php

 <?php
namespace wx\wxConfig;
/**
* 微信请求相关配置类
*/
class ConfigTool{
/**
* 微信配置参数
* @return array 配置参数
*/
public function Config(){
// appID
$config['appid'] = '';
// appSecret
$config['appsecret'] = '';
// 微信回调链接地址(本页)
$config['redirect_uri'] = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
// 用户授权并获取code的url地址
$config['authorize_url'] = 'https://open.weixin.qq.com/connect/oauth2/authorize';
// 获取openid和access_toke的url地址
$config['access_token_url'] = 'https://api.weixin.qq.com/sns/oauth2/access_token';
// 获取拉取用户信息(需scope为 snsapi_userinfo)的url地址
$config['userinfo_url'] = 'https://api.weixin.qq.com/sns/userinfo';
// 本文件夹所在的url路径
$config['self_path'] = 'http://'.dirname($_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); return $config;
}
}
?>

2.获取用户信息文件UserInfo.php

 <?php
namespace wx\userInfo;
use wx\wxConfig\ConfigTool;
include 'config.php';
/**
* 获取微信用户信息
* $wx = new UserInfo();
* $data = $wx->get_user_all();
*/
class UserInfo{ private $weixin_config = array();
public function __construct() {
$re = new ConfigTool;
$this->weixin_config = $re->Config(); //载入配置文件
}
/**
* 获取微信用户信息
* @return array 微信用户信息数组
*/
public function get_user_all(){
if (!isset($_GET['code'])){//没有code,去微信接口获取code码
$callback = $this->weixin_config['redirect_uri'];//服务器返回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;
}
} /**
* 1、用户授权并获取code
* @param string $callback 微信服务器回调链接url
*/
private function get_code($callback){
$appid = $this->weixin_config['appid'];
$scope = 'snsapi_userinfo';//snsapi_base只能获取access_token和openID,snsapi_userinfo可以获取更详细的用户资料,比如头像、昵称、性别等
$state = md5(uniqid(rand(), TRUE));//唯一ID标识符绝对不会重复
$url = $this->weixin_config['authorize_url'].'?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect';
header("Location:$url");
} /**
* 2、使用code换取access_token
* @param string 用于换取access_token的code,微信提供
* @return array access_token和用户openid数组
*/
private function get_access_token($code){
$appid = $this->weixin_config['appid'];
$appsecret = $this->weixin_config['appsecret'];
$url = $this->weixin_config['access_token_url'].'?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.'<hr>msg :' . $user->errmsg;
exit;
}
$data = json_decode(json_encode($user),true);//返回的json数组转换成array数组
return $data;
} /**
* 3、使用access_token获取用户信息
* @param string access_token
* @param string 用户的open id
* @return array 用户信息数组
*/
private function get_user_info($access_token,$openid){
$url = $this->weixin_config['userinfo_url'].'?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';
$user = json_decode(file_get_contents($url));
if (isset($user->errcode)) {
echo 'error:' . $user->errcode.'<hr>msg :' . $user->errmsg;
exit;
}
$data = json_decode(json_encode($user),true);//返回的json数组转换成array数组
return $data;
} } ?>

 三、觉得两个文件多,也可以用一个文件类封装。场景不同,喜欢哪个用哪个。

http://www.cnblogs.com/hiit/p/8669361.html

PHP微信公众平台oauth2.0网页授权登录类的封装demo的更多相关文章

  1. 微信公众平台OAuth2.0网页授权

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一. ...

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

    一.这个文件微信授权使用的是OAuth2.0授权的方式.主要有以下简略步骤: 第一步:判断有没有code,有code去第三步,没有code去第二步 第二步:用户同意授权,获取code 第三步:通过co ...

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

    get_wx_data.php <?php /** * 获取微信用户信息 * @author: Lucky hypo */ class GetWxData{ private $appid = ' ...

  4. 微信公众平台oauth2.0网页授权参考资料

    http://www.wangwenxiao.com/weixin/wxgzptoauth2_0wysq_12.html

  5. C#-MVC开发微信应用(2)--OAuth2.0网页授权

    微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使用这个的时候失败了或者无法理解其内容,希望我出个教程详细讲解一下,于是便有了这篇文章. 一. ...

  6. 用Chrome查看微信访问需要OAuth2.0网页授权的页面

    在PC浏览器打开某网站页面提示页面错误,是因为进行了OAuth2.0网页授权 有以下限制, 1.必须在微信打开 2.微信页面授权 其中第一步比较容易实现,修改下ua(user-agent),让其携带“ ...

  7. 微信公众平台OAuth2.0授权

    1. 配置授权回调页面域名 进入微信公众平台后台后,依次进入开发者中心-权限表,找到网页授权获取用户基本信息,点击右侧的修改. 授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为: ...

  8. 微信公众号开发(5)---使用开源组件开发公众号OAuth2.0网页授权授权登录

    搞清微信公众号授权登录的步骤步骤,我们的开发就完成了一大步 献上github 地址: https://github.com/Wechat-Group/weixin-java-tools/wiki/MP ...

  9. 微信公众平台开发(71)OAuth2.0网页授权

    微信公众平台开发 OAuth2.0网页授权认证 网页授权获取用户基本信息 作者:方倍工作室 微信公众平台最近新推出微信认证,认证后可以获得高级接口权限,其中一个是OAuth2.0网页授权,很多朋友在使 ...

随机推荐

  1. Netty的并发编程实践5:不要依赖线程优先级

    当有多个线程同时运行的时候,由线程调度器来决定哪些线程运行.哪些等待以及线程切换的时间点,由于各个操作系统的线程调度器实现大相径庭,因此,依赖JDK自带的线程优先级来设置线程优先级策略的方法是错误和非 ...

  2. (二十三)mongodb中group的问题

    今天的工作中我需要从mongodb数据库中查出一定的数据,并排序后返回给前台,数据库表中包含了ruleID,processingID,userID,updateTime等字段.    同一个ruleI ...

  3. ASP.NET WebAPI String 传值问题

    如果我们再WebAPI中定义了只有一个string参数的WebAPI函数,如下所示: [HttpPost] public string TrackBill(string str) { return s ...

  4. json省市县数据源

    {cityData,"Code":""},{"Name":"牡丹江市",","Code": ...

  5. 从html页面加载顺序来更好的理解jquery初始化

    一,html页面加载顺序 1,用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件:2,浏览器开始载入html代码,发现<head>标签内 ...

  6. 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)

    [BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...

  7. 【BZOJ1412】狼和羊的故事(网络流)

    [BZOJ1412]狼和羊的故事(网络流) 题面 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...

  8. spring中aop的注解实现方式简单实例

    上篇中我们讲到spring的xml实现,这里我们讲讲使用注解如何实现aop呢.前面已经讲过aop的简单理解了,这里就不在赘述了. 注解方式实现aop我们主要分为如下几个步骤(自己整理的,有更好的方法的 ...

  9. FPGA阶段性总结及后续博文计划

    之前的博客主要记录了在培训过程中或自己设计小项目时的一些总结,主要涉及通用设计技巧,简单外设接口驱动等.因此内容比较杂,缺乏目的性.考虑设计通用性及提高学习开发效率,后续FPGA设计和博文主要是高带宽 ...

  10. VirtualBox更改默认路径

    我这几天想把所有的文件夹都改成英文的,避免运行一些软件的时候因为中文路径发生不必要的错误,怎么移动虚拟机呢?直接修改名字会出错的,网上很多方法什么改注册表,什么运行一大串命令,真的很麻烦,不过还是找到 ...