微信公众号菜单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
微信公众号菜单openid 点击菜单即可打开并登录微站的更多相关文章
- 微信公众号获取openid(php实例)
微信公众号获取openid 公众号获取openid的方法跟小程序获取openid其实是一样的,只是code获取的方式不一样 小程序获取code: 用户授权登录时调用wx.login即可获取到code ...
- 微信公众号第三方平台生成自定义菜单提示 获取"access_token失败"
在微信公众号第三方平台要生成自定义菜单时,程序反应很慢,最终提示"获取access_token失败"(之前程序无改动,使用时间已久),查了大半天,找不出原因. 排除.在微信公众号平 ...
- JAVA微信公众号通过openid发送模板消息~
1,问题产生 在微信公众号开发过程中,我们有时候做不同权限的时候,比如在注册的时候,需要审核,然后我们要想办法让对方知道审核的结果.这时候我们可以通过模板消息来通知. 2,第一步,首先在微信公众号上获 ...
- “互联网+”背景下使用微信公众号增强班主任工作与整合教学资源(泰微课)
前记:此文是我爱人一项作业.因为我本人对于微信这一块比较熟悉,就参与这项作业中.此文已经参加移动和教育相关活动.作者是我爱人,如有转载请署名作者. 一.什么是"互联网+"? 早在1 ...
- 微信公众号用户OpenID同步导出系统
一.简介 同步公众账号用户信息,包括OpenID.昵称.头像.地区等. 二.主要功能 同步公众账号用户 OpenID,以及昵称.头像.性别.地区.关注时间等,支持认证订阅号.认证服务号. 支持超过1万 ...
- .NET微信公众号开发-2.0创建自定义菜单
一.前言 开发之前,我们需要阅读官方的接口说明文档,不得不吐槽一下,微信的这个官方文档真的很烂,但是,为了开发我们需要的功能,我们也不得不去看这些文档. 接口文档地址:http://mp.weixin ...
- .NET微信公众号开发-3.0查询自定义菜单
一.前言 前面我们已经创建好了我们的自定义菜单.那么我们现在要如何查询我们自定义的菜单.原理都是一样的,而且都是相当简单,只是接口地址文档换掉了. 2.0开始编码 同样我们首先创建好我的查询页面,在这 ...
- ASP.NET微信公众号用于给指定OpenId用户发送红包
ASP.NET微信公众号用于给指定OpenId用户发送红包 微信公众号要实现对指定用户发送红包,必须指定一个存放兵发放金额的商户号,在微信商户平台里面申请商户号并获取相关参数例如发送红包所要用到的安全 ...
- 微信公众号获取粉丝openid系统
做为一名开发人员,在测试当中也经常需要用到openid,但是微信公众号获取openid的方法也是特别麻烦!网页授权是最常见的方式, 但是网页授权的流程太复杂,不仅要开发,还要在公众号后台设置回调域名( ...
随机推荐
- 利用CSS3选择器定制checkbox和radio
之前在一个项目中需要定制checkbox,于是乎用图片模拟了一下,之后发现个更好用的方法(*因为兼容问题 在移动开发中用用就好) 效果: 1 2 3 4 5 6 7 实现代码: <style t ...
- 在ubuntu10.0.4下更新git
今天想到要在ubuntu10.0.4下下载android的源码学习一下.源码下载用到了git.以前安装过git以为应该没什么问题的,没想到报了 “fatal: git 1.7.2 or later r ...
- ApiDemos示例学习(2)——App->Activity->Animation
现在介绍一下com.example.android.app包下的Animation示例. 关键类及函数: ActivityOption overridePendingTransition() make ...
- 目前常用AD/DA芯片简介
目前生产AD/DA的主要厂家有ADI.TI.BB.PHILIP.MOTOROLA等,武汉力源公司拥有多年从事电子产品的经验和雄厚的技术力量支持,已取得排名世界前列的模拟IC生产厂家ADI.TI公司代理 ...
- HDU4738【杭州网赛、判桥】
刚拿到这道题时挺有思路,无奈平日里只敲过找割顶的代码,判桥的代码当时自己也没仔细敲. 当时一把泪啊,忽然感觉自己的图论才只是刚搞了个起步啊.. 题目有神坑. 就是先判是否连通,不连通直接输出0; ...
- Java_SSH项目主要步骤记录
建立Spring-Struts-Hibernate的步骤整理 1. 建立web project 2. 建立hernate, action, service包 3. 右击项目,add myeclipse ...
- C# 图片压缩 开源库
http://www.rasteredge.com/how-to/csharp-imaging/image-compressing/ http://www.rasteredge.com/dotnet- ...
- 使用c#获取access中所有表的表名与内容
以前在网上查过,似乎也可以通过读取access系统表的方法来获得,但是实在想不想来是什么,今天又在网上找了找,终于发现更加方便的方法,更重要的是,这种方法也可以通用所有OLEDB数据源. 这里用到了O ...
- JavaScript 中的面向对象的初步认识
我在学习JS的面向对象编程的时候,总是有两个奇怪的问题. 第一个就是:面向对象在JS中很少用到... 可能是目前自己做的项目还是比较简单,前端方面的任务我几乎都是用面向过程的方式写的,所以就导致,我啃 ...
- 初学springMVC搭建框架过程及碰到的问题
刚刚开始学spring框架,因为接了一个网站的项目,想用spring+springMVC+hibernate整合来实现它,现在写下搭建框架的过程及碰到的问题.希望给自己看到也能让大家看到不要踏坑. 一 ...