@@ -1,17 +1,12 @@ | |||||
package me.chanjar.weixin.mp.api; | package me.chanjar.weixin.mp.api; | ||||
import java.io.File; | |||||
import java.util.Date; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | ||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfMsgList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfOnlineList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionGetResult; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfSessionWaitCaseList; | |||||
import me.chanjar.weixin.mp.bean.kefu.result.*; | |||||
import java.io.File; | |||||
import java.util.Date; | |||||
/** | /** | ||||
* 客服接口 , | * 客服接口 , | ||||
@@ -29,7 +24,7 @@ public interface WxMpKefuService { | |||||
* 详情请见: <a href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547&token=&lang=zh_CN">发送客服消息</a> | * 详情请见: <a href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547&token=&lang=zh_CN">发送客服消息</a> | ||||
* </pre> | * </pre> | ||||
*/ | */ | ||||
boolean customMessageSend(WxMpCustomMessage message) throws WxErrorException; | |||||
boolean sendKefuMessage(WxMpKefuMessage message) throws WxErrorException; | |||||
//*******************客服管理接口***********************// | //*******************客服管理接口***********************// | ||||
@@ -3,6 +3,7 @@ package me.chanjar.weixin.mp.api.impl; | |||||
import java.io.File; | import java.io.File; | ||||
import java.util.Date; | import java.util.Date; | ||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
@@ -14,7 +15,6 @@ import me.chanjar.weixin.common.exception.WxErrorException; | |||||
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | ||||
import me.chanjar.weixin.mp.api.WxMpKefuService; | import me.chanjar.weixin.mp.api.WxMpKefuService; | ||||
import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | ||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfSessionRequest; | import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfSessionRequest; | ||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | ||||
@@ -41,7 +41,7 @@ public class WxMpKefuServiceImpl implements WxMpKefuService { | |||||
} | } | ||||
@Override | @Override | ||||
public boolean customMessageSend(WxMpCustomMessage message) | |||||
public boolean sendKefuMessage(WxMpKefuMessage message) | |||||
throws WxErrorException { | throws WxErrorException { | ||||
String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; | String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; | ||||
String responseContent = this.wxMpService.post(url, message.toJson()); | String responseContent = this.wxMpService.post(url, message.toJson()); | ||||
@@ -6,13 +6,13 @@ import me.chanjar.weixin.common.api.WxConsts; | |||||
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter; | import me.chanjar.weixin.common.util.xml.XStreamCDataConverter; | ||||
@XStreamAlias("xml") | @XStreamAlias("xml") | ||||
public class WxMpXmlOutTransferCustomerServiceMessage extends WxMpXmlOutMessage { | |||||
public class WxMpXmlOutTransferKefuMessage extends WxMpXmlOutMessage { | |||||
private static final long serialVersionUID = 1850903037285841322L; | private static final long serialVersionUID = 1850903037285841322L; | ||||
@XStreamAlias("TransInfo") | @XStreamAlias("TransInfo") | ||||
protected TransInfo transInfo; | protected TransInfo transInfo; | ||||
public WxMpXmlOutTransferCustomerServiceMessage() { | |||||
public WxMpXmlOutTransferKefuMessage() { | |||||
this.msgType = WxConsts.CUSTOM_MSG_TRANSFER_CUSTOMER_SERVICE; | this.msgType = WxConsts.CUSTOM_MSG_TRANSFER_CUSTOMER_SERVICE; | ||||
} | } | ||||
@@ -1,6 +1,6 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
public class BaseBuilder<T> { | public class BaseBuilder<T> { | ||||
protected String msgType; | protected String msgType; | ||||
@@ -11,8 +11,8 @@ public class BaseBuilder<T> { | |||||
return (T) this; | return (T) this; | ||||
} | } | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = new WxMpCustomMessage(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = new WxMpKefuMessage(); | |||||
m.setMsgType(this.msgType); | m.setMsgType(this.msgType); | ||||
m.setToUser(this.toUser); | m.setToUser(this.toUser); | ||||
return m; | return m; | ||||
@@ -1,12 +1,12 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
/** | /** | ||||
* 获得消息builder | * 获得消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: WxMpCustomMessage m = WxMpCustomMessage.IMAGE().mediaId(...).toUser(...).build(); | |||||
* 用法: WxMpKefuMessage m = WxMpKefuMessage.IMAGE().mediaId(...).toUser(...).build(); | |||||
* </pre> | * </pre> | ||||
* @author chanjarster | * @author chanjarster | ||||
* | * | ||||
@@ -24,8 +24,8 @@ public final class ImageBuilder extends BaseBuilder<ImageBuilder> { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = super.build(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = super.build(); | |||||
m.setMediaId(this.mediaId); | m.setMediaId(this.mediaId); | ||||
return m; | return m; | ||||
} | } | ||||
@@ -1,12 +1,12 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
/** | /** | ||||
* 音乐消息builder | * 音乐消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: WxMpCustomMessage m = WxMpCustomMessage.MUSIC() | |||||
* 用法: WxMpKefuMessage m = WxMpKefuMessage.MUSIC() | |||||
* .musicUrl(...) | * .musicUrl(...) | ||||
* .hqMusicUrl(...) | * .hqMusicUrl(...) | ||||
* .title(...) | * .title(...) | ||||
@@ -53,8 +53,8 @@ public final class MusicBuilder extends BaseBuilder<MusicBuilder> { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = super.build(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = super.build(); | |||||
m.setMusicUrl(this.musicUrl); | m.setMusicUrl(this.musicUrl); | ||||
m.setHqMusicUrl(this.hqMusicUrl); | m.setHqMusicUrl(this.hqMusicUrl); | ||||
m.setTitle(this.title); | m.setTitle(this.title); | ||||
@@ -1,7 +1,7 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; | ||||
@@ -10,27 +10,27 @@ import java.util.List; | |||||
* 图文消息builder | * 图文消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: | * 用法: | ||||
* WxMpCustomMessage m = WxMpCustomMessage.NEWS().addArticle(article).toUser(...).build(); | |||||
* WxMpKefuMessage m = WxMpKefuMessage.NEWS().addArticle(article).toUser(...).build(); | |||||
* </pre> | * </pre> | ||||
* @author chanjarster | * @author chanjarster | ||||
* | * | ||||
*/ | */ | ||||
public final class NewsBuilder extends BaseBuilder<NewsBuilder> { | public final class NewsBuilder extends BaseBuilder<NewsBuilder> { | ||||
private List<WxMpCustomMessage.WxArticle> articles = new ArrayList<>(); | |||||
private List<WxMpKefuMessage.WxArticle> articles = new ArrayList<>(); | |||||
public NewsBuilder() { | public NewsBuilder() { | ||||
this.msgType = WxConsts.CUSTOM_MSG_NEWS; | this.msgType = WxConsts.CUSTOM_MSG_NEWS; | ||||
} | } | ||||
public NewsBuilder addArticle(WxMpCustomMessage.WxArticle article) { | |||||
public NewsBuilder addArticle(WxMpKefuMessage.WxArticle article) { | |||||
this.articles.add(article); | this.articles.add(article); | ||||
return this; | return this; | ||||
} | } | ||||
@Override | @Override | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = super.build(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = super.build(); | |||||
m.setArticles(this.articles); | m.setArticles(this.articles); | ||||
return m; | return m; | ||||
} | } | ||||
@@ -1,12 +1,12 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
/** | /** | ||||
* 文本消息builder | * 文本消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: WxMpCustomMessage m = WxMpCustomMessage.TEXT().content(...).toUser(...).build(); | |||||
* 用法: WxMpKefuMessage m = WxMpKefuMessage.TEXT().content(...).toUser(...).build(); | |||||
* </pre> | * </pre> | ||||
* @author chanjarster | * @author chanjarster | ||||
* | * | ||||
@@ -24,8 +24,8 @@ public final class TextBuilder extends BaseBuilder<TextBuilder> { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = super.build(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = super.build(); | |||||
m.setContent(this.content); | m.setContent(this.content); | ||||
return m; | return m; | ||||
} | } | ||||
@@ -1,12 +1,12 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
/** | /** | ||||
* 视频消息builder | * 视频消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: WxMpCustomMessage m = WxMpCustomMessage.VOICE() | |||||
* 用法: WxMpKefuMessage m = WxMpKefuMessage.VOICE() | |||||
* .mediaId(...) | * .mediaId(...) | ||||
* .title(...) | * .title(...) | ||||
* .thumbMediaId(..) | * .thumbMediaId(..) | ||||
@@ -48,8 +48,8 @@ public final class VideoBuilder extends BaseBuilder<VideoBuilder> { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = super.build(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = super.build(); | |||||
m.setMediaId(this.mediaId); | m.setMediaId(this.mediaId); | ||||
m.setTitle(this.title); | m.setTitle(this.title); | ||||
m.setDescription(this.description); | m.setDescription(this.description); | ||||
@@ -1,12 +1,12 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
/** | /** | ||||
* 语音消息builder | * 语音消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: WxMpCustomMessage m = WxMpCustomMessage.VOICE().mediaId(...).toUser(...).build(); | |||||
* 用法: WxMpKefuMessage m = WxMpKefuMessage.VOICE().mediaId(...).toUser(...).build(); | |||||
* </pre> | * </pre> | ||||
* @author chanjarster | * @author chanjarster | ||||
* | * | ||||
@@ -24,8 +24,8 @@ public final class VoiceBuilder extends BaseBuilder<VoiceBuilder> { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = super.build(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = super.build(); | |||||
m.setMediaId(this.mediaId); | m.setMediaId(this.mediaId); | ||||
return m; | return m; | ||||
} | } | ||||
@@ -1,12 +1,12 @@ | |||||
package me.chanjar.weixin.mp.bean.custombuilder; | package me.chanjar.weixin.mp.bean.custombuilder; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
/** | /** | ||||
* 卡券消息builder | * 卡券消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: WxMpCustomMessage m = WxMpCustomMessage.WXCARD().cardId(...).toUser(...).build(); | |||||
* 用法: WxMpKefuMessage m = WxMpKefuMessage.WXCARD().cardId(...).toUser(...).build(); | |||||
* </pre> | * </pre> | ||||
* @author mgcnrx11 | * @author mgcnrx11 | ||||
* | * | ||||
@@ -24,8 +24,8 @@ public final class WxCardBuilder extends BaseBuilder<WxCardBuilder> { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpCustomMessage build() { | |||||
WxMpCustomMessage m = super.build(); | |||||
public WxMpKefuMessage build() { | |||||
WxMpKefuMessage m = super.build(); | |||||
m.setCardId(this.cardId); | m.setCardId(this.cardId); | ||||
return m; | return m; | ||||
} | } | ||||
@@ -1,24 +1,18 @@ | |||||
package me.chanjar.weixin.mp.bean; | |||||
package me.chanjar.weixin.mp.bean.kefu; | |||||
import me.chanjar.weixin.mp.bean.custombuilder.*; | |||||
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||||
import java.io.Serializable; | import java.io.Serializable; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; | ||||
import me.chanjar.weixin.mp.bean.custombuilder.ImageBuilder; | |||||
import me.chanjar.weixin.mp.bean.custombuilder.MusicBuilder; | |||||
import me.chanjar.weixin.mp.bean.custombuilder.NewsBuilder; | |||||
import me.chanjar.weixin.mp.bean.custombuilder.TextBuilder; | |||||
import me.chanjar.weixin.mp.bean.custombuilder.VideoBuilder; | |||||
import me.chanjar.weixin.mp.bean.custombuilder.VoiceBuilder; | |||||
import me.chanjar.weixin.mp.bean.custombuilder.WxCardBuilder; | |||||
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||||
/** | /** | ||||
* 客服消息 | * 客服消息 | ||||
* @author chanjarster | * @author chanjarster | ||||
* | * | ||||
*/ | */ | ||||
public class WxMpCustomMessage implements Serializable { | |||||
public class WxMpKefuMessage implements Serializable { | |||||
private static final long serialVersionUID = -9196732086954365246L; | private static final long serialVersionUID = -9196732086954365246L; | ||||
private String toUser; | private String toUser; |
@@ -1,17 +1,17 @@ | |||||
package me.chanjar.weixin.mp.bean.outxmlbuilder; | package me.chanjar.weixin.mp.bean.outxmlbuilder; | ||||
import me.chanjar.weixin.common.util.StringUtils; | import me.chanjar.weixin.common.util.StringUtils; | ||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutTransferCustomerServiceMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutTransferKefuMessage; | |||||
/** | /** | ||||
* 客服消息builder | * 客服消息builder | ||||
* <pre> | * <pre> | ||||
* 用法: WxMpCustomMessage m = WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE().content(...).toUser(...).build(); | |||||
* 用法: WxMpKefuMessage m = WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE().content(...).toUser(...).build(); | |||||
* </pre> | * </pre> | ||||
* | * | ||||
* @author chanjarster | * @author chanjarster | ||||
*/ | */ | ||||
public final class TransferCustomerServiceBuilder extends BaseBuilder<TransferCustomerServiceBuilder, WxMpXmlOutTransferCustomerServiceMessage> { | |||||
public final class TransferCustomerServiceBuilder extends BaseBuilder<TransferCustomerServiceBuilder, WxMpXmlOutTransferKefuMessage> { | |||||
private String kfAccount; | private String kfAccount; | ||||
public TransferCustomerServiceBuilder kfAccount(String kf) { | public TransferCustomerServiceBuilder kfAccount(String kf) { | ||||
@@ -20,11 +20,11 @@ public final class TransferCustomerServiceBuilder extends BaseBuilder<TransferCu | |||||
} | } | ||||
@Override | @Override | ||||
public WxMpXmlOutTransferCustomerServiceMessage build() { | |||||
WxMpXmlOutTransferCustomerServiceMessage m = new WxMpXmlOutTransferCustomerServiceMessage(); | |||||
public WxMpXmlOutTransferKefuMessage build() { | |||||
WxMpXmlOutTransferKefuMessage m = new WxMpXmlOutTransferKefuMessage(); | |||||
setCommon(m); | setCommon(m); | ||||
if(StringUtils.isNotBlank(this.kfAccount)){ | if(StringUtils.isNotBlank(this.kfAccount)){ | ||||
WxMpXmlOutTransferCustomerServiceMessage.TransInfo transInfo = new WxMpXmlOutTransferCustomerServiceMessage.TransInfo(); | |||||
WxMpXmlOutTransferKefuMessage.TransInfo transInfo = new WxMpXmlOutTransferKefuMessage.TransInfo(); | |||||
transInfo.setKfAccount(this.kfAccount); | transInfo.setKfAccount(this.kfAccount); | ||||
m.setTransInfo(transInfo); | m.setTransInfo(transInfo); | ||||
} | } | ||||
@@ -4,7 +4,7 @@ import com.google.gson.Gson; | |||||
import com.google.gson.GsonBuilder; | import com.google.gson.GsonBuilder; | ||||
import me.chanjar.weixin.mp.bean.WxMpCard; | import me.chanjar.weixin.mp.bean.WxMpCard; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpMassNews; | import me.chanjar.weixin.mp.bean.WxMpMassNews; | ||||
import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage; | import me.chanjar.weixin.mp.bean.WxMpMassOpenIdsMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpMassPreviewMessage; | import me.chanjar.weixin.mp.bean.WxMpMassPreviewMessage; | ||||
@@ -38,7 +38,7 @@ public class WxMpGsonBuilder { | |||||
static { | static { | ||||
INSTANCE.disableHtmlEscaping(); | INSTANCE.disableHtmlEscaping(); | ||||
INSTANCE.registerTypeAdapter(WxMpCustomMessage.class, new WxMpCustomMessageGsonAdapter()); | |||||
INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter()); | |||||
INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter()); | INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter()); | ||||
INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter()); | INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter()); | ||||
INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter()); | INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter()); | ||||
@@ -10,20 +10,19 @@ package me.chanjar.weixin.mp.util.json; | |||||
import com.google.gson.*; | import com.google.gson.*; | ||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import java.lang.reflect.Type; | import java.lang.reflect.Type; | ||||
import org.apache.commons.lang3.StringUtils; | |||||
public class WxMpCustomMessageGsonAdapter implements JsonSerializer<WxMpCustomMessage> { | |||||
public class WxMpKefuMessageGsonAdapter implements JsonSerializer<WxMpKefuMessage> { | |||||
@Override | @Override | ||||
public JsonElement serialize(WxMpCustomMessage message, Type typeOfSrc, JsonSerializationContext context) { | |||||
public JsonElement serialize(WxMpKefuMessage message, Type typeOfSrc, JsonSerializationContext context) { | |||||
JsonObject messageJson = new JsonObject(); | JsonObject messageJson = new JsonObject(); | ||||
messageJson.addProperty("touser", message.getToUser()); | messageJson.addProperty("touser", message.getToUser()); | ||||
messageJson.addProperty("msgtype", message.getMsgType()); | messageJson.addProperty("msgtype", message.getMsgType()); | ||||
if (WxConsts.CUSTOM_MSG_TEXT.equals(message.getMsgType())) { | if (WxConsts.CUSTOM_MSG_TEXT.equals(message.getMsgType())) { | ||||
JsonObject text = new JsonObject(); | JsonObject text = new JsonObject(); | ||||
text.addProperty("content", message.getContent()); | text.addProperty("content", message.getContent()); | ||||
@@ -60,11 +59,11 @@ public class WxMpCustomMessageGsonAdapter implements JsonSerializer<WxMpCustomMe | |||||
music.addProperty("hqmusicurl", message.getHqMusicUrl()); | music.addProperty("hqmusicurl", message.getHqMusicUrl()); | ||||
messageJson.add("music", music); | messageJson.add("music", music); | ||||
} | } | ||||
if (WxConsts.CUSTOM_MSG_NEWS.equals(message.getMsgType())) { | if (WxConsts.CUSTOM_MSG_NEWS.equals(message.getMsgType())) { | ||||
JsonObject newsJsonObject = new JsonObject(); | JsonObject newsJsonObject = new JsonObject(); | ||||
JsonArray articleJsonArray = new JsonArray(); | JsonArray articleJsonArray = new JsonArray(); | ||||
for (WxMpCustomMessage.WxArticle article : message.getArticles()) { | |||||
for (WxMpKefuMessage.WxArticle article : message.getArticles()) { | |||||
JsonObject articleJson = new JsonObject(); | JsonObject articleJson = new JsonObject(); | ||||
articleJson.addProperty("title", article.getTitle()); | articleJson.addProperty("title", article.getTitle()); | ||||
articleJson.addProperty("description", article.getDescription()); | articleJson.addProperty("description", article.getDescription()); | ||||
@@ -81,13 +80,13 @@ public class WxMpCustomMessageGsonAdapter implements JsonSerializer<WxMpCustomMe | |||||
wxcard.addProperty("card_id", message.getCardId()); | wxcard.addProperty("card_id", message.getCardId()); | ||||
messageJson.add("wxcard", wxcard); | messageJson.add("wxcard", wxcard); | ||||
} | } | ||||
if (StringUtils.isNotBlank(message.getKfAccount())){ | if (StringUtils.isNotBlank(message.getKfAccount())){ | ||||
JsonObject newsJsonObject = new JsonObject(); | JsonObject newsJsonObject = new JsonObject(); | ||||
newsJsonObject.addProperty("kf_account", message.getKfAccount()); | newsJsonObject.addProperty("kf_account", message.getKfAccount()); | ||||
messageJson.add("customservice", newsJsonObject); | |||||
messageJson.add("customservice", newsJsonObject); | |||||
} | } | ||||
return messageJson; | return messageJson; | ||||
} | } | ||||
@@ -13,7 +13,7 @@ import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutMusicMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlOutMusicMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutNewsMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlOutNewsMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlOutTextMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutTransferCustomerServiceMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutTransferKefuMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutVideoMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlOutVideoMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutVoiceMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlOutVoiceMessage; | ||||
@@ -62,7 +62,7 @@ public class XStreamTransformer { | |||||
map.put(WxMpXmlOutImageMessage.class, config_WxMpXmlOutImageMessage()); | map.put(WxMpXmlOutImageMessage.class, config_WxMpXmlOutImageMessage()); | ||||
map.put(WxMpXmlOutVideoMessage.class, config_WxMpXmlOutVideoMessage()); | map.put(WxMpXmlOutVideoMessage.class, config_WxMpXmlOutVideoMessage()); | ||||
map.put(WxMpXmlOutVoiceMessage.class, config_WxMpXmlOutVoiceMessage()); | map.put(WxMpXmlOutVoiceMessage.class, config_WxMpXmlOutVoiceMessage()); | ||||
map.put(WxMpXmlOutTransferCustomerServiceMessage.class, config_WxMpXmlOutTransferCustomerServiceMessage()); | |||||
map.put(WxMpXmlOutTransferKefuMessage.class, config_WxMpXmlOutTransferCustomerServiceMessage()); | |||||
return map; | return map; | ||||
} | } | ||||
@@ -127,8 +127,8 @@ public class XStreamTransformer { | |||||
private static XStream config_WxMpXmlOutTransferCustomerServiceMessage() { | private static XStream config_WxMpXmlOutTransferCustomerServiceMessage() { | ||||
XStream xstream = XStreamInitializer.getInstance(); | XStream xstream = XStreamInitializer.getInstance(); | ||||
xstream.processAnnotations(WxMpXmlOutMessage.class); | xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
xstream.processAnnotations(WxMpXmlOutTransferCustomerServiceMessage.class); | |||||
xstream.processAnnotations(WxMpXmlOutTransferCustomerServiceMessage.TransInfo.class); | |||||
xstream.processAnnotations(WxMpXmlOutTransferKefuMessage.class); | |||||
xstream.processAnnotations(WxMpXmlOutTransferKefuMessage.TransInfo.class); | |||||
return xstream; | return xstream; | ||||
} | } | ||||
@@ -3,6 +3,7 @@ package me.chanjar.weixin.mp.api.impl; | |||||
import java.io.File; | import java.io.File; | ||||
import java.util.Date; | import java.util.Date; | ||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
import org.joda.time.DateTime; | import org.joda.time.DateTime; | ||||
import org.testng.Assert; | import org.testng.Assert; | ||||
import org.testng.annotations.DataProvider; | import org.testng.annotations.DataProvider; | ||||
@@ -15,7 +16,6 @@ import me.chanjar.weixin.common.api.WxConsts; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.mp.api.ApiTestModule; | import me.chanjar.weixin.mp.api.ApiTestModule; | ||||
import me.chanjar.weixin.mp.api.WxXmlMpInMemoryConfigStorage; | import me.chanjar.weixin.mp.api.WxXmlMpInMemoryConfigStorage; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | import me.chanjar.weixin.mp.bean.kefu.request.WxMpKfAccountRequest; | ||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfInfo; | import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfInfo; | ||||
import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | import me.chanjar.weixin.mp.bean.kefu.result.WxMpKfList; | ||||
@@ -40,26 +40,26 @@ public class WxMpKefuServiceImplTest { | |||||
public void testSendCustomMessage() throws WxErrorException { | public void testSendCustomMessage() throws WxErrorException { | ||||
WxXmlMpInMemoryConfigStorage configStorage = (WxXmlMpInMemoryConfigStorage) this.wxService | WxXmlMpInMemoryConfigStorage configStorage = (WxXmlMpInMemoryConfigStorage) this.wxService | ||||
.getWxMpConfigStorage(); | .getWxMpConfigStorage(); | ||||
WxMpCustomMessage message = new WxMpCustomMessage(); | |||||
WxMpKefuMessage message = new WxMpKefuMessage(); | |||||
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | ||||
message.setToUser(configStorage.getOpenid()); | message.setToUser(configStorage.getOpenid()); | ||||
message.setContent( | message.setContent( | ||||
"欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | "欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | ||||
this.wxService.getKefuService().customMessageSend(message); | |||||
this.wxService.getKefuService().sendKefuMessage(message); | |||||
} | } | ||||
public void testSendCustomMessageWithKfAccount() throws WxErrorException { | public void testSendCustomMessageWithKfAccount() throws WxErrorException { | ||||
WxXmlMpInMemoryConfigStorage configStorage = (WxXmlMpInMemoryConfigStorage) this.wxService | WxXmlMpInMemoryConfigStorage configStorage = (WxXmlMpInMemoryConfigStorage) this.wxService | ||||
.getWxMpConfigStorage(); | .getWxMpConfigStorage(); | ||||
WxMpCustomMessage message = new WxMpCustomMessage(); | |||||
WxMpKefuMessage message = new WxMpKefuMessage(); | |||||
message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | message.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | ||||
message.setToUser(configStorage.getOpenid()); | message.setToUser(configStorage.getOpenid()); | ||||
message.setKfAccount(configStorage.getKfAccount()); | message.setKfAccount(configStorage.getKfAccount()); | ||||
message.setContent( | message.setContent( | ||||
"欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | "欢迎欢迎,热烈欢迎\n换行测试\n超链接:<a href=\"http://www.baidu.com\">Hello World</a>"); | ||||
this.wxService.getKefuService().customMessageSend(message); | |||||
this.wxService.getKefuService().sendKefuMessage(message); | |||||
} | } | ||||
public void testKfList() throws WxErrorException { | public void testKfList() throws WxErrorException { | ||||
@@ -6,10 +6,10 @@ import org.testng.annotations.Test; | |||||
/** | /** | ||||
* Created by ben on 2015/12/29. | * Created by ben on 2015/12/29. | ||||
*/ | */ | ||||
public class WxMpXmlOutTransferCustomerServiceMessageTest { | |||||
public class WxMpXmlOutTransferKefuMessageTest { | |||||
@Test | @Test | ||||
public void test() { | public void test() { | ||||
WxMpXmlOutTransferCustomerServiceMessage m = new WxMpXmlOutTransferCustomerServiceMessage(); | |||||
WxMpXmlOutTransferKefuMessage m = new WxMpXmlOutTransferKefuMessage(); | |||||
m.setCreateTime(1399197672L); | m.setCreateTime(1399197672L); | ||||
m.setFromUserName("fromuser"); | m.setFromUserName("fromuser"); | ||||
m.setToUserName("touser"); | m.setToUserName("touser"); | ||||
@@ -32,7 +32,7 @@ public class WxMpXmlOutTransferCustomerServiceMessageTest { | |||||
"<KfAccount><![CDATA[test1@test]]></KfAccount>" + | "<KfAccount><![CDATA[test1@test]]></KfAccount>" + | ||||
"</TransInfo>" + | "</TransInfo>" + | ||||
"</xml>"; | "</xml>"; | ||||
WxMpXmlOutTransferCustomerServiceMessage.TransInfo transInfo = new WxMpXmlOutTransferCustomerServiceMessage.TransInfo(); | |||||
WxMpXmlOutTransferKefuMessage.TransInfo transInfo = new WxMpXmlOutTransferKefuMessage.TransInfo(); | |||||
transInfo.setKfAccount("test1@test"); | transInfo.setKfAccount("test1@test"); | ||||
m.setTransInfo(transInfo); | m.setTransInfo(transInfo); | ||||
System.out.println(m.toXml()); | System.out.println(m.toXml()); | ||||
@@ -41,7 +41,7 @@ public class WxMpXmlOutTransferCustomerServiceMessageTest { | |||||
@Test | @Test | ||||
public void testBuild() { | public void testBuild() { | ||||
WxMpXmlOutTransferCustomerServiceMessage m = WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE().fromUser("fromuser").toUser("touser").build(); | |||||
WxMpXmlOutTransferKefuMessage m = WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE().fromUser("fromuser").toUser("touser").build(); | |||||
m.setCreateTime(1399197672L); | m.setCreateTime(1399197672L); | ||||
String expected = "<xml>" + | String expected = "<xml>" + | ||||
"<ToUserName><![CDATA[touser]]></ToUserName>" + | "<ToUserName><![CDATA[touser]]></ToUserName>" + | ||||
@@ -67,4 +67,4 @@ public class WxMpXmlOutTransferCustomerServiceMessageTest { | |||||
System.out.println(m.toXml()); | System.out.println(m.toXml()); | ||||
Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); | Assert.assertEquals(m.toXml().replaceAll("\\s", ""), expected.replaceAll("\\s", "")); | ||||
} | } | ||||
} | |||||
} |
@@ -1,54 +1,54 @@ | |||||
package me.chanjar.weixin.mp.bean; | |||||
package me.chanjar.weixin.mp.bean.kefu; | |||||
import me.chanjar.weixin.common.api.WxConsts; | import me.chanjar.weixin.common.api.WxConsts; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage.WxArticle; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage.WxArticle; | |||||
import org.testng.Assert; | import org.testng.Assert; | ||||
import org.testng.annotations.Test; | import org.testng.annotations.Test; | ||||
@Test | @Test | ||||
public class WxMpCustomMessageTest { | |||||
public class WxMpKefuMessageTest { | |||||
public void testTextReply() { | public void testTextReply() { | ||||
WxMpCustomMessage reply = new WxMpCustomMessage(); | |||||
WxMpKefuMessage reply = new WxMpKefuMessage(); | |||||
reply.setToUser("OPENID"); | reply.setToUser("OPENID"); | ||||
reply.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | reply.setMsgType(WxConsts.CUSTOM_MSG_TEXT); | ||||
reply.setContent("sfsfdsdf"); | reply.setContent("sfsfdsdf"); | ||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}"); | ||||
} | } | ||||
public void testTextBuild() { | public void testTextBuild() { | ||||
WxMpCustomMessage reply = WxMpCustomMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build(); | |||||
WxMpKefuMessage reply = WxMpKefuMessage.TEXT().toUser("OPENID").content("sfsfdsdf").build(); | |||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"text\",\"text\":{\"content\":\"sfsfdsdf\"}}"); | ||||
} | } | ||||
public void testImageReply() { | public void testImageReply() { | ||||
WxMpCustomMessage reply = new WxMpCustomMessage(); | |||||
WxMpKefuMessage reply = new WxMpKefuMessage(); | |||||
reply.setToUser("OPENID"); | reply.setToUser("OPENID"); | ||||
reply.setMsgType(WxConsts.CUSTOM_MSG_IMAGE); | reply.setMsgType(WxConsts.CUSTOM_MSG_IMAGE); | ||||
reply.setMediaId("MEDIA_ID"); | reply.setMediaId("MEDIA_ID"); | ||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}"); | ||||
} | } | ||||
public void testImageBuild() { | public void testImageBuild() { | ||||
WxMpCustomMessage reply = WxMpCustomMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build(); | |||||
WxMpKefuMessage reply = WxMpKefuMessage.IMAGE().toUser("OPENID").mediaId("MEDIA_ID").build(); | |||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"image\",\"image\":{\"media_id\":\"MEDIA_ID\"}}"); | ||||
} | } | ||||
public void testVoiceReply() { | public void testVoiceReply() { | ||||
WxMpCustomMessage reply = new WxMpCustomMessage(); | |||||
WxMpKefuMessage reply = new WxMpKefuMessage(); | |||||
reply.setToUser("OPENID"); | reply.setToUser("OPENID"); | ||||
reply.setMsgType(WxConsts.CUSTOM_MSG_VOICE); | reply.setMsgType(WxConsts.CUSTOM_MSG_VOICE); | ||||
reply.setMediaId("MEDIA_ID"); | reply.setMediaId("MEDIA_ID"); | ||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}"); | ||||
} | } | ||||
public void testVoiceBuild() { | public void testVoiceBuild() { | ||||
WxMpCustomMessage reply = WxMpCustomMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build(); | |||||
WxMpKefuMessage reply = WxMpKefuMessage.VOICE().toUser("OPENID").mediaId("MEDIA_ID").build(); | |||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"voice\",\"voice\":{\"media_id\":\"MEDIA_ID\"}}"); | ||||
} | } | ||||
public void testVideoReply() { | public void testVideoReply() { | ||||
WxMpCustomMessage reply = new WxMpCustomMessage(); | |||||
WxMpKefuMessage reply = new WxMpKefuMessage(); | |||||
reply.setToUser("OPENID"); | reply.setToUser("OPENID"); | ||||
reply.setMsgType(WxConsts.CUSTOM_MSG_VIDEO); | reply.setMsgType(WxConsts.CUSTOM_MSG_VIDEO); | ||||
reply.setMediaId("MEDIA_ID"); | reply.setMediaId("MEDIA_ID"); | ||||
@@ -57,14 +57,14 @@ public class WxMpCustomMessageTest { | |||||
reply.setDescription("DESCRIPTION"); | reply.setDescription("DESCRIPTION"); | ||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}"); | ||||
} | } | ||||
public void testVideoBuild() { | public void testVideoBuild() { | ||||
WxMpCustomMessage reply = WxMpCustomMessage.VIDEO().toUser("OPENID").title("TITLE").mediaId("MEDIA_ID").thumbMediaId("MEDIA_ID").description("DESCRIPTION").build(); | |||||
WxMpKefuMessage reply = WxMpKefuMessage.VIDEO().toUser("OPENID").title("TITLE").mediaId("MEDIA_ID").thumbMediaId("MEDIA_ID").description("DESCRIPTION").build(); | |||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"video\",\"video\":{\"media_id\":\"MEDIA_ID\",\"thumb_media_id\":\"MEDIA_ID\",\"title\":\"TITLE\",\"description\":\"DESCRIPTION\"}}"); | ||||
} | } | ||||
public void testMusicReply() { | public void testMusicReply() { | ||||
WxMpCustomMessage reply = new WxMpCustomMessage(); | |||||
WxMpKefuMessage reply = new WxMpKefuMessage(); | |||||
reply.setToUser("OPENID"); | reply.setToUser("OPENID"); | ||||
reply.setMsgType(WxConsts.CUSTOM_MSG_MUSIC); | reply.setMsgType(WxConsts.CUSTOM_MSG_MUSIC); | ||||
reply.setThumbMediaId("MEDIA_ID"); | reply.setThumbMediaId("MEDIA_ID"); | ||||
@@ -74,9 +74,9 @@ public class WxMpCustomMessageTest { | |||||
reply.setHqMusicUrl("HQ_MUSIC_URL"); | reply.setHqMusicUrl("HQ_MUSIC_URL"); | ||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}"); | ||||
} | } | ||||
public void testMusicBuild() { | public void testMusicBuild() { | ||||
WxMpCustomMessage reply = WxMpCustomMessage.MUSIC() | |||||
WxMpKefuMessage reply = WxMpKefuMessage.MUSIC() | |||||
.toUser("OPENID") | .toUser("OPENID") | ||||
.title("TITLE") | .title("TITLE") | ||||
.thumbMediaId("MEDIA_ID") | .thumbMediaId("MEDIA_ID") | ||||
@@ -86,19 +86,19 @@ public class WxMpCustomMessageTest { | |||||
.build(); | .build(); | ||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"music\",\"music\":{\"title\":\"TITLE\",\"description\":\"DESCRIPTION\",\"thumb_media_id\":\"MEDIA_ID\",\"musicurl\":\"MUSIC_URL\",\"hqmusicurl\":\"HQ_MUSIC_URL\"}}"); | ||||
} | } | ||||
public void testNewsReply() { | public void testNewsReply() { | ||||
WxMpCustomMessage reply = new WxMpCustomMessage(); | |||||
WxMpKefuMessage reply = new WxMpKefuMessage(); | |||||
reply.setToUser("OPENID"); | reply.setToUser("OPENID"); | ||||
reply.setMsgType(WxConsts.CUSTOM_MSG_NEWS); | reply.setMsgType(WxConsts.CUSTOM_MSG_NEWS); | ||||
WxArticle article1 = new WxArticle(); | WxArticle article1 = new WxArticle(); | ||||
article1.setUrl("URL"); | article1.setUrl("URL"); | ||||
article1.setPicUrl("PIC_URL"); | article1.setPicUrl("PIC_URL"); | ||||
article1.setDescription("Is Really A Happy Day"); | article1.setDescription("Is Really A Happy Day"); | ||||
article1.setTitle("Happy Day"); | article1.setTitle("Happy Day"); | ||||
reply.getArticles().add(article1); | reply.getArticles().add(article1); | ||||
WxArticle article2 = new WxArticle(); | WxArticle article2 = new WxArticle(); | ||||
article2.setUrl("URL"); | article2.setUrl("URL"); | ||||
article2.setPicUrl("PIC_URL"); | article2.setPicUrl("PIC_URL"); | ||||
@@ -106,26 +106,26 @@ public class WxMpCustomMessageTest { | |||||
article2.setTitle("Happy Day"); | article2.setTitle("Happy Day"); | ||||
reply.getArticles().add(article2); | reply.getArticles().add(article2); | ||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}"); | ||||
} | } | ||||
public void testNewsBuild() { | public void testNewsBuild() { | ||||
WxArticle article1 = new WxArticle(); | WxArticle article1 = new WxArticle(); | ||||
article1.setUrl("URL"); | article1.setUrl("URL"); | ||||
article1.setPicUrl("PIC_URL"); | article1.setPicUrl("PIC_URL"); | ||||
article1.setDescription("Is Really A Happy Day"); | article1.setDescription("Is Really A Happy Day"); | ||||
article1.setTitle("Happy Day"); | article1.setTitle("Happy Day"); | ||||
WxArticle article2 = new WxArticle(); | WxArticle article2 = new WxArticle(); | ||||
article2.setUrl("URL"); | article2.setUrl("URL"); | ||||
article2.setPicUrl("PIC_URL"); | article2.setPicUrl("PIC_URL"); | ||||
article2.setDescription("Is Really A Happy Day"); | article2.setDescription("Is Really A Happy Day"); | ||||
article2.setTitle("Happy Day"); | article2.setTitle("Happy Day"); | ||||
WxMpCustomMessage reply = WxMpCustomMessage.NEWS().toUser("OPENID").addArticle(article1).addArticle(article2).build(); | |||||
WxMpKefuMessage reply = WxMpKefuMessage.NEWS().toUser("OPENID").addArticle(article1).addArticle(article2).build(); | |||||
Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}"); | Assert.assertEquals(reply.toJson(), "{\"touser\":\"OPENID\",\"msgtype\":\"news\",\"news\":{\"articles\":[{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"},{\"title\":\"Happy Day\",\"description\":\"Is Really A Happy Day\",\"url\":\"URL\",\"picurl\":\"PIC_URL\"}]}}"); | ||||
} | } | ||||
} | } |
@@ -10,7 +10,7 @@ import me.chanjar.weixin.common.session.WxSessionManager; | |||||
import me.chanjar.weixin.mp.api.WxMpMessageHandler; | import me.chanjar.weixin.mp.api.WxMpMessageHandler; | ||||
import me.chanjar.weixin.mp.api.WxMpMessageMatcher; | import me.chanjar.weixin.mp.api.WxMpMessageMatcher; | ||||
import me.chanjar.weixin.mp.api.WxMpService; | import me.chanjar.weixin.mp.api.WxMpService; | ||||
import me.chanjar.weixin.mp.bean.WxMpCustomMessage; | |||||
import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage; | |||||
import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlMessage; | ||||
import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; | ||||
@@ -52,19 +52,19 @@ public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMa | |||||
protected void letsGo(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { | protected void letsGo(WxMpXmlMessage wxMessage, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { | ||||
WxSession session = sessionManager.getSession(wxMessage.getFromUser()); | WxSession session = sessionManager.getSession(wxMessage.getFromUser()); | ||||
if (session.getAttribute("guessing") == null) { | if (session.getAttribute("guessing") == null) { | ||||
WxMpCustomMessage m = WxMpCustomMessage | |||||
WxMpKefuMessage m = WxMpKefuMessage | |||||
.TEXT() | .TEXT() | ||||
.toUser(wxMessage.getFromUser()) | .toUser(wxMessage.getFromUser()) | ||||
.content("请猜一个100以内的数字") | .content("请猜一个100以内的数字") | ||||
.build(); | .build(); | ||||
wxMpService.getKefuService().customMessageSend(m); | |||||
wxMpService.getKefuService().sendKefuMessage(m); | |||||
} else { | } else { | ||||
WxMpCustomMessage m = WxMpCustomMessage | |||||
WxMpKefuMessage m = WxMpKefuMessage | |||||
.TEXT() | .TEXT() | ||||
.toUser(wxMessage.getFromUser()) | .toUser(wxMessage.getFromUser()) | ||||
.content("放弃了吗?那请重新猜一个100以内的数字") | .content("放弃了吗?那请重新猜一个100以内的数字") | ||||
.build(); | .build(); | ||||
wxMpService.getKefuService().customMessageSend(m); | |||||
wxMpService.getKefuService().sendKefuMessage(m); | |||||
} | } | ||||
session.setAttribute("guessing", Boolean.TRUE); | session.setAttribute("guessing", Boolean.TRUE); | ||||
@@ -87,28 +87,28 @@ public class DemoGuessNumberHandler implements WxMpMessageHandler, WxMpMessageMa | |||||
int answer = (Integer) session.getAttribute("number"); | int answer = (Integer) session.getAttribute("number"); | ||||
int guessNumber = Integer.valueOf(wxMessage.getContent()); | int guessNumber = Integer.valueOf(wxMessage.getContent()); | ||||
if (guessNumber < answer) { | if (guessNumber < answer) { | ||||
WxMpCustomMessage m = WxMpCustomMessage | |||||
WxMpKefuMessage m = WxMpKefuMessage | |||||
.TEXT() | .TEXT() | ||||
.toUser(wxMessage.getFromUser()) | .toUser(wxMessage.getFromUser()) | ||||
.content("小了") | .content("小了") | ||||
.build(); | .build(); | ||||
wxMpService.getKefuService().customMessageSend(m); | |||||
wxMpService.getKefuService().sendKefuMessage(m); | |||||
} else if (guessNumber > answer) { | } else if (guessNumber > answer) { | ||||
WxMpCustomMessage m = WxMpCustomMessage | |||||
WxMpKefuMessage m = WxMpKefuMessage | |||||
.TEXT() | .TEXT() | ||||
.toUser(wxMessage.getFromUser()) | .toUser(wxMessage.getFromUser()) | ||||
.content("大了") | .content("大了") | ||||
.build(); | .build(); | ||||
wxMpService.getKefuService().customMessageSend(m); | |||||
wxMpService.getKefuService().sendKefuMessage(m); | |||||
} else { | } else { | ||||
WxMpCustomMessage m = WxMpCustomMessage | |||||
WxMpKefuMessage m = WxMpKefuMessage | |||||
.TEXT() | .TEXT() | ||||
.toUser(wxMessage.getFromUser()) | .toUser(wxMessage.getFromUser()) | ||||
.content("Bingo!") | .content("Bingo!") | ||||
.build(); | .build(); | ||||
session.removeAttribute("guessing"); | session.removeAttribute("guessing"); | ||||
wxMpService.getKefuService().customMessageSend(m); | |||||
wxMpService.getKefuService().sendKefuMessage(m); | |||||
} | } | ||||
} | } | ||||
@@ -17,7 +17,7 @@ | |||||
<test name="Bean_Test"> | <test name="Bean_Test"> | ||||
<classes> | <classes> | ||||
<class name="me.chanjar.weixin.mp.bean.WxMpCustomMessageTest" /> | |||||
<class name="me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessageTest" /> | |||||
<class name="me.chanjar.weixin.mp.bean.WxMpXmlMessageTest" /> | <class name="me.chanjar.weixin.mp.bean.WxMpXmlMessageTest" /> | ||||
<class name="me.chanjar.weixin.mp.bean.WxMpXmlOutImageMessageTest" /> | <class name="me.chanjar.weixin.mp.bean.WxMpXmlOutImageMessageTest" /> | ||||
<class name="me.chanjar.weixin.mp.bean.WxXmlOutMusicMessageTest" /> | <class name="me.chanjar.weixin.mp.bean.WxXmlOutMusicMessageTest" /> | ||||