微信公众号点击菜单即可打开并登录微站的实现方法

《PHP实战:微信公众号点击菜单即可打开并登录微站的实现方法》要点:
本文介绍了PHP实战:微信公众号点击菜单即可打开并登录微站的实现方法,希望对您有用。如果有疑问,可以联系我们。

PHP应用本文实例讲述了微信公众号点击菜单即可打开并登录微站的实现办法.分享给大家供大家参考.具体分析如下:

总体来说,微信公众号点击菜单即可打开并登录微站实现步骤比较复杂,但很多微站在己用上了,本文对此进行整理归纳,相信可以给大家带来一定的参考借鉴价值.

现在大部分微站都通过用户的微信openid来实现自动登录.在我之前的开发中,用户通过点击一个菜单,公众号返回一个图文,用户点击这个图文才可以自动登录微站.但是如果你拥有高级接口,就可以实现点击菜单,打开网页就能获取这个openid,实现自动登录.
这里已经提到,必须要拥有高级接口的权限(服务号、企业号),开启了开发者模式.

1.设置回调地址

在微信公众平台后台“开发者中心”中找到“高级接口”下的“OAuth2.0网页授权”,后面有一个“修改”,点击之后就会弹出填写回调地址的对话框.具体如何授权,请点击这里学习.只有获得高级接口权限后,才能出现这个地方的“修改”.
注意,这里填写的是域名,不是带的网址,而且解释中很清楚,“授权回调域名配置规范为全域名”,也就是说带www和不带是不同的两个域名.因此我这里要填写如下图中的域名.

PHP实战:微信公众号点击菜单即可打开并登录微站的实现方法

2. 创建菜单

创建菜单可以通过你的微站后台创建,如果没有开启开发者模式,也可以通过微信公众平台后台创建.
菜单使用点击打开链接的模式,也就是view模式.如果你是使用开发者模式,通过向微信提交如下代码,即可创建公众号菜单(开发者文档):

代码如下:
{
     "button":[
     {
          "type":"view",
          "name":"登录微站",
          "url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid={在微信公众平台后台获取这个APPID}&redirect_uri={你填写的回调域名下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
      }]
}

代码1 要提交的菜单代码,下面要用到
APPID的获取位置就是上面你填写回调地址的那个“开发者中心”.下面我们用PHP来实现一下菜单提交:
代码如下:
<?php
function curl_info($appid,$secret) {
  $ch = curl_init();
  curl_setopt($ch,CURLOPT_URL,"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret);
  curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"GET");
  curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
  curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
  curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
  curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
  curl_setopt($ch,CURLOPT_AUTOREFERER,1);
  // curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  $tmpInfo = curl_exec($ch);
  if (curl_errno($ch)) { 
    echo 'Errno'.curl_error($ch);
  }
  curl_close($ch);
  $arr= json_decode($tmpInfo,true);
  return $arr;
}
function curl_menu($ACCESS_TOKEN,$data) {
  $ch = curl_init();
  curl_setopt($ch,"https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$ACCESS_TOKEN);
  curl_setopt($ch,"POST");
  curl_setopt($ch,1);
  curl_setopt($ch,true);
  $tmpInfo = curl_exec($ch);
  if (curl_errno($ch)) {
    echo 'Errno'.curl_error($ch);
  }
  curl_close($ch);
  $arr= json_decode($tmpInfo,true);
  return $arr;
}
function creat_menu() {
  $ACCESS_LIST= curl_info(APP_ID,APP_SCR);//获取到的凭证,你需要自己define APP_ID和APP_SCR(应用密钥),这个也是在微信公众平台后台开发者中心找
  if($ACCESS_LIST['access_token']!='') {
    $access_token = $ACCESS_LIST['access_token'];//获取到ACCESS_TOKEN
    $data = '把上面代码1拷贝黏贴在这里';
    $msg = curl_menu($access_token,preg_replace("#u([0-9a-f]+)#ie","iconv('UCS-2','UTF-8',pack('H4','1'))",$data));
    if($msg['errmsg']=='ok') {
      die('创建自定义菜单成功!');
    }
    else {
      die('创建自定义菜单失败!');
    }
  }
  else {
    die('创建失败,微信AppId或微信AppSecret填写错误');
  }
}
create_menu();
?>

代码2 用PHP来创建微信公众号菜单

代码2其实有点冗余了,核心部分用红色标出来了.就这样,你的微信公众号中应该很快就可以看到创建了一个“登录微站”的菜单.点击这个菜单就可以实现登录微站了.
如果你不需要PHP,可以直接在微信公众平台后台的菜单自定义中写链接就可以了.

PHP实战:微信公众号点击菜单即可打开并登录微站的实现方法

在上图中的这个地方,选择打开链接的方式创建菜单.OK,接下来把上面那个链接放进去:

https://open.weixin.qq.com/connect/oauth2/authorize?appid={在微信公众平台后台获取这个APPID}&redirect_uri={你填写的回调域名下的地址}&response_type=code&scope=snsapi_base&state=1#wechat_redirect

创建菜单就可以了.
当然,你也有可能只需要在你自己的微信管理后台加入这个链接就可以了.

3.在回调页获取openid

细心的你可能已经发现了,上面的链接地址中含有参数scope=snsapi_base,而非scope=snsapi_userinfo,因为使用前者不需要用户点击一个授权按钮,直接跳转到回调页面,而后者需要点击授权按钮,不过点击授权按钮有好处,一是可以在没有关注公众号的情况下也可以授权,二是授权后可以获得用户的一些信息,如昵称、性别、所在地.但是我们是为了利用openid进行登录,所以直接选择前者就可以了.

点击菜单之后,经过微信authorize的处理,会跳转到你提交的回调地址(这里需要提醒,回调地址最好不要带参数,例如xxx/?callback=from_weixin,因为微信跳转到你的回调地址也要带参数,而这个参数就你需要的).微信跳转到如下URL:
回调地址/?code=CODE&state=1

上面代码可以通过$_GET['code']获得一个CODE值,利用这个CODE值和appid,可以获得openid和access_token.
下面再用PHP来实现以下:

代码如下:
if($_GET['code']) {
  $code = $_GET['code'];
  $data = get_by_curl('https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSRC&code='.$code.'&grant_type=authorization_code');
  $data = json_decode($data);
  $openid = $data->openid;
  $access_token = $data->access_token;
}
function get_by_curl($url,$post = false){
    $ch = curl_init();
    curl_setopt($ch,$url);
    curl_setopt($ch,CURLOPT_HEADER,0);
    curl_setopt($ch,1);
    if($post){
        curl_setopt($ch,CURLOPT_POST,1);
        curl_setopt($ch,$post);
    }
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

这样可以就可以获得openid和access_token,利用这些值,我们还可以利用微信公众平台的获取用户基本信息api接口获取用户基本信息.

希望本文所述对大家基于PHP的微信公众号开发有所赞助.

编程之家培训学院每天发布《PHP实战:微信公众号点击菜单即可打开并登录微站的实现方法》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


网页授权获取用户信息的方法
报错config:invalid signature的解决方案
微信开发百思不得姐实战教程
详解微信开发input输入框
教你libco是如何支撑巨大数据信息量的
微信二次开发之文本消息请求与发送
微信开发H5轻游戏
scroll-view完成列表页的方法详解
Java微信开发之自定义菜单的创建
微信开发之input控件的实例详解
微信开发Emoji表情的实例教程
微信开发中详解textarea的使用方法
微信开发中使元素占满全屏的方法介绍
微信开发之数据访问的方法详解
微信二次开发之各类型消息封装
微信开发之数据库操作
如何获取微信好友的地理位置信息
分享3款微信开发开源框架
微信开发之获取服务器IP
微信开发之公交换乘功能代码详解