version upgrade to 1.7.0

This commit is contained in:
jinyu 2016-06-20 10:30:41 +08:00
parent 0b0f9bb31d
commit 7f2f1d8f64
21 changed files with 42 additions and 378 deletions

View File

@ -714,3 +714,7 @@
+ 优化PayOldApi
+ weixin4j-mp:新增接口调用次数清零接口
* 2016-06-20
+ version upgrade to 1.7.0

View File

@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
<packaging>pom</packaging>
<name>weixin4j</name>
<url>https://github.com/foxinmy/weixin4j</url>
@ -50,6 +50,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<fastjson.version>1.2.3</fastjson.version>
</properties>
<build>
<plugins>

View File

@ -5,7 +5,7 @@
<parent>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
</parent>
<artifactId>weixin4j-base</artifactId>
<name>weixin4j-base</name>
@ -15,7 +15,7 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.3</version>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>

View File

@ -6,7 +6,6 @@ import java.util.Arrays;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import com.foxinmy.weixin4j.tuple.MpArticle;
import com.foxinmy.weixin4j.type.ButtonType;
/**
@ -49,10 +48,10 @@ public class Button implements Serializable {
*/
private String content;
/**
* 图文列表 只有在公众平台设置的菜单才有
* 扩展属性比如在公众平台设置菜单时的图文列表
*/
@JSONField(serialize = false, deserialize = false)
private List<MpArticle> articles;
private Object extra;
/**
* 二级菜单数组个数应为1~5个
*/
@ -117,17 +116,17 @@ public class Button implements Serializable {
this.content = content;
}
public List<MpArticle> getArticles() {
return articles;
public Object getExtra() {
return extra;
}
/**
* <font color="red">创建菜单设置无效</font>
* 扩展只读属性设置无效
*
* @param articles
* @param extra
*/
public void setArticles(List<MpArticle> articles) {
this.articles = articles;
public void setExtra(Object extra) {
this.extra = extra;
}
public List<Button> getSubs() {
@ -146,6 +145,6 @@ public class Button implements Serializable {
@Override
public String toString() {
return "Button [name=" + name + ", type=" + type + ", content="
+ content + ", articles=" + articles + ", subs=" + subs + "]";
+ content + ", extra=" + extra + ", subs=" + subs + "]";
}
}

View File

@ -951,5 +951,5 @@ public class WeixinPayProxy {
return customsApi.queryCustomsOrder(idQuery, customsCity);
}
public final static String VERSION = "1.6.9";
public final static String VERSION = "1.7.0";
}

View File

@ -5,7 +5,7 @@
<parent>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
</parent>
<artifactId>weixin4j-example</artifactId>
<version>1.0</version>
@ -47,13 +47,13 @@
<dependency>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j-mp</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
</dependency>
<!-- 微信企业号 -->
<dependency>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j-qy</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
</dependency>
<!-- 微信被动消息(回调模式) -->
<dependency>

View File

@ -1,5 +1,6 @@
package com.foxinmy.weixin4j.example.server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.foxinmy.weixin4j.exception.WeixinException;
@ -46,7 +47,7 @@ public class Weixin4jServerStartupWithoutThread {
// .addHandler(DebugMessageHandler.global).openAlwaysResponse()
// .startup(port);
// spring容器启动
new ClassPathXmlApplicationContext(
ApplicationContext app = new ClassPathXmlApplicationContext(
new String[] { "classpath:/spring-bean.xml" });
}
}

View File

@ -5,7 +5,7 @@
<parent>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
</parent>
<artifactId>weixin4j-mp</artifactId>
<name>weixin4j-mp</name>

View File

@ -1806,5 +1806,5 @@ public class WeixinProxy {
return tagApi.getUserTags(openId);
}
public final static String VERSION = "1.6.9";
public final static String VERSION = "1.7.0";
}

View File

@ -21,7 +21,6 @@ import com.foxinmy.weixin4j.mp.model.SemResult;
import com.foxinmy.weixin4j.token.TokenManager;
import com.foxinmy.weixin4j.tuple.MpArticle;
import com.foxinmy.weixin4j.type.ButtonType;
import com.foxinmy.weixin4j.util.ReflectionUtil;
/**
* 辅助相关API
@ -142,6 +141,7 @@ public class HelperApi extends MpApi {
private static final class ButtonExtraProcessor implements ExtraProcessor {
private static ButtonExtraProcessor global = new ButtonExtraProcessor();
private static final String KEY = "news_info";
private ButtonExtraProcessor() {
}
@ -160,11 +160,7 @@ public class HelperApi extends MpApi {
article.remove("source_url"));
newsList.add(JSON.toJavaObject(article, MpArticle.class));
}
if (ReflectionUtil.getAccessibleField(object, "articles") != null) {
JSONPath.set(object, "$.articles", newsList);
} else {
JSONPath.set(object, "$.content", newsList);
}
JSONPath.set(object, "$.extar", newsList);
} else {
JSONPath.set(object, "$.content", value);
}

View File

@ -1,42 +0,0 @@
package com.foxinmy.weixin4j.mp.card;
import com.foxinmy.weixin4j.mp.type.CardType;
/**
* 卡券
*
* @className CardCoupon
* @author jinyu(foxinmy@gmail.com)
* @date 2016年4月4日
* @since JDK 1.6
* @see
*/
public interface CardCoupon {
/**
* 卡券类型
*
* @return
*/
public CardType getCardType();
/**
* 卡券基本信息
*
* @return
*/
public CouponBaseInfo getBaseInfo();
/**
* 卡券高级信息
*
* @return
*/
public CouponAdvancedInfo getAdvancedInfo();
/**
* 卡券详细信息
*
* @return
*/
public CouponDetailInfo getDetailInfo();
}

View File

@ -1,14 +0,0 @@
package com.foxinmy.weixin4j.mp.card;
/**
* 卡券构造器
*
* @className CardCouponBuilder
* @author jinyu(foxinmy@gmail.com)
* @date 2016年6月1日
* @since JDK 1.6
* @see
*/
public class CardCouponBuilder {
}

View File

@ -1,18 +0,0 @@
package com.foxinmy.weixin4j.mp.card;
import java.io.Serializable;
/**
* 卡券高级信息
*
* @className CouponAdvancedInfo
* @author jinyu(foxinmy@gmail.com)
* @date 2016年6月1日
* @since JDK 1.6
* @see
*/
public class CouponAdvancedInfo implements Serializable {
private static final long serialVersionUID = 3626615706377721404L;
}

View File

@ -1,18 +0,0 @@
package com.foxinmy.weixin4j.mp.card;
import java.io.Serializable;
/**
* 卡券基本信息
*
* @className CouponBaseInfo
* @author jinyu(foxinmy@gmail.com)
* @date 2016年6月1日
* @since JDK 1.6
* @see
*/
public class CouponBaseInfo implements Serializable {
private static final long serialVersionUID = -5725424121330101716L;
}

View File

@ -1,18 +0,0 @@
package com.foxinmy.weixin4j.mp.card;
import java.io.Serializable;
import com.alibaba.fastjson.JSONObject;
/**
* 卡券详情信息
*
* @className CouponDetailInfo
* @author jinyu(foxinmy@gmail.com)
* @date 2016年6月1日
* @since JDK 1.6
* @see
*/
public interface CouponDetailInfo extends Serializable {
public JSONObject toContent();
}

View File

@ -1,30 +0,0 @@
package com.foxinmy.weixin4j.mp.card;
import com.foxinmy.weixin4j.mp.type.CardType;
public class GrouponCoupon implements CardCoupon {
@Override
public CardType getCardType() {
return CardType.GROUPON;
}
@Override
public CouponBaseInfo getBaseInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public CouponAdvancedInfo getAdvancedInfo() {
// TODO Auto-generated method stub
return null;
}
@Override
public CouponDetailInfo getDetailInfo() {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -5,7 +5,7 @@
<parent>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
</parent>
<artifactId>weixin4j-qy</artifactId>
<name>weixin4j-qy</name>

View File

@ -1353,5 +1353,5 @@ public class WeixinProxy {
return chatApi.sendChatMessage(message);
}
public final static String VERSION = "1.6.9";
public final static String VERSION = "1.7.0";
}

View File

@ -235,5 +235,5 @@ public class WeixinSuiteProxy {
suite(suiteId).getSuiteTokenManager());
}
public final static String VERSION = "1.6.9";
public final static String VERSION = "1.7.0";
}

View File

@ -5,7 +5,7 @@
<parent>
<groupId>com.foxinmy</groupId>
<artifactId>weixin4j</artifactId>
<version>1.6.9</version>
<version>1.7.0</version>
</parent>
<artifactId>weixin4j-server</artifactId>
<version>1.1.8</version>
@ -18,6 +18,11 @@
<artifactId>netty-all</artifactId>
<version>4.0.23.Final</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>

View File

@ -1,202 +0,0 @@
package com.foxinmy.weixin4j.dispatcher;
import java.util.HashMap;
import java.util.Map;
import com.foxinmy.weixin4j.message.ImageMessage;
import com.foxinmy.weixin4j.message.LinkMessage;
import com.foxinmy.weixin4j.message.LocationMessage;
import com.foxinmy.weixin4j.message.TextMessage;
import com.foxinmy.weixin4j.message.VideoMessage;
import com.foxinmy.weixin4j.message.VoiceMessage;
import com.foxinmy.weixin4j.message.event.LocationEventMessage;
import com.foxinmy.weixin4j.message.event.MenuEventMessage;
import com.foxinmy.weixin4j.message.event.MenuLocationEventMessage;
import com.foxinmy.weixin4j.message.event.MenuPhotoEventMessage;
import com.foxinmy.weixin4j.message.event.MenuScanEventMessage;
import com.foxinmy.weixin4j.mp.event.KfCloseEventMessage;
import com.foxinmy.weixin4j.mp.event.KfCreateEventMessage;
import com.foxinmy.weixin4j.mp.event.KfSwitchEventMessage;
import com.foxinmy.weixin4j.mp.event.MassEventMessage;
import com.foxinmy.weixin4j.mp.event.TemplatesendjobfinishMessage;
import com.foxinmy.weixin4j.mp.event.VerifyExpireEventMessage;
import com.foxinmy.weixin4j.mp.event.VerifyFailEventMessage;
import com.foxinmy.weixin4j.qy.event.BatchjobresultMessage;
import com.foxinmy.weixin4j.qy.event.EnterAgentEventMessage;
import com.foxinmy.weixin4j.request.WeixinMessage;
import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.type.EventType;
import com.foxinmy.weixin4j.type.MessageType;
/**
* 默认MessageMatcher实现(可以改进)
*
* @className DefaultMessageMatcher
* @author jinyu(foxinmy@gmail.com)
* @date 2015年6月10日
* @since JDK 1.6
* @see
*/
public class DefaultMessageMatcher implements WeixinMessageMatcher {
private final Map<WeixinMessageKey, Class<? extends WeixinMessage>> messageClassMap;
public DefaultMessageMatcher() {
messageClassMap = new HashMap<WeixinMessageKey, Class<? extends WeixinMessage>>();
initMessageClass();
}
private void initMessageClass() {
// /////////////////////////////////////////////////
/******************** 普通消息 ********************/
// /////////////////////////////////////////////////
initGeneralMessageClass();
// /////////////////////////////////////////////////
/******************** 事件消息 ********************/
// /////////////////////////////////////////////////
initEventMessageClass();
// /////////////////////////////////////////////////
/***************** 公众平台事件消息 *****************/
// /////////////////////////////////////////////////
initMpEventMessageClass();
// /////////////////////////////////////////////////
/****************** 企业号事件消息 ******************/
// /////////////////////////////////////////////////
initQyEventMessageClass();
}
private void initGeneralMessageClass() {
for (AccountType accountType : AccountType.values()) {
messageClassMap.put(new WeixinMessageKey(MessageType.text.name(),
null, accountType), TextMessage.class);
messageClassMap.put(new WeixinMessageKey(MessageType.image.name(),
null, accountType), ImageMessage.class);
messageClassMap.put(new WeixinMessageKey(MessageType.voice.name(),
null, accountType), VoiceMessage.class);
messageClassMap.put(new WeixinMessageKey(MessageType.video.name(),
null, accountType), VideoMessage.class);
messageClassMap.put(
new WeixinMessageKey(MessageType.shortvideo.name(), null,
accountType), VideoMessage.class);
messageClassMap.put(
new WeixinMessageKey(MessageType.location.name(), null,
accountType), LocationMessage.class);
messageClassMap.put(new WeixinMessageKey(MessageType.link.name(),
null, accountType), LinkMessage.class);
}
}
private void initEventMessageClass() {
String messageType = MessageType.event.name();
EventType[] eventTypes = new EventType[] { EventType.subscribe,
EventType.unsubscribe };
for (EventType eventType : eventTypes) {
messageClassMap.put(
new WeixinMessageKey(messageType, eventType.name(),
AccountType.MP),
com.foxinmy.weixin4j.mp.event.ScribeEventMessage.class);
}
for (EventType eventType : eventTypes) {
messageClassMap.put(
new WeixinMessageKey(messageType, eventType.name(),
AccountType.QY),
com.foxinmy.weixin4j.qy.event.ScribeEventMessage.class);
}
for (AccountType accountType : AccountType.values()) {
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.location.name(), accountType),
LocationEventMessage.class);
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.location_select.name(), accountType),
MenuLocationEventMessage.class);
for (EventType eventType : new EventType[] { EventType.click,
EventType.view }) {
messageClassMap.put(
new WeixinMessageKey(messageType, eventType.name(),
accountType), MenuEventMessage.class);
}
for (EventType eventType : new EventType[] {
EventType.scancode_push, EventType.scancode_waitmsg }) {
messageClassMap.put(
new WeixinMessageKey(messageType, eventType.name(),
accountType), MenuScanEventMessage.class);
}
for (EventType eventType : new EventType[] {
EventType.pic_sysphoto, EventType.pic_photo_or_album,
EventType.pic_weixin }) {
messageClassMap.put(
new WeixinMessageKey(messageType, eventType.name(),
accountType), MenuPhotoEventMessage.class);
}
}
}
private void initMpEventMessageClass() {
String messageType = MessageType.event.name();
AccountType accountType = AccountType.MP;
messageClassMap.put(
new WeixinMessageKey(messageType, EventType.scan.name(),
accountType),
com.foxinmy.weixin4j.mp.event.ScanEventMessage.class);
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.masssendjobfinish.name(), accountType),
MassEventMessage.class);
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.templatesendjobfinish.name(), accountType),
TemplatesendjobfinishMessage.class);
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.kf_create_session.name(), accountType),
KfCreateEventMessage.class);
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.kf_close_session.name(), accountType),
KfCloseEventMessage.class);
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.kf_switch_session.name(), accountType),
KfSwitchEventMessage.class);
EventType[] eventTypes = new EventType[] {
EventType.qualification_verify_success,
EventType.naming_verify_success, EventType.annual_renew,
EventType.verify_expired };
for (EventType eventType : eventTypes) {
messageClassMap.put(
new WeixinMessageKey(messageType, eventType.name(),
accountType), VerifyExpireEventMessage.class);
}
eventTypes = new EventType[] { EventType.qualification_verify_success,
EventType.naming_verify_fail };
for (EventType eventType : eventTypes) {
messageClassMap.put(
new WeixinMessageKey(messageType, eventType.name(),
accountType), VerifyFailEventMessage.class);
}
}
private void initQyEventMessageClass() {
String messageType = MessageType.event.name();
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.batch_job_result.name(), AccountType.QY),
BatchjobresultMessage.class);
messageClassMap.put(new WeixinMessageKey(messageType,
EventType.enter_agent.name(), AccountType.QY),
EnterAgentEventMessage.class);
//messageClassMap.put(new WeixinMessageKey(messageType,
// EventType.suite.name(), AccountType.QY),
//SuiteMessage.class);
}
@Override
public Class<? extends WeixinMessage> match(WeixinMessageKey messageKey) {
return messageClassMap.get(messageKey);
}
@Override
public void regist(WeixinMessageKey messageKey,
Class<? extends WeixinMessage> messageClass) {
Class<?> clazz = match(messageKey);
if (clazz != null) {
throw new IllegalArgumentException("duplicate messagekey '"
+ messageKey + "' define for " + clazz);
}
messageClassMap.put(messageKey, messageClass);
}
}