微信公众号网页授权详解

阅读 12364  ·  发布日期 2020-08-24 17:26  ·  温州雄霸网络科技有限公司|建站|APP小程序制作|做网站SEO推广优化
【摘要】 在这个移动端的时代,微信公众号也逐渐成为人们获取信息的一种渠道,也是商家发展潜在客户的一种手段,因此,许多程序员转战微信开发,那么今天,我们就来为大家介绍一下微信公众号开发中的网页授权到底要怎样才能实现。在这之前先给大家一个我自定义的请求接口的函数,在下面的示例代码中请求接口用的都是这个函数该函数的作用是,想接口发起请... 【温州小程序开发,温州微信公众号,平阳做网站,平阳网站建设公司,平阳小程序商城制作,昆阳万全做网站,鳌江水头小程序,萧江腾蛟微信公众号,山门顺溪南雁海西南麂凤卧麻步怀溪网络网店服务,政采云网店管理服务】...

微信公众号网页授权详解

在这个移动端的时代,微信公众号也逐渐成为人们获取信息的一种渠道,也是商家发展潜在客户的一种手段,因此,许多程序员转战微信开发,那么今天,我们就来为大家介绍一下微信公众号开发中的网页授权到底要怎样才能实现。
在这之前先给大家一个我自定义的请求接口的函数,在下面的示例代码中请求接口用的都是这个函数该函数的作用是,想接口发起请求,传递参数并返回接口返回的数据(这个里面的代码就不做多解释了,如果大家想要了解可以去看一下php curl函数总结)//自定义请求接口函数,$data为空时发起get请求,$data有值时发情post请求 function http_url($url,$data=null){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
if(!empty($data)){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
}
$res = curl_exec($ch);
if(curl_errno($ch)){
echo "error:".curl_error($ch);
exit;
}
curl_close($ch);
return $res;
}
(文中所使用的接口为腾讯官方提供,大家可以参考一下微信公众平台的开发者文档)一、首先我们需要配置我们的公众号1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。
请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:
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接口地址:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect (注意接口参数) function Get_Code() //获取code {
//构造请求地址 $code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信公众号appid&redirect_uri=请求功后回调地址&response_type=code&scope=snsapi_userinfo&state=STATE #wechat_redirect";
//跳转到请求地址,应为本省设置了回调地址,所以不需要使用file_get_content()来请求接口。
header("location:" . $code_url);
exit;
}
三、通个获取到的code来或缺access_token和openid接口:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code/** * 通过获取到的code来获取access_token和openid * $code为获取到的code * 接口的参数注意换成自己的,如appid和secret */ function GetAccess_Token($code) {
$get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=$code&grant_type=authorization_code";
$res = http_url($get_access_token_url);
return json_decode($res, true);
}
四、判断access_token是否有效接口:
https://api.weixin.qq.com/sns/auth?access_token=ACCESS_TOKEN&openid=OPENID/** * 检查access_token是否有效 * */ function CkeckAccessToken($access_token, $openid) {
$check_url = "https://api.weixin.qq.com/sns/auth?access_token=$access_token&openid=$openid";
$res = http_url($check_url);
$result = json_decode($res, true);
if (isset($result['
errmsg'
]) && $result['
errmsg'
] == 1) {
return 1;
//access_token有效 }
else {
return 0;
//access_token无效 }
}
五、如果失效,刷新access_token接口:
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN/** * 如果获取到的access_token无效,通过refresh_token来刷新access_token *接口的参数注意换成自己的 */ function GetRefresh_Token($refresh_token) {
$get_refresh_token_url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=appid&grant_type=refresh_token&refresh_token=$refresh_token";
$res = http_url($get_refresh_token_url);
return json_decode($res, true);
}
六、获取用户信息接口:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN/** * 获取用户基本信息 * */ function Get_User_Info($access_token, $openid){
$get_user_info = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
$res = http_url($get_user_info);
return json_decode($res, true);
}
获取到用户信息数据:
{
"openid":" OPENID", " nickname": NICKNAME, "sex":"1", "province":"PROVINCE" "city":"CITY", "country":"COUNTRY", "headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" }
下面上完整代码:
//启动session if (isset($_GET['
code'
])) {
//判断是否有code传过来,如果没有调用函数请求code $res = GetAccess_Token($_GET['
code'
]);
//使用code获取access_token和openid if (CkeckAccessToken($res['
access_token'
], $res['
openid'
]) == 0) {
//判断access_token是否有效,如果无效获取新的access_token $res = GetRefresh_Token($res['
refresh_token'
]);
//或缺新的access_token }
$userinfo = Get_User_Info($res['
access_token'
], $res['
openid'
]);
//获取用户信息 $_SESSION['
userinfo'
] = $userinfo;
//将用户信息存入session中 $next_url = '
http://web/index.php'
;
//下一个页面地址 header("location:" . $next_url);
//获取到信息后跳转到其他页面 exit;
}
else {
//获取code Get_Code();
}
function Get_Code() //获取code{
$code_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=appid&redirect_uri=回调地址&response_type=code&scope=snsapi_userinfo&state=STATE #wechat_redirect";
header("location:" . $code_url);
exit;
}
/** * 通过获取到的code来获取access_token和openid * */ function GetAccess_Token($code){
$get_access_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=appid&secret=secret&code=$code&grant_type=authorization_code";
$res = http_url($get_access_token_url);
return json_decode($res, true);
}
/** * 检查access_token是否有效 * */ function CkeckAccessToken($access_token, $openid){
$check_url = "https://api.weixin.qq.com/sns/auth?access_token=$access_token&openid=$openid";
$res = http_url($check_url);
$result = json_decode($res, true);
if (isset($result['
errmsg'
]) && $result['
errmsg'
] == 1) {
return 1;
//access_token有效 }
else {
return 0;
//access_token无效 }
}
/** * 如果获取到的access_token无效,通过refresh_token来刷新access_token */ function GetRefresh_Token($refresh_token){
$get_refresh_token_url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=appid&grant_type=refresh_token&refresh_token=$refresh_token";
$res = http_url($get_refresh_token_url);
return json_decode($res, true);
}
/** * 获取用户基本信息 * */ function Get_User_Info($access_token, $openid){
$get_user_info = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
$res = http_url($get_user_info);
return json_decode($res, true);
}
//自定义请求接口函数,$data为空时发起get请求,$data有值时发起post请求 function http_url($url,$data=null){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE);
if(!empty($data)){
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
}
$res = curl_exec($ch);
if(curl_errno($ch)){
echo "error:".curl_error($ch);
exit;
}
curl_close($ch);
return $res;
}
以上就是微信公众号网页授权详解的详细内容,更多请关注php中文网其它相关文章!
微信
分享相关标签:
微信 微信公众号本文原创发布php中文网,转载请注明出处,感谢您的尊重!
上一篇:
如何使用vue完成微信公众号网页
下一篇:
jsapi支付什么意思相关文章相关视频微信公众号里“JS接口域名”实现分享功能微信公众号推送消息给用户?微信公众号的二次开发框架--微擎基本介绍如何使用vue完成微信公众号网页微信公众号网页授权详解网页授权接口调用实例解析 [温州做微信公众号]