方法介绍
前言
如果你能看到这篇博文,说明你目前正在进行【公众号开发】,希望这篇博文能帮助到你。
我在19年1月份更了第一篇关于微信开发的文章链接: 【微信授权登录:移动端(一)】,截止到现在也陆续的更新了微信公众号开发相关的其它功能实现。由于时间跨度大和其它原因。导致【微信公众号开发专栏】中的博文没办法整体连贯起来。内容相对独立,其中用的技术栈也不同。有些内容现在看起来已经不太适用了。奈何时间久远加上没有合适的机会的情况下,就没有去大刀阔斧的更新博文内容。
封装API是在21年2月开始的,在公司开发公众号的过程中,由于项目较多以及每个项目的功能实现可能不一样,就导致每个公众号里面都要写一些与其它项目重复的代码。有时候随着项目功能的变更就会导致关于微信功能开发的代码从一个项目Copy到另一个项目中,在这样的环境下产生了封装API的想法法,那就是减少重复的工作量,提高开发效率。使关注点放在业务。
1.工具介绍🔗
使用java语言开发的一个工具类,wxHelper
,旨在将实现公众号功能简单化,通过一个简单的方法调用实现功能。
1.1 环境介绍
工具 | idea |
语言 | JAVA |
框架 | SpringBoot |
JDK | 8 |
1.2 功能介绍
对微信公众号中的常用API进行了封装,通过简单的调用,即可实现功能,提高开发效率。对于token的处理,内置了缓存机制,以保证token的有效,无需担心token的过期情况。
1.3 源码地址
https://gitee.com/BuYaoPenXiangShui/wechat-packaging
这里提供一个已经打好的jar包:jar包下载
注
:此jar包版本教早,不过常用功能都有,需要最新版的,可点击上方地址查看下载
2.使用说明🔗
访问上方👆源码地址,将源码下载到本地后,打成jar包。然后引入自己的项目即可,也可使用上方提供的jar包。
本项目已在公司多个项目中使用,至今未发现任何问题,请放心使用,如果出现问题请先检查appid和密钥是否配置正确
如果以上问题确认无误后仍有问题,欢迎下方留言💬
2.1.Server说明
目前提供了一下几个Server类以供使用,这里简要说明下作用,后面会对其中的方法进行详细的说明。
入口类 | 作用 |
WeChatTokenCheckServer | 服务器配置(token验证) |
WeChatMenuServer | 自定义菜单 |
WeChatAuthServer | 微信网页授权 |
WeChatSNSAuthServer | 网页授权,获取用户相关信息 |
WeChatCgiBinServer | 基础接口调用 |
WeChatSignatureServer | 签名服务 |
WeChatMsgServer | 消息推送 |
2.2.引入jar包
1️⃣.项目根目录下创建lib文件夹,并添加jar包
2️⃣.修改pom.xml 文件
在pom.xml中,引入依赖即可,然后再根据自己的项目打包情况进行相应的配置即可。
1.引入依赖
<dependency>
<groupId>wx.control.centre</groupId>
<!--填写引入jar包包名-->
<artifactId>wxHelper</artifactId>
<!--填入版本号-->
<version>1.0</version>
<scope>system</scope>
<systemPath>${pom.basedir}/lib/wxHelper-1.0.jar</systemPath>
</dependency>
2.打包配置
如果你的项目要打包成war包,则进行如下配置👇
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webResources>
<resource>
<directory>${basedir}\lib</directory>
<targetPath>WEB-INF/lib/</targetPath>
<includes>
<include>**/*.jar</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
如果你的项目要打包成jar包,则进行如下配置👇
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
3.方法介绍🔗
所有的方法调用方式如下👇
xxxxServer.serverName(param);
1.服务器配置(token验证)
服务器配置开启后,自动回复和菜单设置将不能在微信公众平台中配置,只能通过api去配置。
📖相关博文📖 | 👉微信公众号-服务器配置(token验证) |
WeChatTokenCheckServer
①.token验证
方法 | 参数 | 说明 |
checkToken() | request | |
token | 微信公众平台配置的token值 |
2.自定义菜单
使用此功能需要先开启服务器配置
📖相关博文📖 | 👉微信公众号开发-自定义菜单 |
WeChatTokenCheckServer
①.创建菜单
方法 | 参数 | 说明 |
menuCreatWithAccessToken() | button:按钮数据集合 accessToken:基础接口中获取的值 appId:微信公众平台appId appSecret:微信公众平台appSecret | |
两个方法都是用来创建菜单的,只 是入参不一样 | ||
menuCreat() |
3.网页授权-回调地址
获取微信授权回调地址
📖相关博文📖 | 👉微信授权登录:移动端[unionid](一) |
WeChatAuthServer
①.获取微信授权回调地址
方法 | 参数 | 说明 | |
参数 | 说明 | ||
getAuthorizeUrl() | APPID | 第三方用户唯一凭证 | 此方法可以根据自己的业务自由传参。 |
getAuthorizeUrlByBase() | REDIRECT_URI | 授权后重定向的回调链接地址,无需使用urlEncode对链接进行处理 | 静默授权(不会弹出授权页面,直接跳转,只能获取用户openid)。 |
getAuthorizeUrlByUserInfo() | snsapi_userinfo | 授权后重定向的回调链接地址,无需使用urlEncode对链接进行处理 | 非静默授权(弹出授权页面,可通过openid拿到昵称、性别、所在地) |
返回的是一个授权地址,回调地址无需进行转码,方法已经处理。
4.网页授权-用户凭证
获取网页授权凭证(主要网页授权Access_Token和openId),此处的access_token为网页授权的,并非普通的access_token
注:
授权回调返回的code值只能使用一次
📖相关博文📖 | 👉微信授权登录:移动端[unionid](一) |
WeChatSNSAuthServer
①.获取授权凭证
获取accessToken和openId
方法 | 参数 | 说明 |
getOauth2TokenByCode() | appId | 公众号的唯一标识 |
appSecret | 公众号的appsecret | |
Code | 填写授权后获取的code参数(跟在回调路由后) |
参数 | 说明 |
accessToken | 网页授权接口调用凭证 |
expiresIn | 凭证有效时长 |
refreshToken | 用于刷新凭证 |
openId | 用户标识 |
scope | 用户授权作用域 |
②.获取openId
仅获取openId,请勿与 getOauth2TokenByCode()同时使用
方法 | 参数 | 说明 |
getOpenIdByCode() | appId | 公众号的唯一标识 |
appSecret | 公众号的appsecret | |
Code | 填写授权后获取的code参数(跟在回调路由后) |
③.获取用户信息
获取微信用户信息-网页授权作用域为snsapi_userinfo时生效。
方法 | 参数 | 说明 |
getSnsUserInfo() | openId | 用户的openId |
accessToken | 第①个方法中获取的accessToken |
返回用户信息,使用 SNSUserInfo 对象接收,SNSUserInfo 对象参数如下:👇
用户头像链接用户特权信息(即将废弃)参数 | 说明 |
openId | 用户标识 |
nickname | 用户昵称 |
sex | 性别(1是男性,2是女性,0是未知) |
country | 国家 |
province | 省份 |
city | 城市 |
headImgUrl | 国家 |
privilegeList | 国家 |
unionid | 用户unionid,需要绑定开放平台才会获取到 |
④.获取refresh_token
获取refresh_token 用于刷新access_token(如果需要)
方法 | 参数 | 说明 |
getRefreshTokenByCode() | appId | 公众号的唯一标识 |
appSecret | 公众号的appsecretn | |
Code | 填写授权后获取的code参数(跟在回调路由后) |
⑤.刷新access_token
方法 | 参数 | 说明 |
refreshToken() | appId | 公众号的唯一标识 |
refreshToken | 通过getRefreshTokenByCode获取到的refresh_token参数值 |
⑥.检验授权凭证
方法 | 参数 | 说明 |
checkSnsAuth() | openId | 用户标识 |
accessToken | 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同 |
5.基础支持
主要用于获取token,直接调用方法获取就行,不用担心token过期的情况。
WeChatCgiBinServer
①.获取token
方法 | 参数 | 说明 |
getToken() | appId | 公众号的唯一标识 |
appSecret | 公众号的appsecret |
②.获取ticket
方法 | 参数 | 说明 |
getTicket()() | accessToken | getToken()获取的值 |
6.签名获取(用户分享)
获取签名,用于实现分享功能
📖相关博文📖 | 👉微信分享开发:代码实现[前端+后端](二) |
WeChatSignatureServer
①.获取签名
获取签名,通过appId和secert
方法 | 参数 | 说明 |
getSignature() | AppId | 公众号的唯一标识 |
SECRET | 公众号的appsecret | |
url | 当前网页的URL,不包含#及其后面部分 |
②.获取签名
获取签名,通过jsapiTicket
方法 | 参数 | 说明 |
getSignatureByTicket() | AppId | 公众号的唯一标识 |
jsapiTicket | WeChatCgiBinServer.getTicket(String accessToken) | |
url | 当前网页的URL,不包含#及其后面部分 |
返回数据使用JSONObject接收,参数如下:👇
参数 | 说明 |
state | 状态值 |
appId | 公众号的唯一标识 |
timestamp | 时间戳 |
nonceStr | 随机码 |
signature | 签名 |
jsapi_ticket | ticket |
7.消息推送(模板消息)
消息推送,目前仅实现了消息模板推送,使用此方法时,注意模板参数,此方法用的是
keyword,请知悉
📖相关博文📖 | 👉微信公众号消息推送开发(模板消息):开发实现(二) |
WeChatMsgServer
①.根据模板id推送消息
根据模板id推送消息-接收对象 Message
方法 | 参数 | 说明 |
templateSend() | vo | Message 对象 |
accessToken | accessToken |
参数 | 说明 |
toUser | 接收者openid |
templateId | 模板ID |
title | 标题 |
remark | 备注 |
keyword1 | keyword1 |
keyword2 | keyword2 |
keyword3 | keyword3 |
keyword4 | keyword4 |
keyword5 | keyword5 |
smUrl | 模板跳转链接(海外帐号没有跳转能力) |
smAppId | 所需跳转到的小程序appid(该小程序appid必须与发模板消息 的公众号是绑定关联关系,暂不支持小游戏) 不跳转小程序可不填 |
smPagePath | 所需跳转到小程序的具体页面路径,支持带参数,(示例index?foo=bar), 要求该小程序已发布,暂不支持小游戏)不跳转小程序可不填 |
remarkColor | 备注字体颜色,不填默认为黑色 |
titleColor | 标题字体颜色,不填默认为黑色 |