Springboot微信公众号开发入门流程(校验签名、access_token获取、生成带参二维码、发送文字、图文消息、被动回复消息、图文消息静默跳转)

   日期:2024-12-28    作者:jj840224jj 移动:http://3jjewl.riyuangf.com/mobile/quote/76567.html


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

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

  • 服务号**:主要偏向于服务交互(功能类似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即可,这里也就是微信的回调方法
用户通过关注进入微信后,会自动走入该方法。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号