关闭

[置顶] 微信第三方网页授权

316人阅读 评论(0) 收藏 举报
分类:

1、需求说明

项目的需求是需要用户从微信进入第三方网页的时候让用户进行授权登录,授权成功后获取用户的基本信息,比如用户的头像,用户的昵称,用户的unionid,用户的openid。
拿到这些获取的信息去数据库对比是否存在此用户,如果存在,表示该用户已在本网站注册过账号,则直接登录;如果不存在此用户则让用户去注册页注册账号,注册也不需要填写名称或者上传头像,就直接用微信中获取到的默认的,只需要用户绑定他的手机号即可。


2、贴上所需链接地址

微信公众平台:点击打开链接



微信开发者文档:点击打开链接


3、首先配置平台基本信息

在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

这个是微信官方文档的解释,我就在这里贴一张路径图,就不做解释了





3、关于网页授权的两种scope的区别说明

这个在微信官方文档上已经写的很详细了我就不做解释了。
个人感觉,用snsapi_userinfo比较好。
因为微信如果要做JSSDK功能,微信页面分享给了其他人,该用户未关注你的服务号授权登录了你的服务号也是可以直接玩的。
但是snsapi_base就是需要用户必须关注你的服务号才可以玩,因为snsapi_base只返回一个openid,你要拿这个openid去获取用户的基本信息的接口,这个接口是要用户关注了你的服务号才可以获取的到。


5、网页授权流程

这里是粘贴的微信服务号上的流程
1、引导用户进入授权页面同意授权,获取code
2、通过code换取网页授权access_token(与基础支持中的access_token不同)
3、如果需要,开发者可以刷新网页授权access_token,避免过期
4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

6、先将代码贴上,在做讲解

<?php

class WechatAction extends Action{
    private static $appid;
    private static $appsecret;
    private static $access_token;
    private static $openid;


    public function __construct(){
        self::$appid = C('APPID');
        self::$appsecret = C('APPSECRET');
        
    }


    /**
     *  获取微信用户的unionid做对比
     *  微信用户的基本信息
     *  用户的Token通过地址栏传递值
     */
    public function login(){
        $userinfo = $this->get_userinfo();
        if($userinfo['subscribe'] === 0){
            $this->errorMSG(1,'您还未关注');
        }elseif($userinfo['errcode'] == 40013){
            $this->errorMSG(2,'系统错误');
        }

        // TODO 获取用户的token基本完成,以下开始实现自己的业务逻辑代码

        /*
        用户的微信是否注册过
        去数据库查取
        注册过直接登录
        未注册就让其注册
        */
    }

    /**
     * 用户同意授权后,获取用户的openid和unionid
     * @return bool|mixed
     */
    public function get_oauth_message(){
        $code = isset($_GET['code']) ? $_GET['code'] : '';
        if(!$code) return false;
        //通过code,换取access_token
        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.self::$appid.'&secret='.self::$appsecret.'&code='.$code.'&grant_type=authorization_code';
        $result = self::request($url);
        if($result){
            $oauthMessage = json_decode($result,true);
            if($oauthMessage){
                self::$access_token = $oauthMessage['access_token'];
                self::$openid = $oauthMessage['openid'];
                return $oauthMessage;
            }
        }
        return false;
    }

    /**
     *  根据openid获取用户的基本信息
     *  unionid	只有将公众号绑定到微信开放平台帐号后,才会出现该字段。
     */
    public function get_userinfo(){
        if($this->get_oauth_message()){
            $url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.self::$access_token.'&openid='.self::$openid.'&lang=zh_CN';
            $result = json_decode(self::request($url),true);
            return $result;
        }
        return false;
    }

    /**
     * @param $url 需要发送请求的URL地址
     * @param $https 是http请求还是https请求
     * @param string $method 是get还是post请求方式
     * @param null $data post请求要带上的数据
     * @return mixed 请求返回结果字符串
     *
     */
    public static function request($url,$https=true,$method='get',$data=null){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不输出在浏览器上,保存在变量中
        if($https === true){
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // 不从证书中检查SSL加密算法是否存在
        }
        if($method === 'post'){
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        }
        $content = curl_exec($ch);//发送请求
        curl_close($ch);//关闭资源
        return $content;
    }

}

以下是代码讲解部分

7、获取code换取access_token

首先要拼接授权的链接地址



拼接好改路径后在微信中打开此链接就是此效果


点击这个确认登录,也就是授权了,这个时候就会跳转到刚才的授权链接地址中填写的redirect_url这个参数值的页面中去,也就是要在这个参数中获取code的参数值,我在代码中的get_oauth_message( )方法就是获取code换取access_token。这个access_token和基础接口中的token不一样,然后就是拿着个access_token去获取用户的信息,就是get_userinfo( )方法中的代码,我不需要第三步,所以就跳过了第三步

8、openidunionid的区别

已经拿到了用户的基本信息,现在对用户的基本信息进行数据库存储啊,还是注册登录操作就看公司的业务需求了,这里说一下openidunionid的区别:

openid是用户针对每个服务号产生的参数值,就是说一个用户对于不同的服务号,产生的openid都不一样。

unionid同一个微信开放平台下的不同应用产生的相同的参数值,就是说当你们公司旗下的服务号不止一个的时候,但是用户来访问你们公司旗下的每一个服务号都会产生不同的openid,这时候怎么标明这个用户的唯一性呢,那就是unionid了,你将你公司所有的服务号都绑定在一个微信开放平台下,那么同一个用户来访问你公司旗下的服务号,产生的unionid都是一样的



1
0
查看评论

微信开放平台之第三方平台代公众号发起网页授权

正式讲解之前我想问一个问题: 微信开放平台第三方平台为什么会出现?或者说微信的开发人员为什么弄出个开放平台的第三方平台出来? 我的理解是:原本公众号开发时只能给一家公司开发,因为配置的网页授权域名只有一个,所以基本上一个公众号只能做一件事情。举个列子,我公司有一个项目,涉及到食品,旅游,购物,我想分...
  • edc0228
  • edc0228
  • 2017-12-02 14:28
  • 3031

微信网页授权流程

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 一、 配置网页授权域名   在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的...
  • j67065
  • j67065
  • 2017-08-30 10:54
  • 2076

|- 微信 -| 网页授权登录

微信:网页授权登录 微信公众平台技术文档之微信网页授权:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 由于本人也是小白一枚,至于所涉及到的原理方面也就不多做解释了,有不懂的话可以直接问度娘!下面我就来说说具...
  • QAC_Boy
  • QAC_Boy
  • 2017-07-02 23:05
  • 1633

微信第三方平台授权流程- java

1. 微信第三方平台的开发,第一步就是公众号的授权,授权成功后第三方凭条才能利用公众号的appid和token获得公众账号额信息,并代替公众账号完成一些功能。  2. 授权的流程,理论图 代码流程, 1》 首先在微信开放平台的官网进行微信第三方平台的开发认证 2》认证通过后,在...
  • dc_123456
  • dc_123456
  • 2017-06-26 14:17
  • 1646

asp.net下微信网页授权

微信网页授权我相信做微信开发的小伙伴都可能遇见过这样的问题1.我们要明白微信网页授权主要是用来做什么? 用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信 息, 进 而实现业务逻辑。 网页授权分以下几步 1. 配置网页授权回调域名 2. 用户同意授权,获取...
  • jiangcsc
  • jiangcsc
  • 2016-10-25 14:33
  • 2281

微信公众号开发《一》OAuth2.0网页授权认证获取用户的详细信息,实现自动登陆

工欲善其事,必先利其器,先看看开发公众号需要准备或了解什么 web开发工具:官方提供的开发工具,使用自己的微信号来调试微信网页授权、调试、检验页面的 JS-SDK 相关功能与权限,模拟大部分 SDK 的输入和输出。下载地址:web开发工具下载 开发文档:https://mp.weixin.qq.co...
  • liaohaojian
  • liaohaojian
  • 2017-04-15 11:58
  • 10374

调用微信OAuth2.0网页授权接口实现用户信息的绑定

在微信网页开发中,可以通过OAuth2.0网页授权机制,来获取用户基本信息,进而实现自己的业务逻辑。 微信官方文档 关于网页授权回调域名的说明 1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的...
  • SakuraMashiro
  • SakuraMashiro
  • 2017-11-09 18:38
  • 1122

微信公众平台OAuth2.0网页授权thinkphp示例

1、配置授权回调页面域名,如 www.haoqtv.com   2、模拟公众号的第三方网页,fn_system.php <?php if(empty($_SESSION['user'])){ header("Location:http://www.a...
  • u012226197
  • u012226197
  • 2016-07-06 17:50
  • 4500

微信网页授权登录

微信网页授权登录 日期:2016-11-14 作者:normanyang 功能:用于纪录微信网页授权步骤(前提条件:公众号为服务号,且通过认证) 微信网页授权api说明网址:https://mp.weixin.qq.com/wiki/4/9ac2e7b1f1d22e9e57260f655382252...
  • u013091013
  • u013091013
  • 2016-11-14 14:33
  • 6787

微信公众平台开发实战Java版之如何网页授权获取用户基本信息

第一部分:微信授权获取基本信息的介绍   我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。 关于网页授权回调域名的说明 1、在微信公众号请求用户网页授权之前,开发者需要先到公众平...
  • andyliulin
  • andyliulin
  • 2016-12-19 15:02
  • 2349
    个人资料
    • 访问:3683次
    • 积分:116
    • 等级:
    • 排名:千里之外
    • 原创:8篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类