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日

相关文章

  • ASP.NET MVC使用异步Action的方法

    以下是“ASP.NET MVC使用异步Action的方法”的完整攻略: 什么是异步Action 在ASP.NET MVC中,我们可以使用异步Action来提高应用程序的性能和可伸缩性。异步Action可以在执行长时间运行的操作时释放线程,从而提高应用的吞吐量。 使用异步Action的步骤 以下是使用异步Action的步骤: 步骤1:创建异步Action 首先…

    C# 2023年5月12日
    00
  • C#构建树形结构数据(全部构建,查找构建)

    C#构建树形结构数据(全部构建,查找构建) 前言 树形结构数据在实际开发中非常常见,具有分级、层级、分类等特点,通常应用于目录结构、组织机构、商品分类等场景。本文将介绍如何使用C#构建树形结构数据,包括全部构建和查找构建两种方案。 全部构建 步骤一:定义数据结构 我们假设有一个数据表,包含id、parentId、name三个字段,其中id为自增主键,pare…

    C# 2023年5月31日
    00
  • 用juery的ajax方法调用aspx.cs页面中的webmethod方法示例

    使用jQuery的ajax方法调用aspx.cs页面中的WebMethod方法需要经过以下步骤: 在aspx.cs文件中创建一个公共静态方法,并使用WebMethod属性进行标记。这个方法将被用来提供JSON格式数据给前端。 以下是一个简单的示例: using System.Web.Services; using System.Web.Script.Seri…

    C# 2023年6月1日
    00
  • C#实现定时关机小应用

    针对” C#实现定时关机小应用”,我们可以使用System.Diagnostics 命名空间中的Process类来实现。 首先,我们需要一个定时器来控制时间: using System.Windows.Forms; using System.Diagnostics; namespace ShutdownApp { public partial class M…

    C# 2023年6月1日
    00
  • C# winfrom 模拟ftp文件管理实现代码

    为实现C# WinForm中FTP文件管理,需要通过FTP协议连接到FTP服务器,并进行文件的上传、下载、删除和重命名等操作。这里提供一份完整攻略,包括相关API的使用和示例代码的实现。 连接FTP服务器 C# WinForm最常使用的.NET类库是System.Net,其中有一个FtpWebRequest类可以用于创建FTP请求,实现对FTP服务器的连接。…

    C# 2023年6月1日
    00
  • 手把手教你AspNetCore WebApi认证与授权的方法

    手把手教你AspNetCore WebApi认证与授权的方法 在ASP.NET Core WebApi中,认证和授权是非常重要的安全措施。在本攻略中,我们将介绍如何在ASP.NET Core WebApi中实现认证和授权,并提供两个示例说明。 步骤一:添加认证和授权中间件 首先,需要在ASP.NET Core WebApi中添加认证和授权中间件。可以使用以下…

    C# 2023年5月17日
    00
  • C# 连接本地数据库的实现示例

    下面是详细的攻略: C# 连接本地数据库的实现示例 在 C# 中,连接本地数据库需要使用 .Net Framework 中的 ADO.NET 技术。 常见的本地数据库包括 Access 和 SQL Server Express, 下面将以连接 SQL Server Express 为例,讲解如何连接本地数据库。 使用 SQL Server Managemen…

    C# 2023年6月1日
    00
  • c# 配置文件App.config操作类库的方法

    以下是关于”C# 配置文件 App.config 操作类库的方法”的详细攻略。 什么是 App.config 文件? App.config 文件是 C#/.NET 应用程序的配置文件,它包含应用程序的设置和属性。这些设置可以在运行时或在设计时通过 System.Configuration 命名空间来访问和修改。App.config 文件的格式是 XML。 如…

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