微信Oauth授权登录(可授权给多个网页)

  • 2016-09-16
  • 845
  • 0

众所周知,我们在开发微信某些功能时会使用到微信的授权登录,那么当我们页面一多或者需要在多个域名下该如何处理?

微信公众平台OAuth2.0授权详细步骤如下:

  1. 用户关注微信公众账号。
  2. 微信公众账号提供用户请求授权页面URL。
  3. 用户点击授权页面URL,将向服务器发起请求
  4. 服务器询问用户是否同意授权给微信公众账号(scope为snsapi_base时无此步骤)
  5. 用户同意(scope为snsapi_base时无此步骤)
  6. 服务器将CODE通过回调传给微信公众账号
  7. 微信公众账号获得CODE
  8. 微信公众账号通过CODE向服务器请求Access Token
  9. 服务器返回Access Token和OpenID给微信公众账号
  10. 微信公众账号通过Access Token向服务器请求用户信息(scope为snsapi_base时无此步骤)
  11. 服务器将用户信息回送给微信公众账号(scope为snsapi_base时无此步骤)

图解

sq0

首先我们需要知道,微信授权登录[网页获取用户信息],是针对认证号的,我们可以去微信公众平台后台,左下角的【接口权限】->【网页账号】->【网页授权获取用户基本信息】一栏中查看,是否获得相应的功能。如下图:

sq1

如果有这个权限,那么我们去分配一个域名给它,比如我的是wei.hizmz.com

sq2

下面我们正式开发

通样跟之前一样,我们去群里下载代码(微信Oauth授权登录demo.rar)

1.修改oauth.php中的appid和appsecret(在第11,12行)

2.修改index.php中的appid以及相关域名(可以看代码中的注释),其他的不需要改了

3.修改后上传wxoauth到你的服务器中,比如我的是http://wei.hizmz.com/wxoauth

4.用你的手机访问 你的域名/wxoauth/index.php 如我的是http://wei.hizmz.com/wxoauth/index.php,如下图

sq3

5.点击【确认登录】,如果信息全部修改正确,你会看到下面这个内容,即显示了用户了所有信息字段

sq4

6.用你的手机访问 你的域名/wxoauth/index.php?s=2,域名/getopenid.php 如我的是http://wei.hizmz.com/wxoauth/index.php?s=2,wei.hizmz.com/getopenid.php,[由于刚才已经授权了,那么现在就直接可以进入],显示的信息只有openid,如下图

sq5

如果上面的步骤都逐一实现了,那么我们在以后的开发中,都可以使用下面的方法,下面给出实战demo

【1】使用 http://wei.hizmz.com/wxoauth/index.php?s=1,xxx.com/../xx1.php 的方法获取用户信息

比如我A.com/test/A.php中想要用到用户的信息,那么我应该去去用请求用户信息uinfo的方式[即1],于是,我在A.com/testA/index.php中写如下代码

<?php

header('location:http://wei.hizmz.com/wxoauth/index.php?s=1,A.com/testA/A.php');

?>

然后我们的A.com/testA/A.php 中应该参考wxoauth中那个showinfo.php的写法,如下

<?php
$uinfo=json_decode($_GET['uinfo'],true);
$nickname=$uinfo['nickname'];//用户的昵称
//...其他的字段可以看我之前的截图
?>

然后我们让用户访问A.com/testA/index.php就可以使其信息传递到A.php中

【2】使用 http://wei.hizmz.com/wxoauth/index.php?s=2,xxx.com/../xx2.php 的方法获取用户openid

比如我B.com/test/B.php中想要用到用户的openid,那么我应该去去用请求用户openid的方式[即2],于是,我在B.com/testB/index.php中写如下代码

<?php

header('location:http://wei.hizmz.com/wxoauth/index.php?s=2,B.com/testB/B.php');

?>

然后我们的B.com/testB/B.php 中应该参考wxoauth中那个getopenid.php的写法,如下

<?php
$openid=$_GET['openid'];
//下面利用$openid操作
?>

以上就是大概介绍了我写的两种方式 ,用“wxoauth/index.php?s=1,目的php文件地址”或者“http://wei.hizmz.com/wxoauth/index.php?s=2,目的php文件地址”来传递用户信息uinfo或者用户openid。

主要的写法可以参考showinfo.php和getopenid.php


如果仍然有疑问,可扫码关注我的个人微信平台

qqgroup___

评论

还没有任何评论,你来说两句吧