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日

相关文章

  • 详解Unity 实现语音识别功能

    详解Unity实现语音识别功能 1. 简介 本文将介绍如何使用Google Cloud Platform中的语音识别API实现Unity中的语音识别功能。语音识别是一项较为先进的技术,能够帮助我们更快捷地输入文字和指令,提高用户体验。Unity目前已经支持语音识别的插件,其中Google Cloud语音识别API是一种流行的实现方式。 2. 准备工作 在开始…

    C# 2023年5月15日
    00
  • 解决DropDownList总是选中第一项的方法

    要解决DropDownList总是选中第一项的问题,需要在HTML和JavaScript的代码中做出对应的改变。具体步骤如下: 原因分析 首先,我们需要明确这个问题的产生原因。DropDownList有一个默认属性selectedIndex,它的默认值是0,也就是默认会选中第一项。如果在后续操作中没有手动修改这个属性的值,那么依旧会选中第一项。因此,要解决这…

    C# 2023年6月1日
    00
  • CommunityToolkit.Mvvm8.1 IOC依赖注入控制反转(5)

      本系列文章导航 https://www.cnblogs.com/aierong/p/17300066.html https://github.com/aierong/WpfDemo (自我Demo地址) 希望提到的知识对您有所提示,同时欢迎交流和指正 作者:aierong出处:https://www.cnblogs.com/aierong     说明 …

    C# 2023年4月22日
    00
  • C#插入图片到Excel表格单元格代码详解

    下面是详细讲解“C#插入图片到Excel表格单元格代码详解”的完整攻略。 简介 在使用C#处理Excel表格的过程中,插入图片是一个常见的需要,本文将讲解如何使用C#代码将图片插入到Excel表格单元格中。 准备工作 在开始之前,需要先检查电脑是否安装了Microsoft Office软件(包括Excel),还需要安装Excel程序集,以便我们可以在C#中使…

    C# 2023年6月6日
    00
  • C# 10分钟完成百度人脸识别(入门篇)

    C#10分钟完成百度人脸识别(入门篇) 简介 百度人脸识别是一项基于人工智能的技术,可以通过照片或视频中的人脸,进行识别、比对,以及人脸库管理等功能。本文主要介绍如何使用C#完成百度人脸识别的入门教程。 步骤 1. 创建百度AI账号 首先,你需要去百度AI开放平台官网注册一个账号,然后创建一个应用,选择人脸识别。在创建应用的时候,记得保存下“App ID”、…

    C# 2023年5月15日
    00
  • C#实现的Win32控制台线程计时器功能示例

    接下来我将为您详细讲解“C#实现的Win32控制台线程计时器功能示例”的完整攻略。 一、简介 本示例将介绍如何使用C#实现的Win32控制台线程计时器功能,通过使用计时器函数实现计时器功能。控制台应用程序是在命令提示符下运行的应用程序,它不像GUI应用程序一样具有可见的用户界面,因此在控制台程序中使用计时器可以很好地控制时间和输出计时信息。 二、使用Win3…

    C# 2023年6月1日
    00
  • 获取asp.net服务器控件的客户端ID和Name的实现方法

    获取 ASP.NET 服务器控件的客户端 ID 和 name,可以采用多种方法。下面提供了两种常用的方法: 方法一:使用<%= %>标记 在 ASP.NET 中,可以使用 <%= %> 标记从服务端代码中注入JavaScript代码,从而获取服务器控件的客户端 ID 和 name。 例如,下面的示例演示了如何使用 <%= %&g…

    C# 2023年6月3日
    00
  • c# 使用Entity Framework操作Access数据库的示例

    下面是详细讲解“c#使用EntityFramework操作Access数据库的示例”的完整攻略: 一、概述 在使用C#编程时,我们常常需要对数据库进行操作。其中较为常见的数据库有MySQL、SQL Server等。而今天我们要介绍的是如何使用EntityFramework操作Access数据库。 EntityFramework是.NET Framework中…

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