zoukankan      html  css  js  c++  java
  • 微信开发之获取用户信息

    要想在用户关注微信公众号以后,用户点击一下我们公众号的栏目,授权一下,然后获取到用户的信息,则需要先搞到一个服务器,80端口开放。

    https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842这是官方的教程

    一、OAuth2.0网页授权

    OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站、移动或桌面应用上存储的私密的资源(如用户个人信息、照片、视频、联系人列表),而无需将用户名和密码提供给第三方应用。

    OAuth 2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。

    OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要分享他们的访问许可或他们数据的所有内容。

    新浪微博API目前也使用OAuth 2.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时无此步骤)

    二、下面是我在测试号中的实践:

    1、我的测试号

    2、先在开发中,修改服务器地址,我是弄得阿里云服务器,填写ip地址就行,实际应用中是需要域名的。

    授权回调域名配置规范为全域名并且不带http,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权。

    3、用户授权获取code

    用php获取code值,这个例子在tomcat中实现php也讲了,新建了oauth2.php

    <?php
    if (isset($_GET['code'])){
        echo $_GET['code'];
    }else{
        echo "NO CODE";
    }
    ?>

    请求页面的方式:

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

     这几个参数类型

    应用授权作用域:由于snsapi_base只能获取到openid,意义不大,所以我们使用snsapi_userinfo。
    回调地址:填写为刚才上传后的oauth2.php的文件地址,
    state参数:随便一个数字,这里填1

    跳转到oauth2.php页面,执行

    echo $_GET['code']

    界面上显示的就是code,这时候通过右上角按钮中的复制链接.

    返回一串code:021Lenud2HEBSA047Awd2gSoud2LenuV

    4、使用code换取access_token

    换取网页授权access_token页面的构造方式:

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx332765bf90694ceb&secret=46a71eed6d85def5f340d08a099117e4&code=021Lenud2HEBSA047Awd2gSoud2LenuV&grant_type=authorization_code

    得到如下的json返回

    {
    "access_token":"Qi16XfGDKhgqYmeYFHLg4ys9pJOPWTa-8wW2NyoAlNAjI-Gxzh-Uwvhj9YaMedNsqHPIVWvHYDEmfJmrr3yAjACZ0UDdwZpOFWFJ9FXr0M0",

    "expires_in":7200,

    "refresh_token":"stjo52Ekedc7nt3BjlXpPNCrRl-aUM7BZ5CLmTtP6xvjmwqJRKVfF5cBSMNJL9mSn_-ZgpmlP8kxECeFnAqYdeU_8O9vfhTBbJtsZZpBKqE",

    "openid":"o9frI0xrZAN7AOxqKRNvfRj5RjoY",

    "scope":"snsapi_userinfo"
    }

    5、使用access_token与openid获取用户基本信息

    请求方法:

    https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID

    https://api.weixin.qq.com/cgi-bin/user/info?access_token=66OnujLQWdhK7uJEvFA7LpJROSdOxMYqaHZH8gnTpRrgrxcqdXAB0Sq_vDjHAFII5l68AMUTaDub8ZMKW85a8mIfVSphuCCM8YQGMmrolso&openid=o9frI0xrZAN7AOxqKRNvfRj5RjoY&lang=zh_CN

    结果:

    这是测试接口中的结果

    参考:

    http://www.cnblogs.com/txw1958/p/weixin71-oauth20.html

    http://www.cnblogs.com/zyw-205520/p/3581088.html

    http://www.cnblogs.com/txw1958/p/weixin-get-user-basic-info.html

  • 相关阅读:
    剑指OFFER——顺时针打印矩阵
    剑指OFFER——合并两个有序的链表
    剑指OFFER——正则表达式匹配
    剑指OFFER——调整数组顺序使奇数位于偶数前面
    剑指offer——矩阵覆盖(斐波那契变形)
    剑指OFFER的跳台阶问题
    2016携程测试实习生笔试编程题
    大数乘法——2016开发实习生腾讯模拟笔试编程题
    53. Maximum Subarray
    Redis和Memcached的区别【转】
  • 原文地址:https://www.cnblogs.com/baipeng/p/7198094.html
Copyright © 2011-2022 走看看