一般在微信企业号下做软件开发,基本都会用到消息推送,用户在完成一个操作之后,会在企业号中推送一条消息,这条消息可能是文本、图文等不同类型,在具有审批流程的消息推送中,下一级人员审批完成会给上一级推送一条审批消息,后者可以直接点开推送消息进入审批页面,进行审批。下面是消息推送接口代码:
package com.bootdo.delivery.wxinterface.service.impl;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import net.sf.json.JSONObject;
import com.bootdo.common.utils.ResultBean;
import com.bootdo.delivery.wxinterface.dao.DetailInfoDao;
import com.bootdo.delivery.wxinterface.dao.MessageDao;
import com.bootdo.delivery.wxinterface.domain.Article;
import com.bootdo.delivery.wxinterface.domain.Message;
import com.bootdo.delivery.wxinterface.domain.TextCard;
import com.bootdo.delivery.wxinterface.service.SendInfoService;
import com.bootdo.delivery.wxinterface.util.ApplicationUtils;
import com.bootdo.delivery.wxinterface.util.Constants;
import com.bootdo.delivery.wxinterface.util.QiYeUtil;
import com.bootdo.delivery.wxinterface.util.SMessage;
import net.sf.json.JSONArray;
@Service
public class SendInfoServiceImpl implements SendInfoService {
@Resource
private MessageDao messageDao;
@Resource
private DetailInfoDao detailInfoDao;
/**
* 发送文本卡片消息
*
* @param "UserID1|UserID2|UserID3", -> openId
* @param title 标题
* @param url 审批页面地址
* @return
*/
@Override
public ResultBean<Object> sendTextCardInfo(String openId, String title, String url, String content) {
ResultBean<Object> result = new ResultBean<Object>();
JSONObject jSONObject = null;
String userId = null;
try {
//根据url获取userId
String[] strs = url.split("[\\/]");
userId = strs[strs.length - 1];
//查看用户是否打开勿扰模式
String isOpen = detailInfoDao.getIsOpenByUserId(userId);
if (!"0".equals(isOpen)) {
// 调取凭证
String access_token = QiYeUtil.getAccessToken(Constants.CORPID, Constants.Secret).getToken();
SimpleDateFormat tempDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String createTime = tempDate.format(new java.util.Date());
// 新建文本卡片消息
TextCard textCard = new TextCard();
textCard.setTitle(title);
String description = "<div class=\"gray\">" + createTime + "</div><div class=\"highlight\">" + content + "</div>";
textCard.setDescription(description);
textCard.setUrl(url);
textCard.setBtntxt("点击查看:");
// 文本卡片转json
String textCardList = JSONObject.fromObject(textCard).toString();
//生成文本卡片消息的json数据
String jsonData = SMessage.textcardMsg(openId, Constants.AGENTID + "", textCardList);
//发送模板消息
jSONObject = SMessage.sendMsg(access_token, jsonData);
if (jSONObject != null) {
if ("0".equals(jSONObject.getString("errcode"))) {
Message message = new Message();
message.setId(ApplicationUtils.randomUUID());
message.setUserId(userId);
message.setTitle(title);
message.setUrl(url);
message.setCreateTime(createTime);
message.setStatus("0");
messageDao.insert(message);
result.setCode(0);
result.setData(jSONObject);
result.setMsg("消息发送成功");
} else {
result.setCode(1);
result.setMsg("消息发送失败");
}
}
} else {
result.setCode(1);
result.setData("");
result.setMsg("消息已屏蔽");
}
} catch (Exception e) {
result.setCode(1);
result.setMsg("消息发送失败");
}
return result;
}
/**
* 发送图文消息
*
* @param userId=> openId
* @param partyId
* @param tagId
* @param title 标题
* @param picUrl 图片地址
* @param url 审批页面地址
* @return
*/
@Override
public JSONObject sendNewsInfo(String userId, String partyId, String tagId, String title,
String picUrl, String url) {
// 调取凭证
String access_token = QiYeUtil.getAccessToken(Constants.CORPID, Constants.Secret).getToken();
// 新建图文
Article article = new Article();
article.setTitle(title);
String description = "<div class=\"gray\">2016年9月26日</div> <div class=\"normal\">发货系统审批提醒</div><div class=\"highlight\">请您尽快审批本次发货申请</div>";
article.setDescription(description);
article.setPicUrl(picUrl);
article.setUrl(url);
// 整合图文
List<Article> list = new ArrayList<Article>();
list.add(article);
// 图文转json
String articlesList = JSONArray.fromObject(list).toString();
//生成news消息的json数据
String jsonData = SMessage.SNewsMsg(userId, partyId, tagId, Constants.AGENTID + "", articlesList);
//发送模板消息
JSONObject jSONObject = SMessage.sendMsg(access_token, jsonData);
return jSONObject;
}
}