微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解


Posted in Javascript onDecember 08, 2016

微信公众号开发 自定义菜单

请先读完本文再进行配置开发

请先前往微信平台开发者文档阅读“网页授权获取用户基本信息”的接口说明

在微信公众账号开发中,往往有定义一个菜单,然后用户点击该菜单就进入用户个人中心的功能,通常应用于各个公众账号中的会员服务。

如何在微信自定义菜单中将用户导航到个人中心页面呢?

首选需要通过用户点击获取用户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) {
    //得到code
    String CODE = request.getParameter("code");
    String APPID = "你的APPID";
    String SECRET = "你的SECRET";
    //换取access_token 其中包含了openid
    String 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";
  }

效果如下

微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解

微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解

而且这种方式当用户用其他浏览器打开时,会出错,保证了只能在微信中使用,保障了安全性。而且地址栏不会有其他用户个人信息的暴露。

微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解

如有疑问,可以查看官网,谢谢大家的阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
Jquery为a标签的href赋值实现代码
May 03 Javascript
基于jquery异步传输json数据格式实例代码
Nov 23 Javascript
js字符串截取函数substr substring slice使用对比
Nov 27 Javascript
javascript异步编程的4种方法
Feb 19 Javascript
jQuery中:eq()选择器用法实例
Dec 29 Javascript
JS简单计算器实例
Jan 20 Javascript
jQuery+php实时获取及响应文本框输入内容的方法
May 24 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
vue组件学习教程
Sep 09 Javascript
js中getter和setter用法实例分析
Aug 14 Javascript
Puppet的一些技巧
Sep 17 Javascript
基于javascript的无缝滚动动画实现2
Aug 07 Javascript
node.js学习之交互式解释器REPL详解
Dec 08 #Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
Dec 08 #Javascript
JS中用childNodes获取子元素换行会产生一个子元素
Dec 08 #Javascript
微信公众号 摇一摇周边功能开发
Dec 08 #Javascript
Vue概念及常见命令介绍(1)
Dec 08 #Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
Dec 08 #Javascript
jquery二级目录选中当前页的css样式
Dec 08 #Javascript
You might like
PHP用户指南-cookies部分
2006/10/09 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
JS获得图片alt信息的方法
2015/04/01 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
webpack 处理CSS资源的实现
2019/09/27 Javascript
微信小程序修改数组长度的问题的解决
2019/12/17 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
python自动循环定时开关机(非重启)测试
2019/08/26 Python
Python的缺点和劣势分析
2019/11/19 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
2019/12/03 Python
Python中SQLite如何使用
2020/05/27 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
使用css实现android系统的loading加载动画
2019/07/25 HTML / CSS
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
药学专业大学生个人的自我评价
2013/11/04 职场文书
自主招生自荐信范文
2013/12/04 职场文书
给女儿的表扬信
2014/01/18 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
表扬信范文
2015/05/04 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python
Nginx 路由转发和反向代理location配置实现
2021/11/11 Servers
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python