微信公众号开发--自定义菜单跳转页面并获取用户信息
请先读完本文再进行配置开发
请先前往微信平台开发者文档阅读“网页授权获取用户基本信息”的接口说明
在微信公众账号开发中,往往有定义一个菜单,然后用户点击该菜单就进入用户个人中心的功能,通常应用于各个公众账号中的会员服务。
如何在微信自定义菜单中将用户导航到个人中心页面呢?
首选需要通过用户点击获取用户openid,而通过用户的点击跳转获取用户openid就必须在菜单中动态绑定用户的openid,或者在菜单的跳转URL中填写微信提供的链接,官方给了两个链接类型
一种是Scope为snsapi_base的链接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
另一种是Scope为snsapi_userinfo的链接
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
这两种链接的区别如下
应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
网上很多说法是将链接的url直接作为微信自定义菜单中view类型中的url(在填写是url时需要配置网页授权回调域名和appid),本人试了一下这种做法然而不能成功
{"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"},
返回结果是创建菜单失败
创建菜单失败 errcode:{40033} errmsg:{invalid charset. please check your request, if include \uxxxx will create fail! hint: [91..gA0792vr23]}
我试了一下将后面的地址进行urlEncode,还是同样的错误。
后来我想了一个办法
在自定义菜单中填写自己的url,在填写的url中将用户重定向到snsapi_base的url中,然后再在snsapi_base中配置获取用户openid以及用户其他信息,最后跳转到一个页面,也就是通常的会员中心页面。
流程如下
请看代码
{"type":"view","name":"会员中心", "url":"http://配置的网址/redirect"
}
其中通过url将用户跳转到
http://配置的网址/redirect
然后在处理方法中调用一次重定向即可
//类上的配置
@Controller
@RequestMapping("/wechat")
public class WeChatController{@RequestMapping(value = "/redirect", method = RequestMethod.GET)public String weixinRedirect(HttpServletRequest request, HttpServletResponse response) {return "redirect:https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的appid&redirect_uri=你的服务器处理地址?response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect";}
}
服务器会将微信认证 跳转到你的服务器处理地址,也就是上面
redirect_uri=你的服务器处理地址中的地址
这里配置为
你的服务器地址/oauth
代码如下
@RequestMapping(value = "/oauth", method = RequestMethod.GET)public String weixinOAuth(HttpServletRequest request, HttpServletResponse response, Model model) {//得到codeString CODE = request.getParameter("code");String APPID = "你的APPID";String SECRET = "你的SECRET";//换取access_token 其中包含了openidString URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code".replace("APPID", APPID).replace("SECRET", SECRET).replace("CODE", CODE);//URLConnectionHelper是一个模拟发送http请求的类String jsonStr = URLConnectionHelper.sendGet(URL);//System.out.println(jsonStr);//out.print(jsonStr);JSONObject jsonObj = new JSONObject(jsonStr);String openid = jsonObj.get("openid").toString();//有了用户的opendi就可以的到用户的信息了//地址为https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN//得到用户信息之后返回到一个页面model.addAttribute("user", wechatUser);return "vip/userInfo";}
效果如下
而且这种方式当用户用其他浏览器打开时,会出错,保证了只能在微信中使用,保障了安全性。而且地址栏不会有其他用户个人信息的暴露。
参考文献
网页授权获取用户基本信息
微信公众号开发--自定义菜单跳转页面并获取用户信息相关推荐
- 微信公众号开发--自定义菜单跳转页面并获取用户信息(续)
之前写过一篇微信公众号开发–自定义菜单跳转页面并获取用户信息 由于当时是刚学习微信公众号开发当时的思路虽然可行,不过不是最好的,最近也用到了需要获取用户信息的地方,再次整理一下. 流程 注意点 ### ...
- 公众号如何跳转到页面php,图文详解微信公众号开发自定义菜单跳转页面并获取用户信息实例...
这篇文章主要介绍了微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解的相关资料,需要的朋友可以参考下 微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读&qu ...
- java自定义菜单跳转页面_微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解...
微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读"网页授权获取用户基本信息"的接口说明 在微信公众账号开发中,往往有定义一个菜单,然后用户点击 ...
- 微信公众号开发---自定义菜单的创建及菜单事件响应(java)
微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号: 2)服务号可以申请自定义菜单: 3 ...
- 微信公众号配置自定义菜单跳转小程序,自动回复跳转小程序
自定义菜单跳转小程序 菜单json中找到自己想加的位置 {"type": "miniprogram", "name": "wxa& ...
- android 微信公众号开发教程,微信公众号-开发者-自定义菜单,公众开发者
微信公众号-开发者-自定义菜单,公众开发者 我是个初学者,网上找了看了好多,都是第三方实现的,考虑到安全问题,不敢用! 今天终于摸索出了实现方法. 官方api:http://mp.weixin.qq. ...
- php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码
目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...
- 微信公众号开发 - 创建菜单
微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...
- 微信公众号平台-自定义菜单
自定义菜单 微信公众平台自定义菜单设置方法 进入微信公众平台->功能->自定义菜单->添加菜单->点击"+"添加子菜单->设置动作->发布. 1 ...
- 微信公众号开发 (3) 菜单处理
一.前言 微信公众号开发 (1) 微信接入认证成为开发者 微信公众号开发 (2) 消息处理 本文将实现 根据AppID和AppSecret获取access_token 自定义菜单(创建菜单.查询菜单. ...
最新文章
- git服务器查看用户信息,git 查看当前git用户_新Git用户使用方法
- 四. RxJava之基本原理
- 椭圆形中间一个大写的v_年轻人想要的出街姿态,新CR-V整的明明白白
- getchar()和EOF
- synchronized实现
- 百度正用谷歌AlphaGo,解决一个比围棋更难的问题 | 300块GPU在燃烧
- 【案例分享】利用Python识别图片中的文字
- 3星|《未来公司》:Uber简史
- mac安装虚拟机win10,Mac安装VirtualBox
- 奇异矩阵及广义逆矩阵
- cad阀门插件lisp_cad lisp程序中看不出怎么输入命令
- 凯文·凯利:AI将改变一切设计工作
- 实现用户注册功能的代码
- Python摇色子游戏(两种模式)
- PHP是单线程还是多线程?
- [Day 7]JS FA、用户交互、JS动画的实现(二)
- 配音秀显示服务器溜去配音啦,配音秀作品恢复方法操作介绍
- 【转】DDR3中的ODT
- 【Launcher开发】Android桌面布局分析
- Android Telephony纲要