微信公众平台官方自定义菜单url 网页授权

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信公众平台官方自定义菜单url 网页授权相关的知识,希望对你有一定的参考价值。

用官方的自定义菜单,配置授权回调域名,在url里直接写
https://open.weixin.qq.com/connect/oauth2/authorize?appid=在微信公众平台后台获取这个APPID&redirect_uri=你填写的回调域名下的地址&response_type=code&scope=snsapi_base&state=1#wechat_redirect
这个回调url,可以实现获取openid吗

你的公众号是否有 网页授权获取用户基本信息 的权限,有的话 你要进入其修改 授权回调函数域名 填入的你的域名,
然后在菜单设置 把 url 填写 官方的回调函数就可以啦 ,
还有的就是 这回调函数 返回的 只是 code,你还需要 通过code换取网页授权access_tok
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.WX_APPID.'&secret='.WX_APPSECRET.'&code='.$code.'&grant_type='.$grant_type.'';
这个返回的是 Array(access_token, expires_in, refresh_token, openid, scope
这样才可以得到 openId,
微信的开发文档 写的挺清楚的追问

是直接用官方的自定义菜单转url就可以吗?因为我看到微信开发文档写的要开发实现,有网页授权权限,需要再次通过code换取access_token 和openid,您说的这几个我是清楚的,就是不知道是否需要另外写菜单程序或者用第三方平台做

追答

你说的是直接在微信自定义菜单上使用啊!
这就不好意思了!我也不懂 ,我看到是填写一个 url,但是你只填写那个的话 应该是不行的

之前我以为你需要的是在第三方平台开发使用的!

追问

是的,我说的是在官方上的自定义菜单,然后能填写授权域名和url,能把code传给我自己的程序,然后我写程序去获取网页授权acess_token

追答

不对!你都响谢程序去获得获取网页授权acess_token,那为什么不自己写 菜单尼,

难道 没有自定义菜单的权限??

追问

有的,主要是我只需要在一个子菜单上用网页授权,要是都用的话,我还得再写自定义菜单的管理界面

参考技术A 需要通过订阅号的认证才可以开通这个外链功能

微信公众号网页授权获取用户基本信息

话不多说,根据官方文档需求说明,首先接口权限设置修改

先根据你的URL配置一下授权回调页域名

微信公众平台OAuth2.0授权的详细步骤如下

1)用户关注微信公众号。

2)微信公众号提供用户请求授权页面URL。

3)用户点击授权页面URL,将向服务器发送请求。

4)服务器询问用户是否同意授权给微信公众号(scope为snsapi_base时无此步骤)。

5)用户同意(scope为snsapi_base时无此步骤)。

6)服务器将code通过回调传给微信公众号。

7)微信公众号获得code。

8)微信公众号通过code向服务器请求access token.

9)服务器返回access token和Openid给微信公众号.

10)微信公众号通过access token向服务器请求用户信息(scope为snsapi_base时无此步骤)

11)服务器将用户信息回送给微信公众号(scope为snsapi_base时无此步骤)

 

下面简述一下snsapi_base与snsapi_userinfo区别

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

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

 

下面直接上授权请求代码

这个就是拼接请求的接口代码   weixin.class.php

 

<?php

class class_weixin
{
var $appid = "youappid";
var $appsecret = "youappsecret";

//构造函数,获取Access Token
public function __construct($appid = NULL, $appsecret = NULL)
{
if($appid && $appsecret){
$this->appid = $appid;
$this->appsecret = $appsecret;
}

}

//生成OAuth2的URL
public function oauth2_authorize($redirect_url, $scope, $state = NULL)
{
$url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".$redirect_url."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";
return $url;


}

//生成OAuth2的Access Token
public function oauth2_access_token($code)
{
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code";
$res = $this->http_request($url);
return json_decode($res, true);
}

//获取用户基本信息(OAuth2 授权的 Access Token 获取 未关注用户,Access Token为临时获取)
public function oauth2_get_user_info($access_token, $openid)
{
$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$res = $this->http_request($url);
return json_decode($res, true);
}

//获取token
public function token(){

$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=".client_credential."&appid=".$this->appid."&secret=".$this->appsecret."";
$res = $this->http_request($url);
return json_decode($res, true);

}




//获取用户基本信息

public function get_user_info($access_token,$openid)
{
//$url = "https//api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN";
$url= "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$res = $this->http_request($url);
return json_decode($res, true);
}

//HTTP请求(支持HTTP/HTTPS,支持GET/POST)
protected function http_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
}

 

下面是授权获取微信用户个人信息的请求代码

<?php

require_once(\'weixin.class.php\');
$weixin = new class_weixin(); 

if (!isset($_GET["code"])){     //判断有没有获取到code值,code相当于是和微信服务器请求的凭证,来换取access token
$redirect_url = \'https://\'.$_SERVER[\'HTTP_HOST\'].$_SERVER[\'REQUEST_URI\'];

$jumpurl = $weixin->oauth2_authorize($redirect_url, "snsapi_userinfo", "123");
Header("Location: $jumpurl");
}else{
$access_token_oauth2 = $weixin->oauth2_access_token($_GET["code"]);
$token=$weixin->token();
$userinfo = $weixin->get_user_info($token["access_token"], $access_token_oauth2[\'openid\']);
 var_dump($userinfo);    //这边就打印出了用户的个人信息了

 

?>

 

 

 

下面附上打印出来的结果

array(16) { ["subscribe"]=> int(1) ["openid"]=> string(28) "okGKvv6xpZ4FzfPBB5CbPkqdH-QI" ["nickname"]=> string(12) "匠人精神" ["sex"]=> int(1) ["language"]=> string(5) "zh_CN" ["city"]=> string(0) "" ["province"]=> string(0) "" ["country"]=> string(36) "南乔治亚岛和南桑德韦奇岛" ["headimgurl"]=> string(138) "http://thirdwx.qlogo.cn/mmopen/nbQibjkByWwve7MQlPQgceoKJQmZRJwmibMcHfnmIeltGuOdkdwCOlxicic7wBlhHnicmE9r6gORKq18wFRyPia07Via3YUn2OJ5ghe/132" ["subscribe_time"]=> int(1533544648) ["remark"]=> string(0) "" ["groupid"]=> int(0) ["tagid_list"]=> array(0) { } ["subscribe_scene"]=> string(17) "ADD_SCENE_QR_CODE" ["qr_scene"]=> int(0) ["qr_scene_str"]=> string(0) "" }

以上是关于微信公众平台官方自定义菜单url 网页授权的主要内容,如果未能解决你的问题,请参考以下文章

如何使用微信公众平台小程序

微信公众平台开发教程自定义菜单

微信公众平台开发教程自定义菜单

微信公众平台开发教程---自定义菜单

微信公众号支付

微信公众号用户与网站用户的绑定-自定义菜单获取Openid