分享好友 最新动态首页 最新动态分类 切换频道
Springboot微信公众号开发入门流程(校验签名、access_token获取、生成带参二维码、发送文字、图文消息、被动回复消息、图文消息静默跳转)
2024-12-28 06:38


微信公众号分为服务号、订阅号、企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以。

我们所说的微信公众号开发指的是订阅号和服务号。关于订阅号和服务号的区别,官方是这样解释的

  • 服务号**:主要偏向于服务交互(功能类似12315,114,银行,提供绑定信息,服务交互,每月可群发4条消息;服务号**适用人群:**媒体、企业、政府或其他组织。
  • 订阅号**:主要偏向于为用户传达资讯(功能类似报纸杂志,为用户提供新闻信息或娱乐趣事,每天可群发1条消息;订阅号适用人群:个人、媒体、企业、政府或其他组织。

因为微信用户每次向公众号发起请求时,微信服务器会先接收到用户的请求,然后再转发到我们的服务器上,微信服务器是要和我们的服务器进行网络交互,所以我们必须保证我们的服务器外网可以访问到,这种部署到公网服务器进行测试的做法对于我们开发者来说简直是噩梦。所以我们借用NATAPP可以实现内网穿透,意思就是我们可以将内网的服务器映射到外网给别人访问,这种方式会大幅度的减少我们的部署,调试时间,进行更加高效的编码。

可以参考微信的官方文档微信接入指南

接入微信公众平台开发,开发者需要按照如下步骤完成

  1. 填写服务器配置
  2. 验证服务器地址的有效性
  • url:是你的接口验证地址
  • token:可以随便进行填写,但是一定要与接口里面验证的token一致

点击提交验证服务器地址的有效性,这时微信服务器将发送一个http的get请求到刚刚填写的服务器地址,并且携带四个参数

参数描述signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。timestamp时间戳nonce随机数echostr随机字符串开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下
  1. 将token、timestamp、nonce三个参数进行字典序排序
  2. 将三个参数字符串拼接成一个字符串进行sha1加密
  3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

WxcharController.java

 

WechatServiceImpl

 

一个工具类SHA1

 

一个异常类AesException

 

接口写完后,开始在测试号进行校验,成功后我们的公众号应用已经能够和微信服务器正常通信了,也就是说我们的公众号已经接入到微信公众平台了。

官方文档链接
我们的公众号和微信服务器对接成功之后,接下来要做的就是根据我们的业务需求调用微信公众号提供的接口来实现相应的逻辑了。在使用微信公众号接口中都需要一个access_token。

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

总结以上说明,access_token需要做到以下两点

  1. 因为access_token有2个小时的时效性,要有一个机制保证最长2个小时重新获取一次。
  2. 因为接口调用上限每天2000次,所以不能调用太频繁。

公众号可以使用AppID和AppSecret调用本接口来获取access_token。
接口调用请求说明

https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数说明

参数是否必须说明grant_type是获取access_token填写client_credentialappid是第三方用户唯一凭证secret是第三方用户唯一凭证密钥,即appsecret

返回说明
正常情况下,微信会返回下述JSON数据包给公众号

{“access_token”: “ACCESS_TOKEN”,“expires_in”:7200}

参数说明

参数说明access_token获取到的凭证expires_in凭证有效时间,单位:秒

pom引入依赖

 

静态常量类WechatConstants

 

一个工具类MyX509TrustManager

 

一个工具类WeixinUtil

 
 
 

一个定时任务AccessTokenThread

 

需要在启动类中添加注解@EnableScheduling用来启动定时任务

 

到这时,项目启动时已经可以自动获取access_token并且完成修改,之后定时任务会自动一个半小时执行一次进行修改。

最近微信更改了稳定版接口调用凭据,我使用之前的方法经常会获取到的access_token经常无法使用,现在更新一下稳定版接口调用凭证。

//添加一个处理微信POST请求的方法

 

然后把定时任务AccessTokenThread中的代码改为

 
 

微信官方文档生成带参二维码

目前有2种类型的二维码

  1. 临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
  2. 永久二维码,是无过期时间的,但数量较少(目前为最多10万个)。永久二维码主要用于适用于帐号绑定、用户来源统计等场景

获取带参数的二维码的过程包括两步,首先创建二维码ticket,然后凭借ticket到指定URL换取二维码。

创建二维码ticket

每次创建二维码ticket需要提供一个开发者自行设定的参数(scene_id,分别介绍临时二维码和永久二维码的创建二维码ticket过程。

临时二维码请求说明

http请求方式: POST URL:

https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

POST数据格式:json POST数据例子:{“expire_seconds”: 604800, “action_name”: “QR_SCENE”, “action_info”: {“scene”: {“scene_id”: 123}}} 或者也可以使用以下POST数据创建字符串形式的二维码参数:{“expire_seconds”: 604800, “action_name”: “QR_STR_SCENE”, “action_info”: {“scene”: {“scene_str”: “test”}}}

永久二维码请求说明

http请求方式: POST URL:

https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

POST数据格式:json POST数据例子:{“action_name”: “QR_LIMIT_SCENE”, “action_info”: {“scene”: {“scene_id”: 123}}} 或者也可以使用以下POST数据创建字符串形式的二维码参数: {“action_name”: “QR_LIMIT_STR_SCENE”, “action_info”: {“scene”: {“scene_str”: “test”}}}

参数说明

参数说明expire_seconds该二维码有效时间,以秒为单位。 最大不超过2592000(即30天,此字段如果不填,则默认有效期为60秒。action_name二维码类型,QR_SCENE为临时的整型参数值,QR_STR_SCENE为临时的字符串参数值,QR_LIMIT_SCENE为永久的整型参数值,QR_LIMIT_STR_SCENE为永久的字符串参数值action_info二维码详细信息scene_id场景值ID,临时二维码时为32位非0整型,永久二维码时最大值为100000(目前参数只支持1–100000)scene_str场景值ID(字符串形式的ID,字符串类型,长度限制为1到64返回说明正确的Json返回结果:

{“ticket”:“gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm
3sUw==”,“expire_seconds”:60,“url”:“http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI”}

参数说明ticket获取的二维码ticket,凭借此ticket可以在有效时间内换取二维码。expire_seconds该二维码有效时间,以秒为单位。 最大不超过2592000(即30天)。url二维码图片解析后的地址,开发者可根据该地址自行生成需要的二维码图片通过ticket换取二维码

获取二维码ticket后,开发者可用ticket换取二维码图片。请注意,本接口无须登录态即可调用。

请求说明

HTTP GET请求(请使用https协议)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET 提醒:TICKET记得进行UrlEncode

返回说明

ticket正确情况下,http 返回码是200,是一张图片,可以直接展示或者下载。
错误情况下(如ticket非法)返回HTTP错误码404。

一个工具类QrcodeUtil

 

然后测试生成二维码

 

这时已经可以实现扫描二维码跳转公众号了。

微信官方文档接受普通消息 微信官方文档接收事件推送 微信官方文档被动回复用户消息 微信官方文档网页授权
这些文档中包含了接受普通消息,接收事件推送,被动回复用户消息,网页授权的一些xml案例,以及参数描述
可以详细阅读一下
具体的内容都在代码中展示,可以挑选自己需要的进行查看

引入依赖

 

在yml文件中填写一项域名,当然也可以一个一个放域名,然后修改,只不过有一些麻烦

 

一个工具类MessageUtil
使用的静默页面跳转,就是默认授权,用户不会感知到信息,直接跳转页面,如果想要传递参数,我通过网上试了试,目前session不行,我是使用的路径后用?拼接参数,前端拦截路径,获取到路径上的参数
记住跳转的前端最后路径不能带有#/,否则会在微信跳转的时候会报错

 

然后就是接口:是吧最开始的校验签名部分添加了一部分代码。
因为校验采用的是get请求,其余采用post请求,所以直接使用else即可,这里也就是微信的回调方法
用户通过关注进入微信后,会自动走入该方法。

最新文章
搜狗输入法PC版智能助手来了 双击唤起 输入效率超级加倍
  12月31日电 近日,搜狗PC输入法迎来重大更新,正式上线电脑版“智能助手”。  通过启用该助手,用户便可在智能助手页面中快速使用关键词表情推荐、OCR图片文字识别、划词快速翻译与搜索等智慧功能。并且只需双击AIT键,即可快速唤出
闭店率创新高后,古茗的上市之路终于近了一步
来源:@国际金融报微博年初交表后,经历近乎一年的等待,古茗的上市终于等到最新进展。近日,证监会官网显示,古茗的境外上市备案信息已获确认,公司拟发行不超过4.41亿股境外上市普通股,并在香港联合交易所上市。在香颂资本董事沈萌看来
【爱剪辑电脑版下载2024】爱剪辑 PC端最新版「含模拟器」
爱剪辑,一般又称爱剪辑手机版。爱剪辑软件app,专业视频剪辑编辑制作。
微信新规:升级版《微信外部链接内容管理规范》28日起施行
这两天,微信封杀拼团砍价链接冲上热搜#微信外链规范将升级:部分拼团砍价营销被禁据媒体报道,微信外链规范将新增4项规范,包括:不可违规使用用户头像;不可诱导、误导下载/跳转;不可进行好友助力、砍价等违规活动,不可以违规拼团等。
淘宝店铺应该怎么运营老顾客(解析淘宝店铺老顾客有哪些维护技巧)
做淘宝店越来越难,每天要引流,每天都在和淘宝内的店铺做竞争。虽然说淘宝的公域流量需要争取,但是淘宝还有很多私域流量是可以被开发的,比如最常见的就是老客户。那么老客户应该如何运营呢? 我们可以在后台看看自己的流量分析,虽然说每
百度申请搜索相关专利,基于搜索意图实现精准操作
金融界2024年12月18日消息,国家知识产权局信息显示,北京百度网讯科技有限公司申请一项名为“搜索方法、装置、设备、介质、程序产品及智能体”的专利,公开号 CN 119128228 A,申请日期为 2024 年 9 月。专利摘要显示,本公开提供了搜索方
游走外链吧,不如认清如下外链技巧
在SEO的浩瀚征途中,我深知,盲目追逐外链的数量无异于缘木求鱼。凭借多年的实战经验,我深刻体会到,质量永远胜于数量,尤其是在外链构建上。今天,就让我们一起揭开那些真正有效且被忽视的外链技巧的面纱。一、外链策略的精准定位在SEO的
百度蜘蛛池收录:揭秘最新百度蜘蛛池,技术革新背后的网络优化策略
最新百度蜘蛛池技术革新,揭秘其网络优化策略。本文深入解析了百度蜘蛛池的收录机制,探讨了如何通过技术手段提升网站在百度搜索中的排名,为网络优化提供新思路。本文目录导读:什么是百度蜘蛛池?最新百度蜘蛛池的特点最新百度蜘蛛池的功
人狗大战 PYTHON 代码——激发编程潜能的独特商品
在当今数字化时代,编程已经成为一项至关重要的技能。无论是开发软件、创建网站还是解决实际问题,编程都为我们提供了无限的可能性。而对于那些对编程充满热情的人来说,寻找一种独特而有趣的方式来激发他们的潜能是至关重要的。这就是为什
相关文章
推荐文章
发表评论
0评