测试类
public class WeChatDome {
//测试消息提醒机器人
final static String path = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=e75827be-b174-4a8c-a166-7a996f2221e7";
final static String msg = "ok";
@Test
public void testMerge() throws Exception {
// commit note
//链接
List<FeiShuButtonModel> hrefList = new ArrayList<>();
hrefList.add(FeiShuButtonModel.builder().name("12345678").url("--").build());
List<String> descLines = new ArrayList<>();
descLines.add(String.format("Status:%s", "merge"));
descLines.add(String.format("Repository:%s", "12345"));
//消息主体
String content = String.format("%s %s the merge request from branch %s to %s",
"xiaobai2",
"merge",
"test1",
"master");
WeChatMarkDownRichTextModel weChatMarkDownRichTextModel = WeChatMarkDownRichTextModel.builder()
.title("合并请求提醒")
.content(content)
.buttonModelList(hrefList)
.descLineList(descLines)
.build();
String req = JSON.toJSONString(getMarkDownContentJson(weChatMarkDownRichTextModel));
System.out.println("请求参数:" + req);
String responseStr = HttpRequest.POST(path, req);
assert msg.equals(JSONPath.read(responseStr, "$.errmsg"));
}
/**
* 获取markdown格式消息内容Json对象
*
* @param markDownRichTextModel
* @return
*/
public JSONObject getMarkDownContentJson(WeChatMarkDownRichTextModel markDownRichTextModel) {
JSONObject contentJson = new JSONObject();
//如果传入null 则直接返回 保证后续流程异常
if (Objects.isNull(markDownRichTextModel)) {
return contentJson;
}
StringBuffer sb = new StringBuffer();
if (StringUtil.isNotBlank(markDownRichTextModel.getTitle())) {
sb.append("# ").append(markDownRichTextModel.getTitle()).append(Constants.RETURN_CHAR);
}
StringBuffer contentSb = new StringBuffer();
//开头是否有链接
if (StringUtil.isNotBlank(markDownRichTextModel.getContentStart())) {
if (StringUtil.isNotBlank(markDownRichTextModel.getContentStartLinkUrl())) {
contentSb.append(getCommentUrl(markDownRichTextModel.getContentStart(), markDownRichTextModel.getContentStartLinkUrl()));
} else {
contentSb.append(markDownRichTextModel.getContentStart());
}
}
//消息主体
if (StringUtil.isNotBlank(markDownRichTextModel.getContent())) {
if (StringUtil.isNotBlank(markDownRichTextModel.getContentLinkUrl())) {
contentSb.append(getCommentUrl(markDownRichTextModel.getContent(), markDownRichTextModel.getContentLinkUrl()));
} else {
contentSb.append(markDownRichTextModel.getContent());
}
}
//消息尾部
if (StringUtil.isNotBlank(markDownRichTextModel.getContentEnd())) {
if (StringUtil.isNotBlank(markDownRichTextModel.getContentEndLinkUrl())) {
contentSb.append(getCommentUrl(markDownRichTextModel.getContentEnd(), markDownRichTextModel.getContentEndLinkUrl()));
} else {
contentSb.append(markDownRichTextModel.getContentEnd());
}
}
//上面存在内容则需要换行
if (StringUtil.isNotBlank(contentSb.toString())) {
sb.append(contentSb).append(Constants.RETURN_CHAR);
}
//组装多行消息
if (CollectionUtils.isNotEmpty(markDownRichTextModel.getContentLineList())) {
for (String line : markDownRichTextModel.getContentLineList()) {
sb.append(line).append(Constants.RETURN_CHAR);
}
}
//描述信息
if (CollectionUtils.isNotEmpty(markDownRichTextModel.getButtonModelList())) {
for (FeiShuButtonModel buttonModel : markDownRichTextModel.getButtonModelList()) {
if (StringUtil.isNotBlank(buttonModel.getName())) {
//存在链接
if (StringUtil.isNotBlank(buttonModel.getUrl())) {
sb.append(">").append(getCommentUrl(buttonModel.getName(), buttonModel.getUrl()));
} else {
sb.append(buttonModel.getName());
}
//描述
if (StringUtil.isNotBlank(buttonModel.getDescription())) {
sb.append(":").append(getCommentText(buttonModel.getDescription()));
}
}
//存在多行内容 需要换行
sb.append(Constants.RETURN_CHAR);
}
}
//组装多行消息
if (CollectionUtils.isNotEmpty(markDownRichTextModel.getDescLineList())) {
for (String line : markDownRichTextModel.getDescLineList()) {
sb.append(">").append(getCommentText(line)).append(Constants.RETURN_CHAR);
}
}
contentJson.put("content", sb);
//请求参数
JSONObject paramsJson = new JSONObject();
paramsJson.put("msgtype", "markdown");
paramsJson.put("markdown", contentJson);
return paramsJson;
}
public String getCommentText(String text) {
return StringUtil.isNotBlank(text) ? String.format("<font color='comment'>%s</font>", text) : "";
}
public String getCommentUrl(String name, String url) {
return String.format("[%s](%s)", name, url);
}
}
实体类:
@Data
@Builder
public class WeChatMarkDownRichTextModel {
/**
* 标题
*/
private String title;
/**
* 内容-开头
*/
private String contentStart;
/**
* 内容-开头-链接
*/
private String contentStartLinkUrl;
/**
* 内容-主体
*/
private String content;
/**
* 内容-主体-链接
*/
private String contentLinkUrl;
/**
* 内容-结束
*/
private String contentEnd;
/**
* 内容-结束-链接
*/
private String contentEndLinkUrl;
/**
* 多行文本
*/
private List<String> contentLineList;
/**
* 描述信息(多行)
*/
private List<FeiShuButtonModel> buttonModelList;
/**
* 描述信息 多行文本
*/
private List<String> descLineList;
}
@Data
@Builder
public class FeiShuButtonModel {
private String name;
private String url;
private String description;
}