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

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

如何在微信自定义菜单中将用户导航到个人中心页面呢?
首选需要通过用户点击获取用户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";}

效果如下

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

参考文献

网页授权获取用户基本信息

微信公众号开发--自定义菜单跳转页面并获取用户信息相关推荐

  1. 微信公众号开发--自定义菜单跳转页面并获取用户信息(续)

    之前写过一篇微信公众号开发–自定义菜单跳转页面并获取用户信息 由于当时是刚学习微信公众号开发当时的思路虽然可行,不过不是最好的,最近也用到了需要获取用户信息的地方,再次整理一下. 流程 注意点 ### ...

  2. 公众号如何跳转到页面php,图文详解微信公众号开发自定义菜单跳转页面并获取用户信息实例...

    这篇文章主要介绍了微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解的相关资料,需要的朋友可以参考下 微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读&qu ...

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

    微信公众号开发 自定义菜单 请先读完本文再进行配置开发 请先前往微信平台开发者文档阅读"网页授权获取用户基本信息"的接口说明 在微信公众账号开发中,往往有定义一个菜单,然后用户点击 ...

  4. 微信公众号开发---自定义菜单的创建及菜单事件响应(java)

    微信5.0发布 2013年8月5日,伴随着微信5.0 iPhone版的发布,公众平台也进行了重要的更新,主要包括: 1)运营主体为组织,可选择成为服务号或者订阅号: 2)服务号可以申请自定义菜单: 3 ...

  5. 微信公众号配置自定义菜单跳转小程序,自动回复跳转小程序

    自定义菜单跳转小程序 菜单json中找到自己想加的位置 {"type": "miniprogram", "name": "wxa& ...

  6. android 微信公众号开发教程,微信公众号-开发者-自定义菜单,公众开发者

    微信公众号-开发者-自定义菜单,公众开发者 我是个初学者,网上找了看了好多,都是第三方实现的,考虑到安全问题,不敢用! 今天终于摸索出了实现方法. 官方api:http://mp.weixin.qq. ...

  7. php创建菜单_php实现微信公众号创建自定义菜单功能的实例代码

    目的 创建自定义菜单,实现菜单事件. 首先获取Access_Token 接口: 我用的是测试号,修改APPID和APPSECRET,然后浏览器访问上面这个Url即可生成Access_Token 然后配 ...

  8. 微信公众号开发 - 创建菜单

    微信公众号开发文章目录 1.微信公众号开发 - 环境搭建 2.微信公众号开发 - 配置表设计以及接入公众号接口开发 3.微信公众号开发 - token获取(保证同一时间段内只请求一次) 4.微信公众号 ...

  9. 微信公众号平台-自定义菜单

    自定义菜单 微信公众平台自定义菜单设置方法 进入微信公众平台->功能->自定义菜单->添加菜单->点击"+"添加子菜单->设置动作->发布. 1 ...

  10. 微信公众号开发 (3) 菜单处理

    一.前言 微信公众号开发 (1) 微信接入认证成为开发者 微信公众号开发 (2) 消息处理 本文将实现 根据AppID和AppSecret获取access_token 自定义菜单(创建菜单.查询菜单. ...

最新文章

  1. git服务器查看用户信息,git 查看当前git用户_新Git用户使用方法
  2. 四. RxJava之基本原理
  3. 椭圆形中间一个大写的v_年轻人想要的出街姿态,新CR-V整的明明白白
  4. getchar()和EOF
  5. synchronized实现
  6. 百度正用谷歌AlphaGo,解决一个比围棋更难的问题 | 300块GPU在燃烧
  7. 【案例分享】利用Python识别图片中的文字
  8. 3星|《未来公司》:Uber简史
  9. mac安装虚拟机win10,Mac安装VirtualBox
  10. 奇异矩阵及广义逆矩阵
  11. cad阀门插件lisp_cad lisp程序中看不出怎么输入命令
  12. 凯文·凯利:AI将改变一切设计工作
  13. 实现用户注册功能的代码
  14. Python摇色子游戏(两种模式)
  15. PHP是单线程还是多线程?
  16. [Day 7]JS FA、用户交互、JS动画的实现(二)
  17. 配音秀显示服务器溜去配音啦,配音秀作品恢复方法操作介绍
  18. 【转】DDR3中的ODT
  19. 【Launcher开发】Android桌面布局分析
  20. Android Telephony纲要

热门文章

  1. 使用Visual Studio命令提示查看cad中的重整函数
  2. 计算机中显卡在什么地方 看,电脑显卡在哪个位置
  3. ZOJ3332 Strange Country II java
  4. iOS中播放音乐和音效
  5. 转!快速搭建视频直播平台
  6. 快速集成一个视频直播功能
  7. 计算机不显示固态硬盘,电脑重启后读不到固态硬盘怎么办
  8. 9月TIOBE编程语言排行榜出炉,这个语言或成最大赢家!
  9. 文件夹批量重命名编号的快速方法
  10. Android OrangePi 4G IOT(五) - MTK电源管理驱动(一)