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.com 、 http://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;
}
一、开发前准备
①获取到网页授权的接口权限;
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.com 、 http://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;
}
相关文章推荐
- 夺命雷公狗---微信开发51----网页授权(oauth2.0)获取用户基本信息接口(1)
- 夺命雷公狗---微信开发53----网页授权(oauth2.0)获取用户基本信息接口(3)实现世界留言版
- 微信网页授权获取用户基本信息--PHP
- PHP+TP框架实现微信网页授权,获取用户信息
- 微信网页授权获取用户基本信息--PHP
- PHP+TP框架实现微信网页授权,获取用户信息
- 夺命雷公狗---微信开发52----网页授权(oauth2.0)获取用户基本信息接口(2)
- 微信开发之获取OAuth2.0网页授权认证和获取用户信息进行关联
- 微信开发之获取OAuth2.0网页授权认证和获取用户信息进行关联(转:http://playxinz.iteye.com/blog/2249634)
- PHP/微信网页授权获取用户基本信息
- C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)
- 微信的接口网页授权获取用户基本信息不是只有认证服务号才有
- 微信开发笔记——微信网页登录授权,获取用户信息
- 微信开发之网页授权获取用户信息(二)
- 微信开发之网页授权获取用户基本信息
- 微信 网页授权获取用户基本信息(OAuth 2.0)
- 微信网页授权获取用户基本信息
- java微信网页授权获取用户信息以及JSSDK自定义分享等功能<一>
- 微信开发之网页授权获取用户信息(二)
- nodejs微信开发--网页获取用户授权信息