自定义菜单url不能带_微服务架构【SpringBoot+SpringCloud+VUE】五 || 实战项目微信公众号自定义开发...
本章主要讲解微信公众号自定义菜单、微信网页开发、模板消息推送等功能的实现;
发福利了,下方关注公众号,就能免费获取项目源码
1、自定义菜单
开发前需要了解以下几点:
1、微信公众号的自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以“...”代替。
3、自定义菜单接口可实现多种类型按钮,本教程主要实现以下两个按钮,更多按钮参照官方文档:
click:点击推事件按钮
view:跳转URL按钮
创建自定义菜单接口调用请求说明
http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
click和view的请求示例如下所示:
{"button":[ { "type":"click","name":"今日歌曲","key":"V1001_TODAY_MUSIC" }, {"name":"菜单","sub_button":[ { "type":"view","name":"搜索","url":"http://www.soso.com/" }, {"type":"miniprogram","name":"wxa","url":"http://mp.weixin.qq.com","appid":"wx286b93c14bbf93aa","pagepath":"pages/lunar/index" }, {"type":"click","name":"赞一下我们","key":"V1001_GOOD" }] }] }
下面我们基于mp框架创建公众号菜单:需要项目源码的请下方关注公众号获取
现在我们要实现如图所示的菜单,我们应该如何去实现?
我们只用调用WxMpService的getMenuService()方法,获取WxMpMenuService,该类下封装了菜单的查询、删除、创建等方法,调用menuCreate方法可以创建自定义菜单,方法如下:
WxMenu menu = new WxMenu();WxMenuButton button1 = new WxMenuButton();button1.setType(WxConsts.MenuButtonType.CLICK);button1.setName("今日热点");button1.setKey("V1001_TODAY_MUSIC");
WxMenuButton button2 = new WxMenuButton();button2.setType(WxConsts.MenuButtonType.CLICK);button2.setName("发布信息");button2.setKey("V1001_TODAY_MUSIC");
WxMenuButton button3 = new WxMenuButton();button3.setName("用户中心");
menu.getButtons().add(button1);menu.getButtons().add(button2);menu.getButtons().add(button3);
WxMenuButton button31 = new WxMenuButton();button31.setType(WxConsts.MenuButtonType.VIEW);button31.setName("搜索");button31.setUrl("http://www.soso.com/");
WxMenuButton button32 = new WxMenuButton();button32.setType(WxConsts.MenuButtonType.VIEW);button32.setName("视频");button32.setUrl("http://v.qq.com/");
WxMenuButton button33 = new WxMenuButton();button33.setType(WxConsts.MenuButtonType.CLICK);button33.setName("个人信息");button33.setKey("V1001_GOOD");
WxMenuButton button34 = new WxMenuButton();button34.setType(WxConsts.MenuButtonType.VIEW);button34.setName("获取用户信息");
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();if (servletRequestAttributes != null) { HttpServletRequest request = servletRequestAttributes.getRequest(); URL requestURL = new URL(request.getRequestURL().toString()); String url = this.wxService.switchoverTo(appid).getOAuth2Service().buildAuthorizationUrl( String.format("%s://%s/wx/redirect/%s/greet", requestURL.getProtocol(), requestURL.getHost(), appid), WxConsts.OAuth2Scope.SNSAPI_USERINFO, null); button34.setUrl(url);}
button3.getSubButtons().add(button31);button3.getSubButtons().add(button32);button3.getSubButtons().add(button33);button3.getSubButtons().add(button34);
this.wxService.switchover(appid);return this.wxService.getMenuService().menuCreate(menu);
2、微信网页开发
我们现在要实现这么一个功能,用户点击菜单,进入到我们自己开发的H5页面,同时要获取用户的信息,应该如何去实现?
下面我看一个官方文档:如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。步骤如下:
1 第一步:用户同意授权,获取code
2 第二步:通过code换取网页授权access_token
3 第三步:刷新access_token(如果需要)
4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
5 附:检验授权凭证(access_token)是否有效
2.1、获取code
应用授权作用域有两种方式:snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
我们只需要按照字段顺序组装如下url地址,
redirect_uri为你自己服务端的回调地址;
scope可以选择snsapi_base或者snsapi_userinfo;
response_type固定填写code;
state重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值;
#wechat_redirect
无论直接打开还是做页面302重定向时候,必须带此参数
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
我们在微信端访问该地址,会通过回调地址把code带过来
后端代码实现如下所示:
HttpServletRequest request = servletRequestAttributes.getRequest();URL requestURL = new URL(request.getRequestURL().toString());String url = this.wxService.switchoverTo(appid).getOAuth2Service().buildAuthorizationUrl( String.format("%s://%s/wx/redirect/%s/greet", requestURL.getProtocol(), requestURL.getHost(), appid), WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
2.2、通过code换取网页授权access_token
请求方法:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
后端代码实现比较简单,通过以下方法就能获取到用户信息:
WxMpOAuth2AccessToken accessToken = wxService.getOAuth2Service().getAccessToken(code);WxMpUser user = wxService.getOAuth2Service().getUserInfo(accessToken, null);
2.3、刷新access_token
由于access_token拥有较短的有效期,当access_token超时后,可以使用refresh_token进行刷新,refresh_token有效期为30天,当refresh_token失效之后,需要用户重新授权。
获取第二步的refresh_token后,请求以下链接获取access_token:https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
我们只用调用wxService.getOAuth2Service().refreshAccessToken(refresh_token)方法就可以实现刷新token,是不是非常的简单。
2.4、拉取用户信息
如果网页授权作用域为snsapi_userinfo,则可以通过access_token和openid获取用户信息。
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
同样,后端方法也非常简单,只用调用wxService.getOAuth2Service().getUserInfo();即可。
3、模板消息推送
我们需要实现一个功能,公众号平台需要给用户主动推送消息,例如:支付的通知、通知、公告等;如下图所示,我需要给用户推送如下信息,该如何实现?
首先,我们进入到公众平台创建模板消息,点击新增测试模板
进入模板添加页面后,需要填写模板标题和内容,标题就是上图所示的重要通知,而模板内容我们想写成动态,如何实现?我们只用按{{first.DATA}}这样的格式,就可以通过后端传入我们需要的内容:我们模板方法中有两个动态参数,分别是{{first.DATA}},和{{remark.DATA}},后端代码实现如下:
@GetMapping("/send")public void testSendTemplateMsg() throws WxErrorException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() .toUser("oiAsTwtKx4qzbwuRozjSO7NvXD_A") .templateId("-sJvjdzIpKyH4MTi-c0A5HAfrxgWCyvmrHhcQB1fk-Q") .url(" ") .build(); templateMessage.addData(new WxMpTemplateData("first", dateFormat.format(new Date()), "#FF00FF")) .addData(new WxMpTemplateData("remark", "公众号上线啦", "#FF00FF")); String msgId = this.wxService.getTemplateMsgService().sendTemplateMsg(templateMessage);}
其中.toUser为发送给哪个用户,参数为openId,如何获取openId,就需要通过上面的网页授权获取了
.templateId()为模板id,我们在传教了模板之后会有一个id,把该id填入到该参数里面
first模板中的{{first.DATA}}参数,同理remark为模板中的{{remark.DATA}}参数,可以把{{XX.DATA}}理解为占位符,调用以上方法,就会把内容通知到用户的公众号。
本章内容就讲解到这,微信公众号更多的个性化开发查看官方文档以及开源框架文档,下一期带大家学习如何通过mq实现消息的阶梯式通知。
4、学习交流QQ群【883210148】
5、关注微信公众号,免费获取文档及资源
自定义菜单url不能带_微服务架构【SpringBoot+SpringCloud+VUE】五 || 实战项目微信公众号自定义开发...相关推荐
- 微服务架构,springcloud核心组件和实战,docker容器
文章目录 前言 一.微服务开发基础 1.微服务架构开发 1.1单体架构的应用的困境 1.2 微服务架构 1.2.1 理解微服务架构 1.2.1 微服务的优缺点 1.3 微服务架构设计 1.3.1 微服 ...
- 网站如何经过身份验证_微服务架构如何保证安全性?
网络安全已成为每个企业都面临的关键问题.几乎每天都有关于黑客如何窃取公司数据的头条新闻. 为了开发安全的软件并远离头条新闻,企业需要解决各种安全问题,包括硬件的物理安全性.传输和静态数据加密.身份验证 ...
- 微信公众号自定义菜单和推送模板消息
1.微信公众号测试账号: 找到服务号的开发文档,点击进去. Java代码: 准备工作: (1)填写JS接口安全域名 (2)填写接口配置信息: (2)java的Token验证接口 @RequestMap ...
- springboot微信公众号自定义菜单创建及响应
微信公众号自定义菜单创建及响应 前言 本篇博客是为了速度开发微信公众号而进行讲解,对于深入的原理性讲解推荐去观看微信公众平台的官方文档. 微信公众号分为订阅号,服务号,小程序,本篇主要是介绍的订阅号开 ...
- java 创建自定义菜单_Java实现微信公众号自定义菜单的创建方法示例
本文实例讲述了Java实现微信公众号自定义菜单的创建方法.分享给大家供大家参考,具体如下: 开发公众号的时候可能需要给一些自定义菜单添加事件,比如点击某菜单然后服务端给用户推送信息. 我们也可以使用微 ...
- 【微服务架构】SpringCloud组件和概念介绍
[微服务架构]SpringCloud组件和概念介绍(一) 一:什么是微服务(Microservice)微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为 ...
- 微信公众号自定义菜单设置教程
微信公众号菜单等功能如何开通 自定义菜单最大的优点是减少了用户的认知门槛,可以将公众账号里的重点信息入口直观的暴露给用户.当用户进入到公众账号时,可以一目了然的了解相关的服务,只需要点击,不需要再通过 ...
- python 公众号菜单_Python微信公众号后台开发003:自定义菜单
有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了 ...
- Python微信公众号后台开发003:自定义菜单
有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了 ...
最新文章
- 整流、开关、肖特基区别
- 建立数组并写入数据_VBA学习笔记19:数组1
- vijos P1009清帝之惑之康熙
- cocos2dx 物理碰撞
- 提高对邮件的认识,两类邮件都要重视!!(不光有和客户的邮件工作方面的,还有单位的邮件一些联系事项),还有要自己看清楚邮件的全部内容,不要丢三落四!!
- Word与Excel展示Oracle BI Publisher页签
- 快速比对源代码的工具_推荐7个代码对比工具
- 2008 r2安装总是跳出 server sql_Microsoft SQL Server 2008 R2 安装遇到的问题
- 【HDU】5208 Where is Bob 【DP】
- 手机测试Android模块,五个有用的Xposed模块,用于自定义您的Rooted Android手机 | MOS86...
- 电脑录屏是哪个快捷键?3个录屏快捷键,教你快速录屏
- 红宝书背诵笔记 — 简单基础词语,Java视频教程百度网盘
- 洛谷-P2006 赵神牛的游戏
- MC指令java,我的世界Java版指令有哪些-我的世界Java版常用指令分享-沧浪手游
- c++数据结构350、121
- Android开发中保存数据的四种方法方法
- Visual Studio 2010安装、配置及使用
- 把codeblock变好看
- python爬虫爬取必应每日高清壁纸
- max 和 argmax的区别
热门文章
- python中restful接口开发实例_Python RESTful接口开发02
- app开发人脸登录和指纹登录_易讯云通讯推出“一键登录”,为App登录提供新方案...
- 外部函数能修改闭包内的变量_Python函数式编程,Python闭包
- 微型计算机在温室管理中的应用初探,文献综述-测控051-陈杰.doc
- ajax 请求post和get,ajax请求get和post
- uilabel 自行撑开高度_IOS UILabel自適應里面的文字,自動調整寬度和高度的
- opensips简介
- 基于 Android NDK 的学习之旅-----序言
- wince6.0开机自启动应用程序
- 进程控制1--fork vfork函数