php版微信公众平台之微信网页登陆授权示例

下面是“PHP版微信公众平台之微信网页登录授权示例”的详细攻略。

1. 获取微信公众平台的AppID和AppSecret

在使用微信公众平台的功能之前,需要先申请并获取相应的AppID和AppSecret,你可以通过微信公众平台-开发-基本设置获取。

2. 配置网页授权回调域名

在公众号开发者中心-网页授权获取用户基本信息中配置授权回调链接域名。

3. 搭建本地开发环境

可以使用XAMPP搭建本地开发环境,其中包括Apache服务器和PHP环境。

4. 程序代码实现

第一步:获取并验证请求中的code:

if(isset($_GET['code'])){   //判断是否有code参数
    $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".APPID."&secret=".APPSECRET."&code=".$_GET['code']."&grant_type=authorization_code"; //拼接请求access_token的url
    $res=https_request($url);
    $res=json_decode($res,true);

    if(isset($res['errcode'])){   //判断请求是否有错误
        echo "<script>alert('获取access_token异常')</script>";
    }else{
        $access_token=$res['access_token'];
        $openid=$res['openid'];   //从返回结果中获取openid
        //进行非空验证,并将openid和access_token存放到session中
        if(!empty($openid)&&!empty($access_token)){
            $_SESSION['openid']=$openid;
            $_SESSION['access_token']=$access_token;
            //授权成功,跳转到个人信息页面
            header("Location: https://XXX.XXX.XXX/userinfo.php");
            exit; 
        }
    }
}elseif(isset($_GET['state'])){ //如果请求中带着state参数,说明用户取消了授权请求
    echo "<script>alert('用户取消授权登录')</script>";
}else{  //去微信服务器请求授权登录
    $redirect_uri=urlencode("https://XXX.XXX.XXX/oauth.php");
    $scope="snsapi_userinfo";
    $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);
    exit;
}

第二步:引导用户扫码,确认登录:

$redirect_uri=urlencode("https://XXX.XXX.XXX/oauth.php");
$scope="snsapi_userinfo";
$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);
exit;

示例一:获取用户昵称和头像

第一步:从session中获取openid和access_token:

$openid=$_SESSION['openid'];
$access_token=$_SESSION['access_token'];

第二步:通过微信提供的API接口获取用户信息:

$url="https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";  //拼接获取用户信息的url
$res=https_request($url);
$res=json_decode($res,true);
if(isset($res['errcode'])){  //判断请求是否有错误
    echo "<script>alert('获取用户信息异常')</script>";
}else{
    $nickname=$res['nickname'];
    $avatar=$res['headimgurl'];
}

示例二:使用微信JS-SDK上传图片

第一步:引入JS-SDK:

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

第二步:通过服务器端接口获取JS-SDK配置信息:

//获取JS-SDK配置信息
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".APPID."&secret=".APPSECRET;
$res=https_request($url);
$res=json_decode($res,true);
$access_token=$res['access_token'];

//获取JS-SDK的ticket
$url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";
$res=https_request($url);
$res=json_decode($res,true);
$ticket=$res['ticket'];

//构建签名算法所需参数
$noncestr=create_noncestr();
$timestamp=time();
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

//进行签名
$data=array(
    "noncestr"=>$noncestr,
    "jsapi_ticket"=>$ticket,
    "timestamp"=>$timestamp,
    "url"=>$url
);
$signature=create_signature($data);

第三步:使用JS-SDK中的chooseImage功能上传图片:

wx.config({
    debug: false,
    appId: '<?php echo APPID;?>',
    timestamp: <?php echo time();?>,
    nonceStr: '<?php echo $noncestr;?>',
    signature: '<?php echo $signature;?>',
    jsApiList: [
        'chooseImage',
        'uploadImage',
        'previewImage',
        'downloadImage'
    ]
});
wx.ready(function () {
    var images = {
        localId: [],
        serverId: []
    };

    // 选择图片
    document.querySelector("#chooseImage").onclick = function(){
        wx.chooseImage({
            count: 1,
            sizeType: ['original', 'compressed'],
            sourceType: ['album', 'camera'],
            success: function (res) {
                images.localId = res.localIds;
                previewImage(images.localId[0]);
            }
        });
    };

    // 预览图片
    function previewImage(url){
        wx.previewImage({
            current: url,
            urls: images.localId
        });
    }

    // 上传图片
    function uploadImage(url){
        wx.uploadImage({
            localId: images.localId,
            isShowProgressTips: 1,
            success: function (res) {
                images.serverId = images.serverId.concat(res.serverId);
                document.querySelector("#serverResult").innerHTML = '上传成功,服务器端media_id为:' + res.serverId;
            }
        });
    }
});

以上就是关于“PHP版微信公众平台之微信网页登录授权示例”的完整攻略,希望能帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php版微信公众平台之微信网页登陆授权示例 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 详解C# 结构体

    详解C#结构体 结构体(Struct)是C#中的一种数据类型,与类相似,能够封装数据和行为。本文将从以下几个方面进行详解: 结构体的定义和特点 结构体的实例化和使用方法 结构体和类的区别和联系 结构体的定义和特点 结构体的定义方式与类类似,但使用struct关键字。 以下是一个定义结构体的示例,可以存储一个人的姓名和年龄: struct Person { p…

    C# 2023年5月15日
    00
  • c#互斥锁Mutex类用法介绍

    c#互斥锁Mutex类用法介绍 什么是互斥锁? 在多线程编程中,为了防止多个线程同时访问共享资源导致数据混乱的问题,需要用到互斥锁。互斥锁是一种同步方式,它保证在同一时间只有一个线程可以访问共享资源。 Mutex类的用法 在C#中,可以通过Mutex类实现互斥锁。使用Mutex类的步骤如下: 创建一个Mutex对象,可以通过Mutex类的构造函数来创建: M…

    C# 2023年5月15日
    00
  • 磊科路由器智能QoS配置步骤分享

    磊科路由器智能QoS是一种网络质量服务,可以帮助您优化网络带宽,提高网络性能。本攻略将深入探讨如何配置磊科路由器智能QoS,并提供两个示例说明。 配置磊科路由器智能QoS 配置磊科路由器智能QoS的步骤如下: 1. 登录路由器管理界面 首先,您需要登录到磊科路由器的管理界面。在浏览器中输入路由器的IP地址,然后输入用户名和密码进行登录。 2. 打开QoS设置…

    C# 2023年5月17日
    00
  • C#使用RestClient调用Web API

    接下来我就为你介绍C#使用RestClient调用Web API的完整攻略,包含以下几个步骤: 添加引用 在使用RestClient调用Web API时,首先需要添加NuGet包,可以在Visual Studio中打开解决方案,右击项目,选择“管理NuGet程序包”选项,搜索“RestSharp”,安装后即可使用。 创建RestClient对象 通过在代码中…

    C# 2023年5月15日
    00
  • C#中类成员的定义的修饰关键词知识点总结

    下面是关于”C#中类成员定义的修饰关键词知识点总结”的详细攻略。 什么是修饰关键词 在C#中,修饰关键词可以用于控制类成员的访问权限、性能等方面。常用的修饰关键词有以下几种: public:公共的,所有代码都可以访问。 private:私有的,只有当前类能够访问。 protected:受保护的,只有当前类和子类能够访问。 internal:内部的,只有同一程…

    C# 2023年6月1日
    00
  • C#面向对象的23种设计模式介绍

    《C#面向对象的23种设计模式介绍》是一篇系统性的介绍C#中常见23种设计模式的文章。下面我将为大家详细讲解这篇文章的完整攻略: 一、前言 文章先介绍了设计模式的概念和作用,以及在软件开发中为什么需要设计模式。同时也会提醒读者,设计模式仅仅是一种思想上的借鉴,不能盲目使用。 二、设计模式的分类 文章接着介绍了设计模式的分类方式,分为三类:创建型模式、结构型模…

    C# 2023年5月31日
    00
  • Asp.net Core项目配置HTTPS支持

    下面是Asp.net Core项目配置HTTPS支持的完整攻略。 配置HTTPS支持 在项目中安装Microsoft.AspNetCore.HttpsPolicy包 PM> Install-Package Microsoft.AspNetCore.HttpsPolicy 修改ConfigureServices方法,在其中添加使用HttpsRedirec…

    C# 2023年6月3日
    00
  • 列举ASP.NET页面之间传递值的几种方式

    ASP.NET页面之间传递值的几种方式: 1. 查询字符串(Query String) 这是最常见的一种方式,通过URL传递参数,例如: Response.Redirect("http://www.example.com/Page2.aspx?user_id=12345"); 在Page2.aspx页面中获取传递的参数: string u…

    C# 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部