(实用篇)微信网页授权(OAuth2.0) PHP 源码简单实现

提要:

1. 建议对OAuth2.0协议做一个学习。

2. 微信官方文档和微信官网工具要得到充分利用。

比较简单,直接帖源代码了。其中“xxxxxxxxxx”部分,是需要依据自己环境做替换的

/**
  * OAuth2.0微信授权登录实现
  *
  * @author zzy
  * @文件名:GetWxUserInfo.php
  */
 
 // 回调地址
 $url = urlencode("http://www.xxxxxxxxx.com/GetWxUserInfo.php");
 // 公众号的id和secret
 $appid = 'xxxxxxxxx';
 $appsecret = 'xxxxxxxxx';
 session_start();
   
 // 获取code码,用于和微信服务器申请token。 注:依据OAuth2.0要求,此处授权登录需要用户端操作
 if(!isset($_GET['code']) && !isset($_SESSION['code'])){
  echo
  '<a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6c11a252ff1d00c4
  &redirect_uri='.$url.'&response_type=code&scope=snsapi_userinfo&state=
1#wechat_redirect">
  <font style="font-size:30">授权</font></a>';
   
  exit;
 }
  
 // 依据code码去获取openid和access_token,自己的后台服务器直接向微信服务器申请即可
 if (isset($_GET['code']) && !isset($_SESSION['token'])){
  $_SESSION['code'] = $_GET['code'];
   
  $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid.
   "&secret=".$appsecret."&code=".$_GET['code']."&grant_type=authorization_code";
  $res = https_request($url);
  $res=(json_decode($res, true));
  $_SESSION['token'] = $res;
 }
  
 print_r($_SESSION);
  
 // 依据申请到的access_token和openid,申请Userinfo信息。
 if (isset($_SESSION['token']['access_token'])){
  $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$_SESSION['token']['access_token'].
"&openid=".$_SESSION['token']['openid']."&lang=zh_CN";
  echo $url;
  $res = https_request($url);
  $res = json_decode($res, true);
   
  $_SESSION['userinfo'] = $res;
 
 }
  
 print_r($_SESSION);
 
 // cURL函数简单封装
 function https_request($url, $data = null)
 {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
  if (!empty($data)){
   curl_setopt($curl, CURLOPT_POST, 1);
   curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
  }
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($curl);
  curl_close($curl);
  return $output;
 } 
 
 得到正确结果如下:
 
 Array
(
 [code] => 041GZI4l0tvGHg10N75l05FQ4l0GZI42
 [token] => Array
  (
   [access_token] => TWo6w5QMpzTZibu3FPh2k4EdC5bllp4sGeQkC4NbZtj-zti-ctZj1Srr
NL1qGCf2lB1-6o3N7kh2bcxl5bxtQqJEGk1cq12l8CzF40R9XvA
   [expires_in] => 7200
   [refresh_token] => Iz3olCrkqPBOJvSSH2bOKvA09Sjvsp1c8Ltm7MvxxPfQXSbvI_Wo
VmzhjqASzwlMa7TAGgsg3mIJmaHjL7jrJHDqUF1jKbhd6GNDnLtXq0U
   [openid] => ota_XwQ4r_5nioVmshQ
   [scope] => snsapi_userinfo
  )
 
 [userinfo] => Array
  (
   [openid] => ota_XwQ4r_5nioVmshQq
   [nickname] => xx
   [sex] => 1
   [language] => zh_CN
   [city] => xx
   [province] => xx
   [country] => xx
   [headimgurl] => http://wx.qlogo.cn/mmopen/PiajxSqBRaELwee7rhrt2ibnkC1MEnu04WiaW
//rw9FkuPBbGOgnrMbynNoEuxicgXOetW5VqQbTrS4fZDXNvAWsz6GQ/0
   [privilege] => Array
    (
    )
 
  )
 
)

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/1422.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
重蔚的头像重蔚管理团队
上一篇 2016年10月24日 08:36
下一篇 2016年10月24日 09:17

相关推荐

  • 关于PHP数组的详解

     什么是数组 一个标量变量就是一个用来存储数值的命名区域。同样,一个数组就是一个用来存储一系列变量值的命名区域,因此,可以使用数组组织标量变量。 存储在数组中的值称为数组元素。每个数组元素有一个相关的索…

    2018年3月5日
    0158
  • PHP入门指南:PHP和Memcache。

    PHP是一种流行的开源服务器端脚本语言,可以用于动态网站开发和应用程序开发。它可以与许多数据库服务器配合使用,例如MySQL、Oracle和Microsoft SQL Server。除此之外,PHP还可以与Memcache配合使用,提高应用程序…

    2023年5月23日
    02
  • PHP中的HTTP请求和响应头。

    在Web开发中,HTTP请求和响应头是非常重要的概念。它们提供了在客户端和服务器之间传输数据的标准化机制。PHP作为一门流行的Web编程语言,自然也支持HTTP请求和响应。 HTTP请求头是客户端(例如浏览器)发送给服务…

    2023年5月28日
    05
  • PHP与数据库诊断的集成。

    最近几年来,随着数据库使用量的激增,PHP和数据库的配合已成为Web开发中非常重要的一环。PHP是一种开源的编程语言,可以轻松地在任何Web服务器上运行,而数据库则是数据管理系统的核心。但是,数据库在使用过程中…

    2023年5月21日
    02
  • QQ微信授权后怎么取消?腾讯授权管理入口分享

    因为经常参加活动 都是使用QQ或者是微信直接登录了   授权了很多的平台 可能有些朋友担心不安全 小编在这里给大家分享一下   QQ和微信授权管理的入口 朋友们可以取消你们觉得不安全的平台的授权   …

    2018年3月27日
    0389
  • 如何使用PHP和Blockchain构建去中心化应用。

    随着区块链技术的发展,越来越多的应用开始向去中心化转型,以实现更高的安全性和稳定性。PHP是一种流行的服务器端脚本语言,它广泛应用于网站开发以及与数据库的交互。在本文中,我们将探讨如何使用PHP和Blockchai…

    2023年5月28日
    00
  • PHP实现邮件系统的用户管理功能。

    随着网络通信的发展,邮件已成为人们日常生活和工作中最常用的通讯工具之一。随着电子邮件的普及,相应的邮件系统不断涌现,使得我们可以轻松地进行邮件的收发、存储和管理等操作。而PHP作为一种网页开发语言,也在…

    2023年5月30日
    00
  • (实用篇)php无限遍历目录

    使用的函数有: isset()判断某个变量是否定义 chdir() 将当前目录改变为指定的目录。 opendir() 打开目录。 readdir()读取目录。 getcwd()。获取当前目录。 还用到了for  if  GET传值 大概就这些: 下面是…

    2016年10月24日
    0292

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息