JAVA微信开发总结的代码分享
本文是针对JAVA微信开发过程中的总结以及开发经验做的一份总结,包括微信公众号菜单配置以及消息处理等方面。下面我将分享一些相关的代码实现。
首先,我们需要在微信公众平台中配置菜单,代码实现如下:
public class WechatMenuUtil {
private static Logger log = LoggerFactory.getLogger(WechatMenuUtil.class);
public static void createMenu(String menu) {
String accessToken = AccessTokenUtil.getAccessToken().getToken();
String url = "https://api.weixin.qq" +
".com/cgi-bin/menu/create?access_token=" + accessToken;
JSONObject result = JSONObject.parseObject(HttpUtil.sendPost(url,menu));
if (result.getInteger("errcode")!=0){
log.error("菜单创建失败:"+result.toJSONString());
}else {
log.info("菜单创建成功");
}
}
}
其中,AccessTokenUtil类负责向微信服务器请求获取access_token。HttpUtil类用于发起http请求,对应代码如下:
public class HttpUtil {
private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
public static String sendGet(String url){
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response;
try {
response = httpClient.execute(httpGet);
HttpEntity entity = response.getEntity();
if (entity != null) {
String result = EntityUtils.toString(entity, "UTF-8");
return result;
}
} catch (IOException e) {
log.error("http请求出错",e);
}
return null;
}
public static String sendPost(String url,String data){
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Content-Type","application/json;charset=UTF-8");
StringEntity stringEntity = new StringEntity(data,Charset.forName("UTF-8"));
httpPost.setEntity(stringEntity);
CloseableHttpResponse response;
try {
response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
if (entity != null) {
String result = EntityUtils.toString(entity, "UTF-8");
return result;
}
} catch (IOException e) {
log.error("http请求出错",e);
}
return null;
}
}
接着,我们需要处理微信公众号接收到的请求消息,主要涉及到文本、图片、语音、视频和链接消息处理,对应代码如下:
public class WechatMessageService implements MessageService {
private static final Logger log = LoggerFactory.getLogger(WechatMessageService.class);
@Override
public String processTextMessage(TextMessage textMessage) {
// 处理文本消息
return null;
}
@Override
public String processImageMessage(ImageMessage imageMessage) {
// 处理图片消息
return null;
}
@Override
public String processVoiceMessage(VoiceMessage voiceMessage) {
// 处理语音消息
return null;
}
@Override
public String processVideoMessage(VideoMessage videoMessage) {
// 处理视频消息
return null;
}
@Override
public String processLinkMessage(LinkMessage linkMessage) {
// 处理链接消息
return null;
}
@Override
public String processLocationMessage(LocationMessage locationMessage) {
// 处理地理位置消息
return null;
}
@Override
public String processSubscribeEvent(SubscribeEvent subscribeEvent) {
// 处理关注公众号事件
return null;
}
@Override
public String processUnsubscribeEvent(UnsubscribeEvent unsubscribeEvent) {
// 处理取消关注公众号事件
return null;
}
@Override
public String processClickEvent(ClickEvent clickEvent) {
// 处理点击菜单事件
return null;
}
@Override
public String processViewEvent(ViewEvent viewEvent) {
// 处理点击链接菜单事件
return null;
}
@Override
public String processScanEvent(ScanEvent scanEvent) {
// 处理用户扫描带参二维码事件
return null;
}
@Override
public String processLocationEvent(LocationEvent locationEvent) {
// 处理用户上报地理位置事件
return null;
}
}
根据实际需求,具体实现消息处理方法即可。
最后,我们需要将接收到的消息回复给用户,注:此处需要自行实现加密解密和xml转化等处理,具体实现可参考官方文档或者第三方开源库。
`
public class WechatResponder {
private static Logger log = LoggerFactory.getLogger(WechatResponder.class);
public static String buildTextResponse(String fromUser,String toUser,String content){
long createTime = System.currentTimeMillis() / 1000;
String xml = "<xml>";
xml += "<ToUserName><![CDATA["+fromUser+"]]></ToUserName>";
xml += "<FromUserName><![CDATA["+toUser+"]]></FromUserName>";
xml += "<CreateTime>"+createTime+"</CreateTime>";
xml += "<MsgType><![CDATA[text]]></MsgType>";
xml += "<Content><![CDATA["+content+"]]></Content>";
xml +="</xml>";
log.info("回复文本消息:{}",xml);
return xml;
}
public static String buildImageResponse(String fromUser,String toUser,String mediaId){
long createTime = System.currentTimeMillis() / 1000;
String xml = "<xml>";
xml += "<ToUserName><![CDATA["+fromUser+"]]></ToUserName>";
xml += "<FromUserName><![CDATA["+toUser+"]]></FromUserName>";
xml += "<CreateTime>"+createTime+"</CreateTime>";
xml += "<MsgType><![CDATA[image]]></MsgType>";
xml += "<Image><MediaId><![CDATA["+mediaId+"]]></MediaId></Image>";
xml +="</xml>";
log.info("回复图片消息:{}",xml);
return xml;
}
public static String buildVoiceResponse(String fromUser,String toUser,String mediaId){
long createTime = System.currentTimeMillis() / 1000;
String xml = "<xml>";
xml += "<ToUserName><![CDATA["+fromUser+"]]></ToUserName>";
xml += "<FromUserName><![CDATA["+toUser+"]]></FromUserName>";
xml += "<CreateTime>"+createTime+"</CreateTime>";
xml += "<MsgType><![CDATA[voice]]></MsgType>";
xml += "<Voice><MediaId><![CDATA["+mediaId+"]]></MediaId></Voice>";
xml +="</xml>";
log.info("回复语音消息:{}",xml);
return xml;
}
public static String buildVideoResponse(String fromUser,String toUser,String mediaId){
long createTime = System.currentTimeMillis() / 1000;
String xml = "<xml>";
xml += "<ToUserName><![CDATA["+fromUser+"]]></ToUserName>";
xml += "<FromUserName><![CDATA["+toUser+"]]></FromUserName>";
xml += "<CreateTime>"+createTime+"</CreateTime>";
xml += "<MsgType><![CDATA[video]]></MsgType>";
xml += "<Video><MediaId><![CDATA["+mediaId+"]]></MediaId></Video>";
xml +="</xml>";
log.info("回复视频消息:{}",xml);
return xml;
}
public static String buildMusicResponse(String fromUser,String toUser,String title,String description,String musicUrl,String hqMusicUrl,String thumbMediaId){
long createTime = System.currentTimeMillis() / 1000;
String xml = "<xml>";
xml += "<ToUserName><![CDATA["+fromUser+"]]></ToUserName>";
xml += "<FromUserName><![CDATA["+toUser+"]]></FromUserName>";
xml += "<CreateTime>"+createTime+"</CreateTime>";
xml += "<MsgType><![CDATA[music]]></MsgType>";
xml += "<Music>";
xml += "<Title><![CDATA["+title+"]]></Title>";
xml += "<Description><![CDATA["+description+"]]></Description>";
xml += "<MusicUrl><![CDATA["+musicUrl+"]]></MusicUrl>";
xml += "<HQMusicUrl><![CDATA["+hqMusicUrl+"]]></HQMusicUrl>";
xml += "<ThumbMediaId><![CDATA["+thumbMediaId+"]]></ThumbMediaId>";
xml += "</Music>";
xml +="</xml>";
log.info("回复音乐消息:{}",xml);
return xml;
}
public static String buildNewsResponse(String fromUser,String toUser,List<WechatNews> newsList){
long createTime = System.currentTimeMillis() / 1000;
String xml = "<xml>";
xml += "<ToUserName><![CDATA["+fromUser+"]]></ToUserName>";
xml += "<FromUserName><![CDATA["+toUser+"]]></FromUserName>";
xml += "<CreateTime>"+createTime+"</CreateTime>";
xml += "<MsgType><