您的位置:首页 > 移动开发 > 微信开发

PHP---微信OAuth2.0网页授权获取用户信息

2017-01-03 18:12 609 查看
本人最近做了微信网页授权开发,其中走了很多弯路,遇到的问题也很多,我把我的开发步骤和问题写出来,以供参考.

一、开发前准备

①获取到网页授权的接口权限;

1、获得此接口的条件为:微信公众号的类型必须为服务号,该服务号必须通过微信认证;

2、登录到微信公众平台后,到开发=》接口权限=》网页服务=》网页帐号=》网页授权,看是否获取网页授权的接口权限;

②配置微信网页授权的回调域名;

首先需要获取到开发者需要先到公众平台官网中的“开发
- 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。【请注意这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头。
】(授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.aa.com,配置以后此域名下面的页面,http://www.aa.com/index.html
http://www.aa.com/test.html 都可以进行OAuth2.0鉴权。但http://pay.aa.com 、 http://music.aa.comhttp://aa.com无法进行OAuth2.0鉴权 )
二、准备开发

开发前注意:

1、大概流程:

在微信网页中,让用户访问你的微信授权的这个域名网站,用户可以跳转到微信的授权页面,点击按钮确认授权,从而进行微信网页授权完成

2、关于Unionid机制

如果开发者拥有多个微信公众号或者在公众号、移动应用之间统一用户账号,需要到微信开放平台(open.weixin.qq.com)绑定公众号后,才能利用Unionid机制,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为同一用户,对同一个微信开放平台下的不同应用(移动应用、网站应用和公众帐号),unionid是相同的。

3、开发步骤(微信网页授权大致分为4步完成)如下的代码是以thinkphp为例子的

①当用户在微信网页中进入咱们网站中,需要判断该用户是否需要授权登录,如果需要,则引导用户进入微信授权页面(即跳转到第三方授权登录页)

//微信网页授权

public function wechatLogin(){

$WX_APPID = '微信公众号在微信的appid';

$redirectUrl = urlencode("你的回调页面的地址");

$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $WX_APPID . '&redirect_uri=' . $redirectUrl . '&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect';

header("Location:" . $url);

}

②在微信的授权页面,当用户点击”同意授权“,则微信会重新跳转到第三方网页(咱们网站中)的回调地址,并且带上code参数;

③在你们网站的回调页面,获取到code参数的值,根据code换取到openid和access_token(此access_token和微信公众平台的基础的access_token不同);

④最后就可以根据openid和access_token获取到用户的基本信息了;

public function redirectUrl() {

$code = $_GET["code"];

$get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $WX_APPID . '&secret=' . $WX_SECRET . '&code=' . $code . '&grant_type=authorization_code';

$json = $this->curl_post($get_token_url);

$arr = json_decode($json, true);

$token = $arr['access_token'];

$openid = $arr['openid'];

//拿到token后就可以获取用户基本信息了

$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $token . '&openid=' . $openid . '&lang=zh_CN';

$json = $this->curl_post($url); //获取微信用户基本信息

$user_data = json_decode($json, true);

print_r($user_data);

}

/**

* curl post请求

*/

function curl_post($url, $data) {

$query_str = '';

foreach ($data as $key => $value) {

$query_str .= '&' . $key . '=' . $value;

}

$query_str = ltrim($query_str, '&');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url); // 配置网关地址

curl_setopt($ch, CURLOPT_HEADER, 0); // 过滤HTTP头

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1); // 设置post提交

curl_setopt($ch, CURLOPT_POSTFIELDS, $query_str); // post传输数据

$return_data = curl_exec($ch);

curl_close($ch);

return $return_data;

}


















                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微信 oauth