微信公众号分为服务号、订阅号、企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以。
我们所说的微信公众号开发指的是订阅号和服务号。关于订阅号和服务号的区别,官方是这样解释的
- 服务号**:主要偏向于服务交互(功能类似12315,114,银行,提供绑定信息,服务交互),每月可群发4条消息;服务号**适用人群:**媒体、企业、政府或其他组织。
- 订阅号**:主要偏向于为用户传达资讯,(功能类似报纸杂志,为用户提供新闻信息或娱乐趣事),每天可群发1条消息;订阅号适用人群:个人、媒体、企业、政府或其他组织。
因为微信用户每次向公众号发起请求时,微信服务器会先接收到用户的请求,然后再转发到我们的服务器上,微信服务器是要和我们的服务器进行网络交互,所以我们必须保证我们的服务器外网可以访问到,这种部署到公网服务器进行测试的做法对于我们开发者来说简直是噩梦。所以我们借用NATAPP可以实现内网穿透,意思就是我们可以将内网的服务器映射到外网给别人访问,这种方式会大幅度的减少我们的部署,调试时间,进行更加高效的编码。
可以参考微信的官方文档微信接入指南
接入微信公众平台开发,开发者需要按照如下步骤完成:
- 填写服务器配置
- 验证服务器地址的有效性
- url:是你的接口验证地址
- token:可以随便进行填写,但是一定要与接口里面验证的token一致
点击提交验证服务器地址的有效性,这时微信服务器将发送一个http的get请求到刚刚填写的服务器地址,并且携带四个参数
- 将token、timestamp、nonce三个参数进行字典序排序
- 将三个参数字符串拼接成一个字符串进行sha1加密
- 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
WxcharController.java
WechatServiceImpl
一个工具类SHA1
一个异常类AesException
接口写完后,开始在测试号进行校验,成功后我们的公众号应用已经能够和微信服务器正常通信了,也就是说我们的公众号已经接入到微信公众平台了。
官方文档链接
我们的公众号和微信服务器对接成功之后,接下来要做的就是根据我们的业务需求调用微信公众号提供的接口来实现相应的逻辑了。在使用微信公众号接口中都需要一个access_token。
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
总结以上说明,access_token需要做到以下两点:
- 因为access_token有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
参数说明
返回说明
正常情况下,微信会返回下述JSON数据包给公众号:
{“access_token”: “ACCESS_TOKEN”,“expires_in”:7200}
参数说明
pom引入依赖
静态常量类WechatConstants
一个工具类MyX509TrustManager
一个工具类WeixinUtil
一个定时任务AccessTokenThread
需要在启动类中添加注解@EnableScheduling用来启动定时任务
到这时,项目启动时已经可以自动获取access_token并且完成修改,之后定时任务会自动一个半小时执行一次进行修改。
最近微信更改了稳定版接口调用凭据,我使用之前的方法经常会获取到的access_token经常无法使用,现在更新一下稳定版接口调用凭证。
//添加一个处理微信POST请求的方法
然后把定时任务AccessTokenThread中的代码改为
微信官方文档生成带参二维码
目前有2种类型的二维码:
- 临时二维码,是有过期时间的,最长可以设置为在二维码生成后的30天(即2592000秒)后过期,但能够生成较多数量。临时二维码主要用于帐号绑定等不要求二维码永久保存的业务场景
- 永久二维码,是无过期时间的,但数量较少(目前为最多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”}}}
参数说明
{“ticket”:“gQH47joAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL2taZ2Z3TVRtNzJXV1Brb3ZhYmJJAAIEZ23sUwMEmm
3sUw==”,“expire_seconds”:60,“url”:“http://weixin.qq.com/q/kZgfwMTm72WWPkovabbI”}
获取二维码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即可,这里也就是微信的回调方法
用户通过关注进入微信后,会自动走入该方法。