微信公众平台开发--微信网页授权

在微信公众号开发中实现微信用户自动登陆第三方的功能:

条件:

  1.公众号必须为微信认证服务号;

  2.在公众号接口权限->网页账号 网页授权获取用户基本信息 修改需要OAuth2.0鉴权的域名;


 

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

  以snsapi_base为scope发起的网页授权,静默授权,不弹出授权页面,只能获取微信用户的openid。

  以snsapi_userinfo为scope发起的网页授权,弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息

  用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

 

关于网页授权access_token和普通access_token的区别           

  在用户同意授权后获取的access_token是针对于用户的,可以说是微信用户给第三方网站的授权码一样。

  而普通access_token则类似于公众平台给于第三方网站调用接口的凭借。


 

根据官网的步骤:

第一步 获取code:

  需要第三方网站进行重定向到包装后的授权地址 如下

$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WxPayConfig::APPID."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=success#wechat_redirect"header("Location:".$url);

appid  为微信公众平台提供的

redirect_ur   是用户同意授权后进入的页面

scope  为上面所提的两种scope 若是需要微信用户的其他资料需要snsapi_userinfo类型(不管用户是否关注公众号都可以获得资料,可以用来第三方平台的用户资料保留和填充)  若只是希望得到openid则可以使用snsapi_base类型

state  其他携带的参数

第二步 将利用第一步获取的code换取该用户授权的access_token:

$code = $_GET[‘code‘]; 
$url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
//通过get发送
$token_data = file_get_contents($token_url);
$token_arr = json_decode($token_data,true);

appid   为微信公众平台提供的APPID

secret  为微信公众平台提供的APPSECRET

code  第一步获取的code

获取到的参数 进行json_decode转化成数组 返回的数据如下

    access_token     网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    expires_in          access_token接口调用凭证超时时间,单位(秒)
    refresh_token    用户刷新access_token
    openid              用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
    scope               用户授权的作用域,使用逗号(,)分隔

 

第四步:拉取用户信息(需scope为 snsapi_userinfo)

$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$resdata = file_get_contents($url);
$data = json_decode($resdata,true);

此处于第二步做法一致 

    access_token  第二步获取的access_token

    openid 第二步获取的openid

获取到的参数 进行json_decode转化成数组 返回的数据如下

    openid    用户的唯一标识
    nickname    用户昵称
    sex    用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
    province    用户个人资料填写的省份
    city    普通用户个人资料填写的城市
    country    国家,如中国为CN
    headimgurl    用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。
    privilege    用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)
    unionid    只有在用户将公众号绑定到微信开放平台帐号后,才会出现该字段。

到此便可以获得了授权的用户的资料了 至于该用户是否已关注该微信公众平台 需要用户管理类接口中的“获取用户基本信息接口” 去获得。

官网还提供了 刷新access_token的接口 和 检查access_token是否有效的接口,其调用方法与第二三步一致。

 

微信公众平台开发--微信网页授权

上一篇:简聊iOS支付集成(支付宝和微信支付)


下一篇:微信开发之消息接收--语音消息(七)