首先加入依赖
所需的工具类
WechatUtils
package pers.orange.site.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import pers.orange.site.TO.basis.WeiXinParameterTO;
import weixin.popular.api.TokenAPI;
/**
* @version : 2018/10/17
* @Description : 微信开发工具类
*/
public class WechatUtils {
/**
* 获取服务号的token
*
* @return
*/
public static String getWechatServerToken() {
/* RedisCache redisCache = SpringUtil.getBean(RedisCache.class);
String token = (String) redisCache.get(CacheTypeEnum.LOGIN_USER, CacheConstant.REDIS_WECHAT_SERVER_TOKEN);
if (StringUtils.isNotBlank(token)) {
return token;
}*/
String accessToken = TokenAPI.token(WeiXinParameterTO.getAppId(),WeiXinParameterTO.getSecret()).getAccess_token();
//redisCache.putOneHours(CacheTypeEnum.LOGIN_USER, CacheConstant.REDIS_WECHAT_SERVER_TOKEN, accessToken);
return accessToken;
}
/**
* 用户推送消息解析xml
*
* @param inputStream
* @return
* @throws DocumentException
*/
public static Map parseXML(InputStream inputStream) throws DocumentException {
Map map = new HashMap<>();
SAXReader reader = new SAXReader();
Document doc = reader.read(inputStream);
Element root = doc.getRootElement();
List list = (List) root.elements();
for (Element e : list) {
map.put(e.getName(), e.getText());
}
return map;
}
/**
* 数据流输出 微信服务号回调接口认证
*
* @param outputStream
* @param text
* @return
*/
public static boolean outputStreamWrite(OutputStream outputStream, String text) {
try {
outputStream.write(text.getBytes("utf-8"));
} catch (UnsupportedEncodingException e) {
return false;
} catch (IOException e) {
return false;
}
return true;
}
}
SendWeChatServer
package pers.orange.site.util;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import pers.orange.site.TO.basis.WxMessageCodeTO;
import weixin.popular.api.MessageAPI;
import weixin.popular.bean.BaseResult;
import weixin.popular.bean.message.message.TextMessage;
import weixin.popular.bean.message.templatemessage.TemplateMessage;
import weixin.popular.bean.message.templatemessage.TemplateMessageItem;
import weixin.popular.bean.message.templatemessage.TemplateMessageResult;
import weixin.popular.bean.message.templatemessage.WxopenTemplateMessage;
/**
* @version : 2018/10/17
* @Description : 发送微信消息工具类
*/
public class SendWeChatServer {
private static final Logger logger = LoggerFactory.getLogger(SendWeChatServer.class);
/**
* 发送普通消息
*
* @param openid
* @param content
*/
public void sendCommonMsg(String openid, String content) {
logger.info("发送微信服务号普通文本消息接收参数为 : openid : " + openid + ",content:" + content);
TextMessage textMessage = new TextMessage(openid);
TextMessage.Text text = new TextMessage.Text();
text.setContent(content);
textMessage.setText(text);
String token = WechatUtils.getWechatServerToken();
BaseResult baseResult = MessageAPI.messageCustomSend(token, textMessage);
logger.info("发送微信服务号普通文本消息返回数据为 : " + JSON.toJSONString(baseResult));
}
/**
* 发送模版消息
*
* @param openid 用户标识
* @param templateId 模版id
* @param redirectUrl 模版消息重定向地址
* @param parameters 模版消息参数
*/
public void sendTemplateMsg(String openid, String templateId, String redirectUrl, Map parameters) {
logger.info("发送微信服务号模版消息接收参数为 : openid :" + openid + "; templateId :" + templateId +
"; redirectUrl = " + redirectUrl + "; parameters " + JSON.toJSONString(parameters));
TemplateMessage templateMessage = new TemplateMessage();
templateMessage.setTemplate_id(templateId);
templateMessage.setTouser(openid);
LinkedHashMap msgMap = new LinkedHashMap<>();
if (parameters != null && parameters.size() > 0) {
for (String key : parameters.keySet()) {
msgMap.put(key, new TemplateMessageItem(parameters.get(key), ""));
}
}
templateMessage.setData(msgMap);
templateMessage.setUrl(redirectUrl);
String defaultToken = WechatUtils.getWechatServerToken();
TemplateMessageResult templateMessageResult = MessageAPI.messageTemplateSend(defaultToken, templateMessage);
logger.info("发送微信服务号模版消息返回数据为 : " + JSON.toJSONString(templateMessageResult));
}
/**
* 给小程序用户推送模版消息
*
* @param openid 用户token
* @param templateId 模板消息ID
* @param parameters 模板内容信息
* @param formId 小程序form表单ID
*/
public static WxMessageCodeTO sendWxopenTemplateMsg(String openId, String templateId,Map parameters, String formId) throws JsonParseException, JsonMappingException, IOException {
//logger.info("发送微信小程序模版消息接收参数为 : openid :" + openId + "; templateId :" + templateId + "; parameters :" + JSON.toJSONString(parameters));
WxopenTemplateMessage templateMessage = new WxopenTemplateMessage();
templateMessage.setTemplate_id(templateId);
templateMessage.setTouser(openId);
LinkedHashMap msgMap = new LinkedHashMap<>();
if (parameters != null && parameters.size() > 0) {
for (String key : parameters.keySet()) {
msgMap.put(key, new TemplateMessageItem(parameters.get(key), ""));
}
}
templateMessage.setData(msgMap);
templateMessage.setForm_id(formId);
String defaultToken = WechatUtils.getWechatServerToken();
BaseResult baseResult = MessageAPI.messageWxopenTemplateSend(defaultToken, templateMessage);
//logger.info("发送微信小程序模版消息返回数据为 : " + JSON.toJSONString(baseResult));
ObjectMapper mapper = new ObjectMapper();
WxMessageCodeTO code = mapper.readValue(JSON.toJSONString(baseResult),WxMessageCodeTO.class);
//System.out.println(code.isSuccess());
return code;
}
}
自己所封装的实体类(根据业务需求来)
微信小程序配置参数实体类 WeiXinParameterTO
package pers.orange.site.TO.basis;
/**
* 微信小程序配置参数实体类
* @author Administrator
*
*/
public class WeiXinParameterTO {
/**
* 小程序appId
*/
private static String appId = "";
/**
* 小程序秘钥
*/
private static String secret ="";
/**
* 小程序模板消息ID
*/
private static String templateId ="";
public static String getAppId() {
return appId;
}
public static void setAppId(String appId) {
WeiXinParameterTO.appId = appId;
}
public static String getSecret() {
return secret;
}
public static void setSecret(String secret) {
WeiXinParameterTO.secret = secret;
}
public static String getTemplateId() {
return templateId;
}
public static void setTemplateId(String templateId) {
WeiXinParameterTO.templateId = templateId;
}
}
微信模板消息返回数据实体类WxMessageCodeTO
package pers.orange.site.TO.basis;
import io.swagger.annotations.ApiModelProperty;
/**
* 微信模板消息返回数据实体类
* @author Administrator
*
*/
public class WxMessageCodeTO {
@ApiModelProperty("状态码")
private String errcode;
@ApiModelProperty("异常信息")
private String errmsg;
@ApiModelProperty("true/成功 false/失败")
private boolean success;
public String getErrcode() {
return errcode;
}
public void setErrcode(String errcode) {
this.errcode = errcode;
}
public String getErrmsg() {
return errmsg;
}
public void setErrmsg(String errmsg) {
this.errmsg = errmsg;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
}
控制层代码(用的是springboot框架)
注意formId一定要用微信开发工具中的真机调试生成 openid用自己的微信id就好了
@ApiOperation(value = "微信小程序服务消息通知", tags = {"new"})
@RequestMapping(value="/applet", method = { RequestMethod.POST })
@ResponseBody
public ResultMsg weiXinNotify(@ApiParam(value="小程序form表單id") String formId,@ApiParam(value="微信用户openId") String openId,@ApiParam(value="消息模板数据")@RequestBody Mapparams) {
try {
boolean success = SendWeChatServer.sendWxopenTemplateMsg(openId, WeiXinParameterTO.getTemplateId(), params, formId).isSuccess();
if (success!=true) {
return ResultMsg.Error("通知失败请确认参数是否正确");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ResultMsg.Error("通知失败");
}
return ResultMsg.OK("通知成功");
}