微信公众号菜单openid 点击菜单即可打开并登录微站

现在大部分微站都通过用户的微信openid来实现自动登录。在我之前的开发中,用户通过点击一个菜单,公众号返回一个图文,用户点击这个图文才可以自动登录微站。但是如果你拥有高级接口,就可以实现点击菜单,打开网页就能获取这个openid,实现自动登录。

这里已经提到,必须要拥有高级接口的权限(服务号、企业号),开启了开发者模式。

1.设置回调地址

在微信公众平台后台“开发者中心”中找到“高级接口”下的“OAuth2.0网页授权”,后面有一个“修改”,点击之后就会弹出填写回调地址的对话框。具体如何授权,请点击这里学习。只有获得高级接口权限后,才能出现这个地方的“修改”。

注意,这里填写的是域名,不是带http://的网址,而且解释中很清楚,“授权回调域名配置规范为全域名”,也就是说带www和不带是不同的两个域名。因此我这里要填写如下图中的域名。

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, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$ACCESS_TOKEN);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  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 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,可以直接在微信公众平台后台的菜单自定义中写链接就可以了。

在上图中的这个地方,选择打开链接的方式创建菜单。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,CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if($post){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
    }
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}

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

原文来自 乌徒帮 http://www.utubon.com/post/3065.html

时间: 2024-08-07 19:04:24

微信公众号菜单openid 点击菜单即可打开并登录微站的相关文章

使用Django实现微信公众号用户openid登录认证

最近在用Django做一个小项目,需要将微信的用户与网站的用户进行关联,由于是微信的订阅号,没有oauth网页授权的权限,只能退而求其次,在响应中获取用户的openid,来唯一的标识用户. Django中用户的模型继承和扩展于AbstractUser,在用户模型中添加openid字段: models.py class Users(AbstractUser): openid = models.CharField(max_length=100,blank=True,null=True,verbose

JAVA微信公众号通过openid发送模板消息~

1,问题产生 在微信公众号开发过程中,我们有时候做不同权限的时候,比如在注册的时候,需要审核,然后我们要想办法让对方知道审核的结果.这时候我们可以通过模板消息来通知. 2,第一步,首先在微信公众号上获取模板消息 首先,登录微信公众平台,看有没有模板消息这一块,没有的话点击添加功能插件,去添加,这里就省略不说了,这个主要就是选择你公众号的行业对应的模板消息,然后通过审核之后就可以使用了,说是几个工作日 但是一般很快就审核通过的. 有模板消息之后点进来,对应自己所需要的模板消息进行添加,比如,我添加

&ldquo;互联网+&rdquo;背景下使用微信公众号增强班主任工作与整合教学资源(泰微课)

前记:此文是我爱人一项作业.因为我本人对于微信这一块比较熟悉,就参与这项作业中.此文已经参加移动和教育相关活动.作者是我爱人,如有转载请署名作者. 一.什么是"互联网+"? 早在1969年互联网诞生之初,人们的初衷仅仅是对计算机之间的互相通信.就像电话.传真那样简单.而四十多年间互联网的发展用"日新月异"都嫌慢.互联网也从原先的固定线路的延展到基于移动通信的移动网络,互联的设备也从刚开始的以计算机为主发展到"connect to anything"

微信公众号获取openid

方式一:通过网页授权的方式获取,前提是公众号已获得网页授权 公众号获得网页授权后,配置回调域名: 当用户点击某个菜单事件时,调用项目中的xxx.jsp或xxx.html文件(http://www.xxx.com/web/wx1.jsp),内容如下: appid:公众号的:appid <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8&q

H5页面获取微信公众号的openid

1.H5页面是运行在微信浏览器的 2.需要与公众号关联(即需要openid) 3.判断需求是否需要弹窗告知用户授权操作 4.获取到的openid做本地存储,判断没有openid进行获取openid操作 5.这边的操作是不需要弹出授权框,且code不能重复使用,所以做了关注二维码弹窗且不能关闭弹唱操作 // 强制关注公众号,获取openid getCode = function () { if (sessionStorage.getItem("openid")&&sess

微信公众号网页上点击放大图片浏览,解决方案

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> //微信自带的图片预览 $(document).on('click', '.previewImage img',function(event) { var imgArray = []; var curImageSrc = $(this).attr('src')

Python微信公众号后台开发&lt;003&gt;:自定义菜单

有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了,后面如果有进展会进行更新. 开发文档: https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Explanation_of_interface_privileges.html 订阅号账号分类及权限 订阅号分为个人号和企业订

.NET微信公众号开发-2.0创建自定义菜单

一.前言 开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档. 接口文档地址:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html 看了这些个文档,基本意思明白了,就是我们把我们要创建的菜单创建好,post到微信的服务器上面,微信服务器然后给我们一些状态码,从而判断我们的菜单是否创建成功,只是在发送json数据以前我们要做

微信公众号获取粉丝openid系统

做为一名开发人员,在测试当中也经常需要用到openid,但是微信公众号获取openid的方法也是特别麻烦!网页授权是最常见的方式, 但是网页授权的流程太复杂,不仅要开发,还要在公众号后台设置回调域名(必须备案域名,还要上传txt验证文件),个人认为微信在获取openid方面未免太过繁琐了! 一直在想怎么获取粉丝的openid最方便,傻瓜式操作,避免复杂的流程,于是用下面的方法来获取全部粉丝的openid:同步公众号粉丝列表 操作流程: 1.无需设置任何东西,只需要填写公众号的appid和apps