本章主要讲解微信公众号自定义菜单、微信网页开发、模板消息推送等功能的实现;

发福利了,下方关注公众号,就能免费获取项目源码

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】五 || 实战项目微信公众号自定义开发...相关推荐

  1. 微服务架构,springcloud核心组件和实战,docker容器

    文章目录 前言 一.微服务开发基础 1.微服务架构开发 1.1单体架构的应用的困境 1.2 微服务架构 1.2.1 理解微服务架构 1.2.1 微服务的优缺点 1.3 微服务架构设计 1.3.1 微服 ...

  2. 网站如何经过身份验证_微服务架构如何保证安全性?

    网络安全已成为每个企业都面临的关键问题.几乎每天都有关于黑客如何窃取公司数据的头条新闻. 为了开发安全的软件并远离头条新闻,企业需要解决各种安全问题,包括硬件的物理安全性.传输和静态数据加密.身份验证 ...

  3. 微信公众号自定义菜单和推送模板消息

    1.微信公众号测试账号: 找到服务号的开发文档,点击进去. Java代码: 准备工作: (1)填写JS接口安全域名 (2)填写接口配置信息: (2)java的Token验证接口 @RequestMap ...

  4. springboot微信公众号自定义菜单创建及响应

    微信公众号自定义菜单创建及响应 前言 本篇博客是为了速度开发微信公众号而进行讲解,对于深入的原理性讲解推荐去观看微信公众平台的官方文档. 微信公众号分为订阅号,服务号,小程序,本篇主要是介绍的订阅号开 ...

  5. java 创建自定义菜单_Java实现微信公众号自定义菜单的创建方法示例

    本文实例讲述了Java实现微信公众号自定义菜单的创建方法.分享给大家供大家参考,具体如下: 开发公众号的时候可能需要给一些自定义菜单添加事件,比如点击某菜单然后服务端给用户推送信息. 我们也可以使用微 ...

  6. 【微服务架构】SpringCloud组件和概念介绍

    [微服务架构]SpringCloud组件和概念介绍(一) 一:什么是微服务(Microservice)微服务英文名称Microservice,Microservice架构模式就是将整个Web应用组织为 ...

  7. 微信公众号自定义菜单设置教程

    微信公众号菜单等功能如何开通 自定义菜单最大的优点是减少了用户的认知门槛,可以将公众账号里的重点信息入口直观的暴露给用户.当用户进入到公众账号时,可以一目了然的了解相关的服务,只需要点击,不需要再通过 ...

  8. python 公众号菜单_Python微信公众号后台开发003:自定义菜单

    有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了 ...

  9. Python微信公众号后台开发003:自定义菜单

    有同学问道微信公众号后台开发的自定义菜单怎么实现? 这个问题本来想放到后面的,因为的确对公众号的影响挺明显的, 因为开启后台服务,公众号的自定义菜单就不见了,很影响使用, 也有同学问这个问题,就提前了 ...

最新文章

  1. 整流、开关、肖特基区别
  2. 建立数组并写入数据_VBA学习笔记19:数组1
  3. vijos P1009清帝之惑之康熙
  4. cocos2dx 物理碰撞
  5. 提高对邮件的认识,两类邮件都要重视!!(不光有和客户的邮件工作方面的,还有单位的邮件一些联系事项),还有要自己看清楚邮件的全部内容,不要丢三落四!!
  6. Word与Excel展示Oracle BI Publisher页签
  7. 快速比对源代码的工具_推荐7个代码对比工具
  8. 2008 r2安装总是跳出 server sql_Microsoft SQL Server 2008 R2 安装遇到的问题
  9. 【HDU】5208 Where is Bob 【DP】
  10. 手机测试Android模块,五个有用的Xposed模块,用于自定义您的Rooted Android手机 | MOS86...
  11. 电脑录屏是哪个快捷键?3个录屏快捷键,教你快速录屏
  12. 红宝书背诵笔记 — 简单基础词语,Java视频教程百度网盘
  13. 洛谷-P2006 赵神牛的游戏
  14. MC指令java,我的世界Java版指令有哪些-我的世界Java版常用指令分享-沧浪手游
  15. c++数据结构350、121
  16. Android开发中保存数据的四种方法方法
  17. Visual Studio 2010安装、配置及使用
  18. 把codeblock变好看
  19. python爬虫爬取必应每日高清壁纸
  20. max 和 argmax的区别

热门文章

  1. python中restful接口开发实例_Python RESTful接口开发02
  2. app开发人脸登录和指纹登录_易讯云通讯推出“一键登录”,为App登录提供新方案...
  3. 外部函数能修改闭包内的变量_Python函数式编程,Python闭包
  4. 微型计算机在温室管理中的应用初探,文献综述-测控051-陈杰.doc
  5. ajax 请求post和get,ajax请求get和post
  6. uilabel 自行撑开高度_IOS UILabel自適應里面的文字,自動調整寬度和高度的
  7. opensips简介
  8. 基于 Android NDK 的学习之旅-----序言
  9. wince6.0开机自启动应用程序
  10. 进程控制1--fork vfork函数