(实用篇)微信网页授权(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

(0)
上一篇 2016年10月24日 08:36
下一篇 2016年10月24日 09:17

相关推荐

  • (实用篇)PHP JSON数组与对象的理解

      在PHP后端和客户端数据交互的过程中,JSON数据中有时格式不定,一会儿是数组,一会儿是对象,弄得客户端开发人员要崩溃的感觉。 因此,前后端相关人员先对PHP的json_encode函数原理有必要的了解是最重要的一...

    2016年10月27日
    0690
  • PHP资源--RESOURCE

    说明:就是引用PHP外部的内容,这个时候的类型的就是资源。资源是通过专门的函数来建立和使用的。...

    2017年11月28日
    0670
  • 关于二进制的原码、补码、反码详解

    说明:在计算机中cpu操作的是补码,原因就是整数分负数和正数 二进制的最大位:0是正数,1是负数 正数的三码:都一样 负数的反码:按位取反,符号位不变。 负数的补码:在反码基础加1 $a & $b: $a | $b: ~ -$a...

    2017年12月11日
    0650
  • 重蔚php学习第三十二天——利用each和list遍历php数组

    语法 each array each (array $array) 表示将数组中当前元素的信息保存到某个数组中,如果得不到元素信息,返回false,能得到就返回数组 返回的这个数组包含4个数组元素 [1]=当前元素的值 [‘value’]=当前元素的值 [0...

    2017年10月9日
    0610
  • (安全篇)PHP四大安全策

    一、文件系统安全 php如果具有root权限,且在脚本中允许用户删除文件,那么用户提交数据,不进行过滤,就非常有可能删除系统文件 <!--?php // 从用户目录中删除指定的文件 $username = $_POST['user_submitted_na...

    2016年10月17日
    0630
  • php基本语法之运算符

    PHP基本语法 一、运算符 1、算术运算符 +、-、*、/、% 2、赋值运算符 =、+=、-=、*=、/=、%=、.= 3、比较运算符 、<、==、!=、<=、>=、===、!== 4、错误控制运算符 @ 5、自加自减运算符 ++、-- 6、字符串运...

    2017年9月25日
    0740
  • php字符串连接符

    说明:通过(.)或(.=)进行字符串的拼接 //字符串连接符 $name = 'admin'; echo '您好!'.$name.'重蔚自留地'; echo '您好!.$name重蔚自留地'; echo ' '; //.=:链接后再赋值 $user = 'admin'; $user .= '888'; //相当...

    2017年12月7日
    0660
  • 示例PHP MemCached高级缓存应用代码

    Memcache常用方法 Memcache::add — 添加一个值,如果已经存在,则返回false Memcache::addServer — 添加一个可供使用的服务器地址 Memcache::close — 关闭一个Memcache对象 Memcache::connect — 创建一个Memcache对...

    2022年6月11日
    0250

发表评论

您的电子邮箱地址不会被公开。