PHP微信公众平台开发高级篇--网页授权接口

网页授权接口类型

  • snsapi_base
  • snsapi_userinfo

一、基础授权

test.php

<?php
/**
 * 网页授权接口
 * 步骤:
 * 1.填写授权回调页面域名,真实环境路径:开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息
 * 2.用户同意沙授权,获取code
 * 3.通过code换取网页授权access_token,与普通access_token是不同的
 * 4.刷新access_token(如果需要)
 * 5.拉取用户信息(需scope为snsapi_userinfo)
 *
 * 网页授权的两种scope的区别:
 * 1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的“用户的openid”的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
 * 2.以snsapi_userinfo为scope发起的网页授权,是用来获取“用户的基本信息”的。但这种授权“需要用户手动同意”,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
 * PS:设置好网页授权的回调域名,需要关闭服务,重启
 * 测试时建议将请求域名通过草料生成二维码
 */
//获取用户的openid
//1.获取code
$appid = 'wxc7991ed87e25dc13';
$redirect_uri = 'http://wx.smallzhou.cn/userInfo.php';//获取code后的跳转地址
$scope = 'snsapi_base';
$state = 'jason';//自定义参数
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";
//跳转
header('location:'.$url);

userInfo.php

<?php
    /**
     * Created by PhpStorm.
     * User: user
     * Date: 2018/7/17
     * Time: 17:04
     */
    //2.获取网页授权access_token
    $appid = 'wxc7991ed87e25dc13';
    $secret = "3c1be9b400aae7042afb78dbd577f206";
    $code = $_GET['code'];
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
    //拉取用户的openid
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $outPut = curl_exec($ch);
    curl_close($ch);
    $arr = json_decode($outPut,true);
    var_dump($arr);
    /*
     access_token:11_PNpVvZCVroQw9HlvB22yma63dgPE0F1KVWgOXZwi8_uZRAdEhp-230kC34VMn3Zbg_8yzOmtqi7hvJ-If0MF5MVPvwhBpXUTjcdf3FySy78
     expires_in:7200
     refresh_token:11_pBaJpvxE6qV93a2vFJv6E2G1VWYOcb4NvLHLLscFLtMa5jGvoA6y8Z2CmFvsuLV3epEgW52rbwKp4aZuC4Gc0QXVr_ebSa6n5VyoJLPslfg
     openid:oL-zT1Hkbx6Zza5Ny4ZZJr3Ze1-U
     scope:snsapi_base
     */

二、高级授权

test.php

<?php
/**
 * 网页授权接口
 * 步骤:
 * 1.填写授权回调页面域名,真实环境路径:开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息
 * 2.用户同意沙授权,获取code
 * 3.通过code换取网页授权access_token,与普通access_token是不同的
 * 4.刷新access_token(如果需要)
 * 5.拉取用户信息(需scope为snsapi_userinfo)
 *
 * 网页授权的两种scope的区别:
 * 1.以snsapi_base为scope发起的网页授权,是用来获取进入页面的“用户的openid”的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)
 * 2.以snsapi_userinfo为scope发起的网页授权,是用来获取“用户的基本信息”的。但这种授权“需要用户手动同意”,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。
 * PS:设置好网页授权的回调域名,需要关闭服务,重启
 * 测试时建议将请求域名通过草料生成二维码
 */
//获取用户基本信息
//1.获取code
$appid = 'wxc7991ed87e25dc13';
$redirect_uri = 'http://wx.smallzhou.cn/userInfo.php';//获取code后的跳转地址
$scope = 'snsapi_userinfo';
$state = 'jason1';//自定义参数
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";
//跳转
header('location:'.$url);

userInfo.php

<?php
    /**
     * Created by PhpStorm.
     * User: user
     * Date: 2018/7/17
     * Time: 17:04
     */
    //2.获取网页授权access_token
    $appid = 'wxc7991ed87e25dc13';
    $secret = "3c1be9b400aae7042afb78dbd577f206";
    $code = $_GET['code'];
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$code."&grant_type=authorization_code";
    //3.拉取用户的openid
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    $outPut = curl_exec($ch);
    curl_close($ch);
    $arr = json_decode($outPut,true);
    /*
     access_token:11_PNpVvZCVroQw9HlvB22yma63dgPE0F1KVWgOXZwi8_uZRAdEhp-230kC34VMn3Zbg_8yzOmtqi7hvJ-If0MF5MVPvwhBpXUTjcdf3FySy78
     expires_in:7200
     refresh_token:11_pBaJpvxE6qV93a2vFJv6E2G1VWYOcb4NvLHLLscFLtMa5jGvoA6y8Z2CmFvsuLV3epEgW52rbwKp4aZuC4Gc0QXVr_ebSa6n5VyoJLPslfg
     openid:oL-zT1Hkbx6Zza5Ny4ZZJr3Ze1-U
     scope:snsapi_base
     */
    //4.获取用户基本信息
    $access_token = $arr['access_token'];
    $openid = $arr['openid'];
    $getUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
    $ch1 = curl_init();
    curl_setopt($ch1,CURLOPT_URL,$getUserInfoUrl);
    curl_setopt($ch1,CURLOPT_RETURNTRANSFER,1);
    $userInfo = curl_exec($ch1);
    curl_close($ch1);
    print_r($userInfo);

猜你喜欢

转载自blog.csdn.net/qq_29627497/article/details/81099364