(实用篇)微信网页授权(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 二维数组排序保持键名不变的方法

    对二维数组指定的键名排序,首先大家想到的是array_multisort函数,关于array_multisort的用法我之前也写了一篇废话不多言,我们看个实例:<?php$data = array( 1001 => array( 'age' => 22, ...

    2022年6月16日
    0173
  • PHP入门指南:SQL注入。

    PHP入门指南:SQL注入随着互联网的快速发展,Web应用程序越来越普及,其安全性也成为了人们极为关注的问题。SQL注入是 Web应用程序中的一种常见攻击方式,它可以导致严重的安全问题,从而对 Web应用程序的正常运...

    2023年5月22日
    01
  • PHP中如何进行自动化运营和数据挖掘。

    随着互联网的不断发展,越来越多的企业开始注重自动化运营和数据挖掘。PHP作为一种常用的服务器端编程语言,也可以通过一些工具和技术来实现自动化运营和数据挖掘。本文将介绍PHP中如何进行自动化运营和数据挖掘...

    2023年5月22日
    03
  • 关于PHP数组的详解

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

    2018年3月5日
    0158
  • php的可变函数

    说明:就是一个变量如果加上括号,PHP的系统会解析成函数,这个变量的值必须是一个函数的名,否则报错,未定义了。 案例

    2018年4月5日
    0215
  • PHP实现邮件推送功能的技巧。

    随着互联网的不断发展,电子邮件已经成为了人们生活和工作不可或缺的一部分。许多网站和应用程序都需要发送邮件来与用户进行交互或发送重要的信息。在使用PHP编写网站和应用程序时,邮件推送功能是非常重要的一部...

    2023年5月28日
    01
  • 探索PHP 生命周期

    学习 PHP 生命周期PHP的生命周期是一个很复杂的过程,其生命周期应该被热衷于使用它的人所掌握。主要内容如下😛HP 启动。如果运行的是 CLI 或者 FPM,它将运行 C main()。如果作为模块运行到网络服务器,像使用 a...

    2022年6月12日 PHP自学教程
    0135
  • PHP使用SMTP协议和SSL加密方式发送邮件的方法。

    随着电子邮件的普及和需求增加,邮件服务已经成为现代通信的重要组成部分。很多网站和应用程序都需要发送邮件,因此掌握发送邮件的技巧和方法就变得至关重要。本文将着重介绍如何使用PHP通过SMTP协议和SSL加密方...

    2023年5月23日
    019

联系我们

QQ:951076433

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