(实用篇)微信网页授权(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实现MongoDB数据库分片的方法。

    随着数据量的增加,单个MongoDB实例的存储和处理能力可能会受到限制,导致性能下降。为了更好地处理大量数据,MongoDB提供了分片的功能,在多个服务器上分散数据以提高性能和可用性。PHP作为一种常用的Web编程语言…

    2023年5月21日
    08
  • (实用篇)PHP实现队列及队列原理

    队列说明 队列是一种线性表,按照先进先出的原则进行的: 实现队列 PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 <?php /** * 队列就是这么简单 * * @link */ $array =  array('PHP', 'JAVA'); array…

    2016年10月26日
    0293
  • PHP中如何进行深度强化学习和用户行为分析。

    随着深度学习技术的不断发展,人工智能在各行各业中的应用越来越广泛。在各种编程语言中,PHP作为一种流行的服务器端语言,也可以使用深度强化学习技术进行用户行为分析。深度学习是一种通过对大量数据进行训练,从…

    2023年5月30日
    07
  • PHP入门指南:PHP和Memcache。

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

    2023年5月23日
    02
  • PHP析构函数的小结

    析构函数的最佳实践 我们使用析构函数完成对资源的及时释放   说明 (1)   关于在析构函数中释放资源的问题,如果我们对效率没有很高很特殊的要求,完全可以不使用析构函数. (2)   如果我们不确定代码后面是否…

    2018年4月13日 PHP自学教程
    0190
  • PHP中如何使用第三方授权登录?

    在当今社交化的时代,用户不再满足于传统的注册登录方式,希望可以使用自己已经注册的社交账号直接登录。为了实现这个需求,很多网站都提供了第三方登录的接入。在PHP中,我们可以通过OAuth协议来实现第三方授权登…

    2023年5月17日
    07
  • PHP中的数组操作指南。

    作为一种常用的编程语言,PHP 提供了多种数据类型和操作方式,其中数组是一种非常重要的数据类型。在 PHP 中,数组可以用来存储多个值,并能够进行多种操作和处理。本文将为大家介绍 PHP 中的数组操作指南,帮助大…

    2023年5月23日
    06
  • 分享php500错误怎么看到错误信息。

    在PHP编程中,错误是不可避免的,我们可能会遇到500错误,这种错误通常表示服务器遇到了一个未知的情况,无法完成请求,要查看这个错误的详细信息,我们需要打开PHP的错误报告功能,并查看错误日志文件。 我们需要…

    2024年6月15日
    01

联系我们

QQ:951076433

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