使用Spring Boot与wxjava开发工具包的配合方法
最编程
2024-02-12 22:33:43
...
wxjava开发工具包的用法
文档地址: https://github.com/Wechat-Group/WxJava/tree/master/spring-boot-starters/wx-java-mp-spring-boot-starter
首先创建一个springboot的项目
1.引入依赖
<!--微信公众号-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>wx-java-mp-spring-boot-starter</artifactId>
<version>3.6.0</version>
</dependency>
2.添加配置(application.yml)
wx:
mp:
app-id: wxda9310f1c0856d02
secret: 0ebeaf8669ea726bc4e4140149c8572c
token: xiaomin
aes-key:
接入微信公众号开发
用的是测试的账号,登录微信公众平台,进入测试账号
在将你的服务器接入到微信平台的时候,以及每次微信推送消息给你的服务器的时候,你都应该按照微信的要求对推送过来的消息进行校验,确保这些消息是从微信平台发送过来的。
wxMpService.checkSignature()方法是做校验的
package com.xiaomin.wechat_brn.controller;
import me.chanjar.weixin.mp.api.WxMpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WxVerifyController {
@Autowired
private WxMpService wxMpService;
@GetMapping("/welcome")
public String welcome(String signature, String timestamp, String nonce, String echostr) throws Exception {
if (!wxMpService.checkSignature(timestamp, nonce, signature)) {
// 消息签名不正确,说明不是公众平台发过来的消息
return null;
}
// 消息合法
return echostr;
}
}
配置成功,那么就说明接入成功
被动回复用户消息
@Autowired
private WxMpService wxMpService;
基本的实现都在这个接口里面,熟悉这个接口就行了
package com.xiaomin.wechat_brn.controller;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
/**
* 同步回复消息(被动回复)
*/
@RestController
public class WxMsgController {
@Autowired
private WxMpService wxMpService;
@PostMapping("/welcome")
public String welcome(HttpServletRequest request) throws Exception {
//获取消息流,并解析xml
WxMpXmlMessage message=WxMpXmlMessage.fromXml(request.getInputStream());
System.out.println(message.toString());
//消息类型
String messageType=message.getMsgType();
System.out.println("消息类型:"+messageType);
//发送者帐号
String fromUser=message.getFromUser();
System.out.println("发送者账号:"+fromUser);
//开发者微信号
String touser=message.getToUser();
System.out.println("开发者微信:"+touser);
//文本消息 文本内容
String text=message.getContent();
System.out.println("文本消息:"+text);
//获取微信服务器的IP地址
/*String[] callbackIP = wxMpService.getCallbackIP();
for(int i=0;i<callbackIP.length;i++){
System.out.println("IP地址"+i+":"+callbackIP[i]);
}*/
/**
* 文本消息
*/
if(messageType.equals("text")){
WxMpXmlOutTextMessage texts=WxMpXmlOutTextMessage
.TEXT()
.toUser(fromUser)
.fromUser(touser)
.content("欢迎光临,热烈欢迎")
.build();
String result = texts.toXml();
System.out.println("响应给用户的消息:"+result);
return result;
}
/**
* 图片消息
*/
if(messageType.equals("image")){
//创建file对象
File file=new File("lyf.jpg");
//上传多媒体文件
WxMediaUploadResult wxMediaUploadResult = wxMpService.getMaterialService().mediaUpload(WxConsts.MediaFileType.IMAGE, file);
WxMpXmlOutImageMessage images = WxMpXmlOutMessage.IMAGE()
.mediaId(wxMediaUploadResult.getMediaId())//获取上传到微信服务器的临时素材mediaid.
.fromUser(touser)
.toUser(fromUser)
.build();
String result = images.toXml();
System.out.println("响应给用户的消息:"+result);
return result;
}
/**
* 音乐
*/
if(messageType.equals("misic")){
//创建file对象
File file=new File("E:\\music\\qx.mp3");
//上传多媒体文件
WxMediaUploadResult wxMediaUploadResult = wxMpService.getMaterialService().mediaUpload(WxConsts.MediaFileType.VOICE, file);
WxMpXmlOutMusicMessage musics = WxMpXmlOutMessage.MUSIC()
.fromUser(fromUser)
.toUser(touser)
.title("枪声")
.description("最强震撼枪声")
.hqMusicUrl("高质量音乐链接,WIFI环境优先使用该链接播放音乐")
.musicUrl("缩略图的媒体id,通过素材管理中的接口上传多媒体文件,得到的id")
.thumbMediaId(wxMediaUploadResult.getMediaId())
.build();
String result = musics.toXml();
System.out.println("响应给用户的消息:"+result);
return result;
}
return null;
}
}
网页授权
构造网页授权url
核心代码
//构造网页授权url
String redirect_uri="http://xiaomin.xiaomy.net/getCode";//回调的url
String url = wxMpService.oauth2buildAuthorizationUrl(redirect_uri, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
/**
* 文本消息
*/
if(messageType.equals("text")){
//如果用户输入的是登录,那么进行网页授权
if(text.equals("登录")){
//构造网页授权url
String redirect_uri="http://xiaomin.xiaomy.net/getCode";//回调的url
String url = wxMpService.oauth2buildAuthorizationUrl(redirect_uri, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null);
WxMpXmlOutTextMessage texts=WxMpXmlOutTextMessage
.TEXT()
.toUser(fromUser)
.fromUser(touser)
.content("点击<a href=\""+url+"\">这里</a>登录")
.build();
String result = texts.toXml();
System.out.println("响应给用户的消息:"+result);
return result;
}
WxMpXmlOutTextMessage texts=WxMpXmlOutTextMessage
.TEXT()
.toUser(fromUser)
.fromUser(touser)
.content("欢迎光临,热烈欢迎")
.build();
String result = texts.toXml();
System.out.println("响应给用户的消息:"+result);
return result;
}
用户点击后会来到回调的url上来
package com.xiaomin.wechat_brn.controller;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
import me.chanjar.weixin.mp.bean.result.WxMpUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author 晓敏
* @create 2020-04-03 14:44
*/
@Controller
public class WxAuthorController {
@Autowired
private WxMpService wxMpService;
/**
* 网页授权
* 1 第一步:用户同意授权,获取code
* <p>
* 2 第二步:通过code换取网页授权access_token
* <p>
* 3 第三步:刷新access_token(如果需要)
* <p>
* 4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
*
* @param code
* @return
*/
@GetMapping("/getCode")
@ResponseBody
public String getCode(String code)throws Exception{
//1 第一步:用户同意授权,获取code
System.out.println(code);
//2 第二步:通过code换取网页授权access_token
WxMpOAuth2AccessToken wxMpOAuth2AccessToken = wxMpService.oauth2getAccessToken(code);
//4 第四步:拉取用户信息(需scope为 snsapi_userinfo)
WxMpUser wxMpUser = wxMpService.oauth2getUserInfo(wxMpOAuth2AccessToken,null);
return wxMpUser.toString();
}
}
截图:
代码下载:
链接:https://pan.baidu.com/s/1qQm9Lqh6TYWFhM_KXfDr0A
提取码:8ev6
复制这段内容后打开百度网盘手机App,操作更方便哦