Переглянути джерело

issue #24 模板消息接口

master
Daniel Qian 10 роки тому
джерело
коміт
a69c972261
7 змінених файлів з 181 додано та 2 видалено
  1. +1
    -0
      weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java
  2. +11
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java
  3. +7
    -1
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java
  4. +49
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpTemplateData.java
  5. +62
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpTemplateMessage.java
  6. +1
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
  7. +50
    -0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpTemplateMessageGsonAdapter.java

+ 1
- 0
weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxConsts.java Переглянути файл

@@ -88,6 +88,7 @@ public class WxConsts {
public static final String EVT_PIC_PHOTO_OR_ALBUM = "pic_photo_or_album";
public static final String EVT_PIC_WEIXIN = "pic_weixin";
public static final String EVT_LOCATION_SELECT = "location_select";
public static final String EVT_TEMPLATESENDJOBFINISH = "TEMPLATESENDJOBFINISH";

///////////////////////
// 上传多媒体文件的类型


+ 11
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java Переглянути файл

@@ -306,7 +306,17 @@ public interface WxMpService {
* @throws WxErrorException
*/
public String shortUrl(String long_url) throws WxErrorException;

/**
* <pre>
* 发送模板消息
* 详情请见: http://mp.weixin.qq.com/wiki/index.php?title=模板消息接口
* </pre>
* @param templateMessage
* @throws WxErrorException
*/
public void templateSend(WxMpTemplateMessage templateMessage) throws WxErrorException;

/**
* 注入 {@link WxMpConfigStorage} 的实现
* @param wxConfigProvider


+ 7
- 1
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java Переглянути файл

@@ -31,6 +31,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;

@@ -272,7 +273,12 @@ public class WxMpServiceImpl implements WxMpService {
JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent)));
return tmpJsonElement.getAsJsonObject().get("short_url").getAsString();
}

public void templateSend(WxMpTemplateMessage templateMessage) throws WxErrorException {
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send";
execute(new SimplePostRequestExecutor(), url, templateMessage.toJson());
}

/**
* 向微信端发送请求,在这里执行的策略是当发生access_token过期时才去刷新,然后重新执行请求,而不是全局定时请求
* @param executor


+ 49
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpTemplateData.java Переглянути файл

@@ -0,0 +1,49 @@
package me.chanjar.weixin.mp.bean;

/**
* @author Daniel Qian
*/
public class WxMpTemplateData {

private String name;
private String value;
private String color;

public WxMpTemplateData() {
}

public WxMpTemplateData(String name, String value) {
this.name = name;
this.value = value;
}

public WxMpTemplateData(String name, String value, String color) {
this.name = name;
this.value = value;
this.color = color;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}

}

+ 62
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/WxMpTemplateMessage.java Переглянути файл

@@ -0,0 +1,62 @@
package me.chanjar.weixin.mp.bean;

import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;

import java.util.ArrayList;
import java.util.List;

/**
* Created by qianjia on 14/11/1.
*/
public class WxMpTemplateMessage {

private String toUser;
private String templateId;
private String url;
private String topColor;
private List<WxMpTemplateData> datas = new ArrayList<WxMpTemplateData>();

public String getToUser() {
return toUser;
}

public void setToUser(String toUser) {
this.toUser = toUser;
}

public String getTemplateId() {
return templateId;
}

public void setTemplateId(String templateId) {
this.templateId = templateId;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String getTopColor() {
return topColor;
}

public void setTopColor(String topColor) {
this.topColor = topColor;
}

public List<WxMpTemplateData> getDatas() {
return datas;
}

public void setDatas(List<WxMpTemplateData> datas) {
this.datas = datas;
}

public String toJson() {
return WxMpGsonBuilder.INSTANCE.create().toJson(this);
}
}

+ 1
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java Переглянути файл

@@ -22,6 +22,7 @@ public class WxMpGsonBuilder {
INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
}
public static Gson create() {


+ 50
- 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpTemplateMessageGsonAdapter.java Переглянути файл

@@ -0,0 +1,50 @@
/*
* KINGSTAR MEDIA SOLUTIONS Co.,LTD. Copyright c 2005-2013. All rights reserved.
*
* This source code is the property of KINGSTAR MEDIA SOLUTIONS LTD. It is intended
* only for the use of KINGSTAR MEDIA application development. Reengineering, reproduction
* arose from modification of the original source, or other redistribution of this source
* is not permitted without written permission of the KINGSTAR MEDIA SOLUTIONS LTD.
*/
package me.chanjar.weixin.mp.util.json;

import com.google.gson.*;
import me.chanjar.weixin.common.api.WxConsts;
import me.chanjar.weixin.mp.bean.WxMpCustomMessage;
import me.chanjar.weixin.mp.bean.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.WxMpTemplateMessage;

import java.lang.reflect.Type;

/**
* @author qianjia
*/
public class WxMpTemplateMessageGsonAdapter implements JsonSerializer<WxMpTemplateMessage> {

public JsonElement serialize(WxMpTemplateMessage message, Type typeOfSrc, JsonSerializationContext context) {
JsonObject messageJson = new JsonObject();
messageJson.addProperty("touser", message.getToUser());
messageJson.addProperty("template_id", message.getTemplateId());
if (message.getUrl() != null) {
messageJson.addProperty("url", message.getUrl());
}
if (message.getTopColor() != null) {
messageJson.addProperty("topcolor", message.getTopColor());
}

JsonObject datas = new JsonObject();
messageJson.add("data", datas);

for (WxMpTemplateData data : message.getDatas()) {
JsonObject dataJson = new JsonObject();
dataJson.addProperty("value", data.getValue());
if (data.getColor() != null) {
dataJson.addProperty("color", data.getColor());
}
datas.add(data.getName(), dataJson);
}

return messageJson;
}

}

Завантаження…
Відмінити
Зберегти