zoukankan      html  css  js  c++  java
  • 【PHP】微信获取用户信息

    在本文中,特别要注意的是有两个不同的Access Token,他们产生的方式不一样,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,分别称为全局Access Token和授权Access Token。

    一、 通过全局Access Token获取用户基本信息
    1. 用户关注以及回复消息的时候,均可以获得用户的OpenID

    <xml>
      <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
      <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName>
      <CreateTime>1372307736</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[subscribe]]></Event>
      <EventKey><![CDATA[]]></EventKey>
    </xml>

    其中的FromUserName就是OpenID
    2. 然后使用access_token接口,请求获得全局Access Token
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
    返回结果:

    {
      "access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ",
      "expires_in": 7200
    }

    3. 再使用全局ACCESS_TOKEN获取OpenID的详细信息
    https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID
    返回结果:

    {
      "subscribe": 1,
      "openid": "oLVPpjqs2BhvzwPj5A-vTYAX4GLc",
      "nickname": "刺猬宝宝",
      "sex": 1,
      "language": "zh_CN",
      "city": "深圳",
      "province": "广东",
      "country": "中国",
      "headimgurl": "http://wx.qlogo.cn/mmopen/JcDicrZBlREhnNXZRudod9PmibRkIs5K2f1tUQ7lFjC63pYHaXGxNDgMzjGDEuvzYZbFOqtUXaxSdoZG6iane5ko9H30krIbzGv/0",
      "subscribe_time": 1386160805
    }

    这种方式最适合用户在关注的时候,回复一条欢迎关注+用户昵称的信息

    二、 通过OAuth2.0方式弹出授权页面获得用户基本信息
    1. 首先配置回调域名

    2. 构造请求url如下:
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect
    scope=snsapi_userinfo 表示应用授权作用域为请求用户信息
    3. 回调页面得到链接如下,回调url中将包含参数code
    REDIRECT_URI?code=00b788e3b42043c8459a57a8d8ab5d9f&state=1
    4. 再使用code换取oauth2的授权access_token
    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID &secret=SECRET&code=00b788e3b42043c8459a57a8d8ab5d9f&grant_type=authorization_code
    获取授权access_token
    注:如果此应用已经绑定在开放平台下面,则返回结果会出现union_id参数

    {
    "access_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw",
    "expires_in": 7200,
    "refresh_token": "OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5CZPAwZksiuz_6x_TfkLoXLU7kdKM2232WDXB3Msuzq1A",
    "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
    "scope": "snsapi_userinfo,"
    }

    5. 再使用授权Access Token获取用户信息
    https://api.weixin.qq.com/sns/userinfo?access_token=OezXcEiiBSKSxW0eoylIeAsR0GmYd1awCffdHgb4fhS_KKf2CotGj2cBNUKQQvj-G0ZWEE5-uBjBz941EOPqDQy5sS_GCs2z40dnvU99Y5AI1bw2uqN--2jXoBLIM5d6L9RImvm8Vg8cBAiLpWA8Vw&openid=oLVPpjqs9BhvzwPj5A-vTYAX3GLc
    返回结果

    {
      "openid": "oLVPpjqs9BhvzwPj5A-vTYAX3GLc",
      "nickname": "刺猬宝宝",
      "sex": 1,
      "language": "zh_CN",
      "city": "深圳",
      "province": "广东",
      "country": "中国",
      "headimgurl": "http://wx.qlogo.cn/mmopen/utpKYf69VAbCRDRlbUsPsdQN38DoibCkrU6SAMCSNx558eTaLVM8PyM6jlEGzOrH67hyZibIZPXu4BK1XNWzSXB3Cs4qpBBg18/0",
      "privilege": []
    }


    这种方法适合,
    1. 在朋友圈中获得用户的信息.
    2. 在网页中获得用户信息。
    3. 在自定义菜单中获得用户信息。

    三、 通过OAuth2.0方式不弹出授权页面获得用户基本信息
    此种方法,只是将第二种方法中的scope=snsapi_userinfo 替换成
    scope=snsapi_base
    然后使用全局ACCESS_TOKEN获取OpenID的详细信息

  • 相关阅读:
    一致性哈希的理解与实践
    nil in Go
    为什么Go没有math.Min/Max(int, int) 函数?
    What happens when I type kubectl run?
    kubelet简要分析
    编译安装nginx和模块
    nginx与tengine添加check模块(nginx_upstream_check_module)
    多台ESXI 6.5 添加 iSCSI 共享存储 --centos 7.4 作为target
    Cannot open the disk '/vmfs/volumes/5e97f429-a56d6ea0-1ef3-000c29a09445/oracle_node1/oracle_node1_1.vmdk' or one of the snapshot disks it depends on.
    RabbitMQ windows2016 镜像模式 haproxy+keepalived
  • 原文地址:https://www.cnblogs.com/NicholasFugui/p/7681509.html
Copyright © 2011-2022 走看看