微信自定义菜单+获取网页授权+获取用户信息

微信自定义菜单+获取网页授权+获取用户信息

今天项目需要一个需求,就是添加一个菜单接口,并且还可以获取用于的信息,从而根据用户的信息去做一些业务的查询。通过百度和自己查看文档大致的解决办法如下:

注意

在自定义自己菜单前,若跳转自己服务器里面的url时候,首先得设置自己点击菜单时的回调域名
image.png

不能以http或者https开头必须是www.xx.com类似于这样子的字符串形式

1 首先来自定义菜单创建接口

按照文档的要求一步一步来:

1.1 首选是自定义接口的一些限制和说明,这里就不多说了,看文档就可以明白。

这直接看文档即可 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013

1.2 然后是发送接口请求,自定义自己的菜单。

接口调用请求说明

http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

详情看文档即可,没什么好说的。发送请求和json即可。

本人的请求如下:

url : https://api.weixin.qq.com/cgi-bin/menu/create?access_token=19_7LGwU9xSYhQ5qLea2Vw3u0AtMePOXGY0KTqR6pNhH14oYoev8mGTuI3YzWtUBrTB_5MeBPDEkPtl52M-vCAvH9Z8w2ZPmkHzW-ymKyzLU5YF0Z-aasorSC34xSH2bVG0XYAv8aeVVb0VyE4cPDAgAHAHVS

json数据

{
    "menu": {
        "button": [
            {
                "type": "scancode_push",
                "name": "扫码",
                "key": "rselfmenu_0_1",
                "sub_button": []
            },
            {
                "type": "view",
                "name": "我的发票记录",
                "url": "http://www.udeam.com/cc",
                "sub_button": []
            }
        ]
    }
}

注意:

不要直接复制官网的json数据,应当去掉 "menu": 这一层json , 可能会出现 以下错误:

{
    "errcode": 40016,
    "errmsg": "invalid button size hint: [hTpqGa02101977]"
}

成功返回: {"errcode":0,"errmsg":"ok"}

错误时的返回JSON数据包如下(示例为无效菜单名长度): {"errcode":40018,"errmsg":"invalid button name size"} 或者其他错误等。

2 自定义菜单查询接口

请求说明

http请求方式:GET
https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN

返回说明(无个性化菜单时)

在这里插入图片描述

菜单界面

在这里插入图片描述

3 自定义菜单删除接口

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141015

4 controller

@GetMapping("cc")
public String cc(HttpServletRequest request) throws IOException {
 return "suceess"; //我自己的页面
}

启动运行

success 页面

但是我们这样子仅仅只是单独的挑了个页面无法获取到用户的一些信息,如debug所示!

无法获取到code所以,在跳转第三方网页的时候需要授权后才能获取到用户的一些基本信息。
** 获取用户信息的前提是网页授权这里没有进行网页授权,从而获取code值也为null**


在这里插入图片描述

5 微信网页授权

利用微信网页授权机制来进行重定向到自定义的一个url

如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

**关于网页授权回调域名的说明**

1、在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名。请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头;

2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面<http://www.qq.com/music.html> 、 <http://www.qq.com/login.html> 都可以进行OAuth2.0鉴权。但[http://pay.qq.com](http://pay.qq.com/) 、 [http://music.qq.com](http://music.qq.com/) 、 [http://qq.com无法进行OAuth2.0鉴权](http://qq.xn--comoauth2-735sh62dwk9eysua.xn--0-k76bu98j/)

3、如果公众号登录授权给了第三方开发者来进行管理,则不必做任何设置,由第三方代替公众号实现网页授权即可

**关于网页授权的两种scope的区别说明**

1、以snsapi_base为scope发起的网页授权,是用来获取进入页面的用户的openid的,并且是静默授权并自动跳转到回调页的。用户感知的就是直接进入了回调页(往往是业务页面)

2、以snsapi_userinfo为scope发起的网页授权,是用来获取用户的基本信息的。但这种授权需要用户手动同意,并且由于用户同意过,所以无须关注,就可在授权后获取该用户的基本信息。

3、用户管理类接口中的“获取用户基本信息接口”,是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。

然后根据自己的场景选择授权并且获取用户的信息

关于特殊场景下的静默授权

1、上面已经提到,对于以snsapi_base为scope的网页授权,就静默授权的,用户无感知;

2、对于已关注公众号的用户,如果用户从公众号的会话或者自定义菜单进入本公众号的网页授权页,即使是scope为snsapi_userinfo,也是静默授权,用户无感知。

具体而言,网页授权流程分为四步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

具体代码以及步骤如下:

第一步

点击菜单的url直接重定向到下面这个url即可,目的 “引导用户进入授权页面同意授权,获取code ”

https://open.weixin.qq.com/connect/oauth2/authorize?appid= + “自己的appid” + &redirect_uri= +“ 自己的url ”+ &response_type=code&scope=snsapi_base&state=1#wechat_redirect"

@GetMapping("cc")
public String cc(HttpServletRequest request) throws IOException {

    String code = request.getParameter("code");

    return "redirect:/https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxx&redirect_uri=http://www.xxx.com/aaa&response_type=code&scope=snsapi_base&state=1#wechat_redirect";

}


第二步

获取到code之后,就可以根据获取用户信息(这里详细见微信网页授权四步骤文档)
然后在controller 根据自己的需求执行其他逻辑。

@GetMapping("aaa")//重定向的url 也就是上面controller重定向的微信url里面重定向自己的url(http://www.xxx.com/aaa)
public String aa(HttpServletRequest request) throws IOException {
    String code = request.getParameter("code");
    return "success";
}

debug 结果

在这里插入图片描述

第三步

获取到授权后code,然后可以根据 网页授权(https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842)第2.3.4步步骤获取用户的信息,从而自己的实现业务逻辑。

注:

另外看到网上一部分大佬们直接将 将链接的url直接作为微信自定义菜单中view类型中的url  中。

结果我在postman中发了一次请求,直接报url长度错误,所以放弃了这种方案!
在这里插入图片描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容