新增MessageConverter
This commit is contained in:
parent
f62985f69d
commit
57669927a7
@ -727,4 +727,8 @@
|
||||
|
||||
* 2016-07-06
|
||||
|
||||
+ weixin4j-mp:新增第三方组件WeixinComponentProxy
|
||||
+ weixin4j-mp:新增第三方组件WeixinComponentProxy
|
||||
|
||||
* 2016-07-21
|
||||
|
||||
+ 新增MessageConverter
|
||||
@ -18,8 +18,8 @@ import java.util.Map;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.message.XmlResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.http.weixin.XmlResult;
|
||||
import com.foxinmy.weixin4j.model.Consts;
|
||||
import com.foxinmy.weixin4j.model.WeixinPayAccount;
|
||||
import com.foxinmy.weixin4j.payment.mch.APPPayRequest;
|
||||
@ -746,7 +746,7 @@ public class PayApi extends MchApi {
|
||||
String param = XmlStream.map2xml(map);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
getRequestUri("interface_report_uri"), param);
|
||||
return response.getAsXmlResult();
|
||||
return response.getAsXml();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -22,24 +22,20 @@ public class FileCacheStorager<T extends Cacheable> implements CacheStorager<T>
|
||||
private final String SEPARATOR = File.separator;
|
||||
|
||||
public FileCacheStorager(String path) {
|
||||
this.tmpdir = new File(String.format("%s%sweixin4j_token_temp",
|
||||
path, SEPARATOR));
|
||||
this.tmpdir = new File(String.format("%s%s%s", path, SEPARATOR, ALLKEY));
|
||||
this.tmpdir.mkdirs();
|
||||
}
|
||||
|
||||
@Override
|
||||
public T lookup(String key) {
|
||||
File cacheFile = new File(String.format("%s%s%s",
|
||||
tmpdir.getAbsolutePath(), SEPARATOR, key));
|
||||
File cacheFile = new File(String.format("%s%s%s", tmpdir.getAbsolutePath(), SEPARATOR, key));
|
||||
try {
|
||||
if (cacheFile.exists()) {
|
||||
T cache = SerializationUtils.deserialize(new FileInputStream(
|
||||
cacheFile));
|
||||
T cache = SerializationUtils.deserialize(new FileInputStream(cacheFile));
|
||||
if (cache.getCreateTime() < 0) {
|
||||
return cache;
|
||||
}
|
||||
if ((cache.getCreateTime() + cache.getExpires() - CUTMS) > System
|
||||
.currentTimeMillis()) {
|
||||
if ((cache.getCreateTime() + cache.getExpires() - CUTMS) > System.currentTimeMillis()) {
|
||||
return cache;
|
||||
}
|
||||
}
|
||||
@ -52,10 +48,8 @@ public class FileCacheStorager<T extends Cacheable> implements CacheStorager<T>
|
||||
@Override
|
||||
public void caching(String key, T cache) {
|
||||
try {
|
||||
SerializationUtils.serialize(
|
||||
cache,
|
||||
new FileOutputStream(new File(String.format("%s%s%s",
|
||||
tmpdir.getAbsolutePath(), SEPARATOR, key))));
|
||||
SerializationUtils.serialize(cache,
|
||||
new FileOutputStream(new File(String.format("%s%s%s", tmpdir.getAbsolutePath(), SEPARATOR, key))));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@ -64,12 +58,10 @@ public class FileCacheStorager<T extends Cacheable> implements CacheStorager<T>
|
||||
@Override
|
||||
public T evict(String key) {
|
||||
T cache = null;
|
||||
File cacheFile = new File(String.format("%s%s%s",
|
||||
tmpdir.getAbsolutePath(), SEPARATOR, key));
|
||||
File cacheFile = new File(String.format("%s%s%s", tmpdir.getAbsolutePath(), SEPARATOR, key));
|
||||
try {
|
||||
if (cacheFile.exists()) {
|
||||
cache = SerializationUtils.deserialize(new FileInputStream(
|
||||
cacheFile));
|
||||
cache = SerializationUtils.deserialize(new FileInputStream(cacheFile));
|
||||
cacheFile.delete();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
|
||||
@ -18,8 +18,7 @@ import com.whalin.MemCached.SockIOPool;
|
||||
* @since JDK 1.6
|
||||
* @see
|
||||
*/
|
||||
public class MemcacheCacheStorager<T extends Cacheable> implements
|
||||
CacheStorager<T> {
|
||||
public class MemcacheCacheStorager<T extends Cacheable> implements CacheStorager<T> {
|
||||
|
||||
private final MemCachedClient mc;
|
||||
|
||||
@ -30,7 +29,13 @@ public class MemcacheCacheStorager<T extends Cacheable> implements
|
||||
public MemcacheCacheStorager(MemcachePoolConfig poolConfig) {
|
||||
mc = new MemCachedClient();
|
||||
poolConfig.initSocketIO();
|
||||
mc.set(ALLKEY, new HashSet<String>());
|
||||
init();
|
||||
}
|
||||
|
||||
private void init() {
|
||||
if (!mc.keyExists(ALLKEY)) {
|
||||
mc.set(ALLKEY, new HashSet<String>());
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@ -43,9 +48,7 @@ public class MemcacheCacheStorager<T extends Cacheable> implements
|
||||
@Override
|
||||
public void caching(String key, T cache) {
|
||||
if (cache.getCreateTime() > 0l) {
|
||||
mc.set(key,
|
||||
cache,
|
||||
new Date(cache.getCreateTime() + cache.getExpires() - CUTMS));
|
||||
mc.set(key, cache, new Date(cache.getCreateTime() + cache.getExpires() - CUTMS));
|
||||
} else {
|
||||
mc.set(key, cache);
|
||||
}
|
||||
|
||||
@ -10,17 +10,15 @@ import com.foxinmy.weixin4j.logging.InternalLoggerFactory;
|
||||
|
||||
public abstract class AbstractHttpClient implements HttpClient {
|
||||
|
||||
protected final InternalLogger logger = InternalLoggerFactory
|
||||
.getInstance(getClass());
|
||||
|
||||
protected final InternalLogger logger = InternalLoggerFactory.getInstance(getClass());
|
||||
|
||||
@Override
|
||||
public HttpResponse get(String url) throws HttpClientException {
|
||||
return execute(HttpMethod.GET, url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpResponse get(String url, URLParameter... parameters)
|
||||
throws HttpClientException {
|
||||
public HttpResponse get(String url, URLParameter... parameters) throws HttpClientException {
|
||||
return execute(HttpMethod.GET, url, parameters);
|
||||
}
|
||||
|
||||
@ -30,8 +28,7 @@ public abstract class AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpHeaders head(String url, URLParameter... parameters)
|
||||
throws HttpClientException {
|
||||
public HttpHeaders head(String url, URLParameter... parameters) throws HttpClientException {
|
||||
return execute(HttpMethod.HEAD, url, parameters).getHeaders();
|
||||
}
|
||||
|
||||
@ -41,8 +38,7 @@ public abstract class AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpResponse post(String url, URLParameter... parameters)
|
||||
throws HttpClientException {
|
||||
public HttpResponse post(String url, URLParameter... parameters) throws HttpClientException {
|
||||
HttpEntity entity = null;
|
||||
if (parameters != null && parameters.length > 0) {
|
||||
entity = new FormUrlEntity(Arrays.asList(parameters));
|
||||
@ -51,8 +47,7 @@ public abstract class AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpResponse post(String url, HttpEntity entity)
|
||||
throws HttpClientException {
|
||||
public HttpResponse post(String url, HttpEntity entity) throws HttpClientException {
|
||||
HttpRequest request = new HttpRequest(HttpMethod.POST, url);
|
||||
request.setEntity(entity);
|
||||
return execute(request);
|
||||
@ -64,8 +59,7 @@ public abstract class AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put(String url, URLParameter... parameters)
|
||||
throws HttpClientException {
|
||||
public void put(String url, URLParameter... parameters) throws HttpClientException {
|
||||
execute(HttpMethod.PUT, url, parameters);
|
||||
}
|
||||
|
||||
@ -75,8 +69,7 @@ public abstract class AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(String url, URLParameter... parameters)
|
||||
throws HttpClientException {
|
||||
public void delete(String url, URLParameter... parameters) throws HttpClientException {
|
||||
execute(HttpMethod.DELETE, url, parameters);
|
||||
}
|
||||
|
||||
@ -86,20 +79,17 @@ public abstract class AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<HttpMethod> options(String url, URLParameter... parameters)
|
||||
throws HttpClientException {
|
||||
HttpHeaders headers = execute(HttpMethod.OPTIONS, url, parameters)
|
||||
.getHeaders();
|
||||
public Set<HttpMethod> options(String url, URLParameter... parameters) throws HttpClientException {
|
||||
HttpHeaders headers = execute(HttpMethod.OPTIONS, url, parameters).getHeaders();
|
||||
return headers.getAllow();
|
||||
}
|
||||
|
||||
protected HttpResponse execute(HttpMethod method, String url)
|
||||
throws HttpClientException {
|
||||
protected HttpResponse execute(HttpMethod method, String url) throws HttpClientException {
|
||||
return execute(new HttpRequest(method, url));
|
||||
}
|
||||
|
||||
protected HttpResponse execute(HttpMethod method, String url,
|
||||
URLParameter... parameters) throws HttpClientException {
|
||||
protected HttpResponse execute(HttpMethod method, String url, URLParameter... parameters)
|
||||
throws HttpClientException {
|
||||
StringBuilder buf = new StringBuilder(url);
|
||||
if (parameters != null && parameters.length > 0) {
|
||||
if (url.indexOf("?") < 0) {
|
||||
@ -113,27 +103,20 @@ public abstract class AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
|
||||
protected boolean hasError(HttpStatus status) {
|
||||
return (status.series() == HttpStatus.Series.CLIENT_ERROR || status
|
||||
.series() == HttpStatus.Series.SERVER_ERROR);
|
||||
return (status.series() == HttpStatus.Series.CLIENT_ERROR || status.series() == HttpStatus.Series.SERVER_ERROR);
|
||||
}
|
||||
|
||||
protected void handleResponse(HttpResponse response)
|
||||
throws HttpClientException {
|
||||
protected void handleResponse(HttpResponse response) throws HttpClientException {
|
||||
HttpStatus status = response.getStatus();
|
||||
HttpHeaders headers = response.getHeaders();
|
||||
String contentType = headers.getFirst(HttpHeaders.CONTENT_TYPE);
|
||||
boolean jsonResult = contentType != null
|
||||
&& contentType.contains(ContentType.APPLICATION_JSON
|
||||
.getMimeType());
|
||||
if (!jsonResult && hasError(status)) {
|
||||
MimeType resultType = MimeType.valueOf(headers.getFirst(HttpHeaders.CONTENT_TYPE));
|
||||
if (!MimeType.APPLICATION_JSON.includes(resultType) && hasError(status)) {
|
||||
switch (status.series()) {
|
||||
case CLIENT_ERROR:
|
||||
case SERVER_ERROR:
|
||||
throw new HttpClientException(String.format("%d %s",
|
||||
status.getStatusCode(), status.getStatusText()));
|
||||
throw new HttpClientException(String.format("%d %s", status.getStatusCode(), status.getStatusText()));
|
||||
default:
|
||||
throw new HttpClientException("Unknown status code [" + status
|
||||
+ "]");
|
||||
throw new HttpClientException("Unknown status code [" + status + "]");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@ package com.foxinmy.weixin4j.http;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.UnsupportedCharsetException;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
@ -21,48 +20,32 @@ public final class ContentType implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1544245878894784980L;
|
||||
|
||||
public static final ContentType APPLICATION_ATOM_XML = create(
|
||||
"application/atom+xml", Consts.UTF_8);
|
||||
public static final ContentType APPLICATION_FORM_URLENCODED = create(
|
||||
"application/x-www-form-urlencoded", Consts.UTF_8);
|
||||
public static final ContentType APPLICATION_JSON = create(
|
||||
"application/json", Consts.UTF_8);
|
||||
public static final ContentType APPLICATION_OCTET_STREAM = create(
|
||||
"application/octet-stream", (Charset) null);
|
||||
public static final ContentType APPLICATION_SVG_XML = create(
|
||||
"application/svg+xml", Consts.UTF_8);
|
||||
public static final ContentType APPLICATION_XHTML_XML = create(
|
||||
"application/xhtml+xml", Consts.UTF_8);
|
||||
public static final ContentType APPLICATION_XML = create("application/xml",
|
||||
Consts.UTF_8);
|
||||
public static final ContentType MULTIPART_FORM_DATA = create(
|
||||
"multipart/form-data", Consts.UTF_8);
|
||||
public static final ContentType TEXT_HTML = create("text/html",
|
||||
Consts.UTF_8);
|
||||
public static final ContentType TEXT_PLAIN = create("text/plain",
|
||||
Consts.UTF_8);
|
||||
public static final ContentType IMAGE_JPG = create("image/jpg",
|
||||
Consts.UTF_8);
|
||||
public static final ContentType AUDIO_MP3 = create("audio/mp3",
|
||||
Consts.UTF_8);
|
||||
public static final ContentType VIDEO_MPEG4 = create("video/mpeg4",
|
||||
Consts.UTF_8);
|
||||
public static final ContentType TEXT_XML = create("text/xml", Consts.UTF_8);
|
||||
public static final ContentType WILDCARD = create("*/*", (Charset) null);
|
||||
|
||||
// defaults
|
||||
public static final ContentType DEFAULT_TEXT = TEXT_PLAIN;
|
||||
public static final ContentType DEFAULT_BINARY = APPLICATION_OCTET_STREAM;
|
||||
|
||||
private final String mimeType;
|
||||
private final MimeType mimeType;
|
||||
private final Charset charset;
|
||||
private static final Charset DEFAULT_CHARSET = Consts.UTF_8;
|
||||
|
||||
ContentType(final String mimeType, final Charset charset) {
|
||||
public static final ContentType APPLICATION_FORM_URLENCODED;
|
||||
public static final ContentType MULTIPART_FORM_DATA;
|
||||
public static final ContentType DEFAULT_BINARY;
|
||||
public static final ContentType DEFAULT_TEXT;
|
||||
|
||||
static {
|
||||
APPLICATION_FORM_URLENCODED = new ContentType(MimeType.APPLICATION_FORM_URLENCODED);
|
||||
MULTIPART_FORM_DATA = new ContentType(MimeType.MULTIPART_FORM_DATA);
|
||||
DEFAULT_BINARY = new ContentType(MimeType.APPLICATION_OCTET_STREAM);
|
||||
DEFAULT_TEXT = new ContentType(MimeType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
ContentType(final MimeType mimeType) {
|
||||
this(mimeType, DEFAULT_CHARSET);
|
||||
}
|
||||
|
||||
ContentType(final MimeType mimeType, final Charset charset) {
|
||||
this.mimeType = mimeType;
|
||||
this.charset = charset;
|
||||
}
|
||||
|
||||
public String getMimeType() {
|
||||
public MimeType getMimeType() {
|
||||
return this.mimeType;
|
||||
}
|
||||
|
||||
@ -73,7 +56,7 @@ public final class ContentType implements Serializable {
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder buf = new StringBuilder();
|
||||
buf.append(this.mimeType);
|
||||
buf.append(this.mimeType.toString());
|
||||
if (this.charset != null) {
|
||||
buf.append("; charset=");
|
||||
buf.append(this.charset.name());
|
||||
@ -102,8 +85,18 @@ public final class ContentType implements Serializable {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static ContentType create(final String mimeType,
|
||||
final Charset charset) {
|
||||
public static ContentType create(final MimeType mimeType, final Charset charset) {
|
||||
if (mimeType == null) {
|
||||
throw new IllegalArgumentException("MIME type may not be null");
|
||||
}
|
||||
return new ContentType(mimeType, charset);
|
||||
}
|
||||
|
||||
public static ContentType create(final String mimeType) {
|
||||
return create(MimeType.valueOf(mimeType), (Charset) null);
|
||||
}
|
||||
|
||||
public static ContentType create(final String mimeType, final Charset charset) {
|
||||
if (mimeType == null) {
|
||||
throw new IllegalArgumentException("MIME type may not be null");
|
||||
}
|
||||
@ -112,21 +105,8 @@ public final class ContentType implements Serializable {
|
||||
throw new IllegalArgumentException("MIME type may not be empty");
|
||||
}
|
||||
if (!valid(type)) {
|
||||
throw new IllegalArgumentException(
|
||||
"MIME type may not contain reserved characters");
|
||||
throw new IllegalArgumentException("MIME type may not contain reserved characters");
|
||||
}
|
||||
return new ContentType(type, charset);
|
||||
}
|
||||
|
||||
public static ContentType create(final String mimeType) {
|
||||
return new ContentType(mimeType, (Charset) null);
|
||||
}
|
||||
|
||||
public static ContentType create(final String mimeType, final String charset)
|
||||
throws UnsupportedCharsetException {
|
||||
return create(
|
||||
mimeType,
|
||||
(charset != null && charset.length() > 0) ? Charset
|
||||
.forName(charset) : null);
|
||||
return new ContentType(MimeType.valueOf(type), charset);
|
||||
}
|
||||
}
|
||||
@ -25,7 +25,6 @@ public interface HttpResponse extends HttpMessage {
|
||||
* @return
|
||||
*/
|
||||
HttpStatus getStatus();
|
||||
|
||||
/**
|
||||
* 响应内容
|
||||
*
|
||||
|
||||
@ -0,0 +1,160 @@
|
||||
package com.foxinmy.weixin4j.http;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.foxinmy.weixin4j.util.StringUtil;
|
||||
|
||||
/**
|
||||
* MIME type
|
||||
*
|
||||
* @className MimeType
|
||||
* @author jinyu
|
||||
* @date Jul 20, 2016
|
||||
* @since JDK 1.8
|
||||
*/
|
||||
public class MimeType implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 4430596628682058362L;
|
||||
|
||||
private static final String WILDCARD_TYPE = "*";
|
||||
|
||||
private final String type;
|
||||
private final String subType;
|
||||
|
||||
public static final MimeType APPLICATION_FORM_URLENCODED;
|
||||
public static final MimeType APPLICATION_JSON;
|
||||
public static final MimeType APPLICATION_OCTET_STREAM;
|
||||
public static final MimeType APPLICATION_XML;
|
||||
public static final MimeType MULTIPART_FORM_DATA;
|
||||
public static final MimeType TEXT_HTML;
|
||||
public static final MimeType TEXT_PLAIN;
|
||||
public static final MimeType IMAGE_JPG;
|
||||
public static final MimeType AUDIO_MP3;
|
||||
public static final MimeType VIDEO_MPEG4;
|
||||
public static final MimeType TEXT_XML;
|
||||
|
||||
static {
|
||||
APPLICATION_FORM_URLENCODED = valueOf("application/x-www-form-urlencoded");
|
||||
APPLICATION_JSON = valueOf("application/json");
|
||||
APPLICATION_OCTET_STREAM = valueOf("application/octet-stream");
|
||||
APPLICATION_XML = valueOf("application/xml");
|
||||
MULTIPART_FORM_DATA = MimeType.valueOf("multipart/form-data");
|
||||
TEXT_HTML = valueOf("text/html");
|
||||
TEXT_PLAIN = valueOf("text/plain");
|
||||
IMAGE_JPG = valueOf("image/jpg");
|
||||
AUDIO_MP3 = valueOf("audio/mp3");
|
||||
VIDEO_MPEG4 = valueOf("video/mpeg4");
|
||||
TEXT_XML = valueOf("text/xml");
|
||||
}
|
||||
|
||||
public MimeType(String type) {
|
||||
this(type, WILDCARD_TYPE);
|
||||
}
|
||||
|
||||
public MimeType(String type, String subType) {
|
||||
this.type = type.toLowerCase(Locale.ENGLISH);
|
||||
this.subType = subType.toLowerCase(Locale.ENGLISH);
|
||||
}
|
||||
|
||||
public String getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getSubType() {
|
||||
return subType;
|
||||
}
|
||||
|
||||
public boolean isWildcardType() {
|
||||
return WILDCARD_TYPE.equals(getType());
|
||||
}
|
||||
|
||||
public boolean isWildcardSubtype() {
|
||||
return WILDCARD_TYPE.equals(getSubType()) || getSubType().startsWith("*+");
|
||||
}
|
||||
|
||||
public static MimeType valueOf(String value) {
|
||||
if (StringUtil.isBlank(value)) {
|
||||
return null;
|
||||
}
|
||||
String mimeType = StringUtil.tokenizeToStringArray(value, ";")[0].trim().toLowerCase(Locale.ENGLISH);
|
||||
if (WILDCARD_TYPE.equals(mimeType)) {
|
||||
mimeType = "*/*";
|
||||
}
|
||||
int subIndex = mimeType.indexOf('/');
|
||||
if (subIndex == -1) {
|
||||
throw new IllegalArgumentException(mimeType + ":does not contain '/'");
|
||||
}
|
||||
if (subIndex == mimeType.length() - 1) {
|
||||
throw new IllegalArgumentException(mimeType + ":does not contain subtype after '/'");
|
||||
}
|
||||
String type = mimeType.substring(0, subIndex);
|
||||
String subType = mimeType.substring(subIndex + 1, mimeType.length());
|
||||
if (WILDCARD_TYPE.equals(type) && !WILDCARD_TYPE.equals(subType)) {
|
||||
throw new IllegalArgumentException(mimeType + ":wildcard type is legal only in '*/*' (all mime types)");
|
||||
}
|
||||
return new MimeType(type, subType);
|
||||
}
|
||||
|
||||
/**
|
||||
* reference of apache Spring Web
|
||||
*/
|
||||
public boolean includes(MimeType other) {
|
||||
if (other == null) {
|
||||
return false;
|
||||
}
|
||||
if (this.isWildcardType()) {
|
||||
// */* includes anything
|
||||
return true;
|
||||
} else if (getType().equals(other.getType())) {
|
||||
if (getSubType().equals(other.getSubType())) {
|
||||
return true;
|
||||
}
|
||||
if (this.isWildcardSubtype()) {
|
||||
// wildcard with suffix, e.g. application/*+xml
|
||||
int thisPlusIdx = getSubType().indexOf('+');
|
||||
if (thisPlusIdx == -1) {
|
||||
return true;
|
||||
} else {
|
||||
// application/*+xml includes application/soap+xml
|
||||
int otherPlusIdx = other.getSubType().indexOf('+');
|
||||
if (otherPlusIdx != -1) {
|
||||
String thisSubtypeNoSuffix = getSubType().substring(0, thisPlusIdx);
|
||||
String thisSubtypeSuffix = getSubType().substring(thisPlusIdx + 1);
|
||||
String otherSubtypeSuffix = other.getSubType().substring(otherPlusIdx + 1);
|
||||
if (thisSubtypeSuffix.equals(otherSubtypeSuffix) && WILDCARD_TYPE.equals(thisSubtypeNoSuffix)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("%s/%s", this.type, this.subType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object other) {
|
||||
if (this == other) {
|
||||
return true;
|
||||
}
|
||||
if (!(other instanceof MimeType)) {
|
||||
return false;
|
||||
}
|
||||
MimeType otherType = (MimeType) other;
|
||||
return this.type.equalsIgnoreCase(otherType.type) && this.subType.equalsIgnoreCase(otherType.subType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((subType == null) ? 0 : subType.hashCode());
|
||||
result = prime * result + ((type == null) ? 0 : type.hashCode());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@ -148,7 +148,7 @@ public class SimpleHttpClient extends AbstractHttpClient implements HttpClient {
|
||||
}
|
||||
if (httpEntity.getContentType() != null) {
|
||||
connection.setRequestProperty(HttpHeaders.CONTENT_TYPE,
|
||||
httpEntity.getContentType().getMimeType());
|
||||
httpEntity.getContentType().toString());
|
||||
}
|
||||
logger.debug("entity >> " + httpEntity.getContentType() + "("
|
||||
+ httpEntity.getContentLength() + "byte)");
|
||||
|
||||
@ -137,6 +137,7 @@ public class MultipartEntity implements HttpEntity {
|
||||
return !isRepeatable();
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getContentLength() {
|
||||
if (this.dirty) {
|
||||
this.length = this.multipart.getTotalLength();
|
||||
@ -145,6 +146,7 @@ public class MultipartEntity implements HttpEntity {
|
||||
return this.length;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ContentType getContentType() {
|
||||
return ContentType.MULTIPART_FORM_DATA;
|
||||
}
|
||||
@ -157,12 +159,14 @@ public class MultipartEntity implements HttpEntity {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getContent() throws IOException,
|
||||
UnsupportedOperationException {
|
||||
throw new UnsupportedOperationException(
|
||||
"Multipart form entity does not implement #getContent()");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(final OutputStream outstream) throws IOException {
|
||||
this.multipart.writeTo(outstream);
|
||||
outstream.flush();
|
||||
|
||||
@ -0,0 +1,95 @@
|
||||
package com.foxinmy.weixin4j.http.message;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import com.foxinmy.weixin4j.http.HttpResponse;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
import com.foxinmy.weixin4j.model.Consts;
|
||||
|
||||
public abstract class AbstractMessageConverter implements MessageConverter {
|
||||
|
||||
protected Charset charset = Consts.UTF_8;
|
||||
|
||||
private List<MimeType> supportedMimeTypes;
|
||||
|
||||
protected AbstractMessageConverter() {
|
||||
this.supportedMimeTypes = Collections.emptyList();
|
||||
}
|
||||
|
||||
protected AbstractMessageConverter(MimeType supportedMimeType) {
|
||||
setSupportedMediaTypes(Collections.singletonList(supportedMimeType));
|
||||
}
|
||||
|
||||
protected AbstractMessageConverter(MimeType... supportedMimeTypes) {
|
||||
setSupportedMediaTypes(Arrays.asList(supportedMimeTypes));
|
||||
}
|
||||
|
||||
public void setSupportedMediaTypes(List<MimeType> supportedMimeTypes) {
|
||||
this.supportedMimeTypes = new ArrayList<MimeType>(supportedMimeTypes);
|
||||
}
|
||||
|
||||
public Charset getCharset() {
|
||||
return charset;
|
||||
}
|
||||
|
||||
public void setCharset(Charset charset) {
|
||||
this.charset = charset;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MimeType> supportedMimeTypes() {
|
||||
return Collections.unmodifiableList(this.supportedMimeTypes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConvert(Class<?> clazz, HttpResponse response) {
|
||||
MimeType mimeType = MimeType.valueOf(response.getHeaders().getContentType());
|
||||
byte[] content = response.getContent();
|
||||
return supports(clazz, mimeType) || supports(clazz, content);
|
||||
}
|
||||
|
||||
/**
|
||||
* 满足其中一个supports
|
||||
*
|
||||
* @param clazz
|
||||
* 转换类型
|
||||
* @param mimeType
|
||||
* 媒体类型
|
||||
* @return 支持标识
|
||||
*/
|
||||
protected boolean supports(Class<?> clazz, MimeType mimeType) {
|
||||
if (mimeType == null) {
|
||||
return true;
|
||||
}
|
||||
for (MimeType supportedMediaType : supportedMimeTypes()) {
|
||||
if (supportedMediaType.includes(mimeType)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 满足其中一个supports
|
||||
*
|
||||
* @param clazz
|
||||
* 转换类型
|
||||
* @param content
|
||||
* 内容数据
|
||||
* @return 支持标识
|
||||
*/
|
||||
protected abstract boolean supports(Class<?> clazz, byte[] content);
|
||||
|
||||
@Override
|
||||
public <T> T convert(Class<? extends T> clazz, HttpResponse response) throws IOException {
|
||||
return convertInternal(clazz, response.getBody());
|
||||
}
|
||||
|
||||
protected abstract <T> T convertInternal(Class<? extends T> clazz, InputStream body) throws IOException;
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
package com.foxinmy.weixin4j.http.message;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* 调用接口的返回
|
||||
*
|
||||
* @className ApiResult
|
||||
* @author jinyu(foxinmy@gmail.com)
|
||||
* @date 2014年9月24日
|
||||
* @since JDK 1.6
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234&token=&lang=zh_CN">公众平台全局返回码说明</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E5%85%A8%E5%B1%80%E8%BF%94%E5%9B%9E%E7%A0%81%E8%AF%B4%E6%98%8E">企业号全局返回码说明</a>
|
||||
*/
|
||||
@XmlRootElement
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class ApiResult implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -6185313616955051150L;
|
||||
|
||||
/**
|
||||
* 调用接口返回码,通信标识
|
||||
*/
|
||||
@XmlElement(name = "return_code")
|
||||
@JSONField(name = "errcode")
|
||||
private String returnCode;
|
||||
|
||||
/**
|
||||
* 调用接口返回消息,如非 空,为错误原因 可能为空
|
||||
*/
|
||||
@XmlElement(name = "return_msg")
|
||||
@JSONField(name = "errmsg")
|
||||
private String returnMsg;
|
||||
|
||||
public ApiResult() {
|
||||
this.returnCode = "0";
|
||||
this.returnMsg = "OK";
|
||||
}
|
||||
|
||||
public ApiResult(String returnCode, String returnMsg) {
|
||||
this.returnCode = returnCode;
|
||||
this.returnMsg = returnMsg;
|
||||
}
|
||||
|
||||
public String getReturnCode() {
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
public String getReturnMsg() {
|
||||
return returnMsg;
|
||||
}
|
||||
|
||||
public void setReturnCode(String returnCode) {
|
||||
this.returnCode = returnCode;
|
||||
}
|
||||
|
||||
public void setReturnMsg(String returnMsg) {
|
||||
this.returnMsg = returnMsg;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "returnCode=" + returnCode + ", returnMsg=" + returnMsg;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,55 @@
|
||||
package com.foxinmy.weixin4j.http.message;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.foxinmy.weixin4j.http.HttpHeaders;
|
||||
import com.foxinmy.weixin4j.http.HttpResponse;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
import com.foxinmy.weixin4j.util.FileUtil;
|
||||
import com.foxinmy.weixin4j.util.IOUtil;
|
||||
import com.foxinmy.weixin4j.util.RegexUtil;
|
||||
|
||||
/**
|
||||
* JSON 转换
|
||||
*
|
||||
* @className JsonMessageConverter
|
||||
* @author jinyu
|
||||
* @date Jul 20, 2016
|
||||
* @since JDK 1.8
|
||||
*/
|
||||
public class JsonMessageConverter extends AbstractMessageConverter {
|
||||
|
||||
public static final JsonMessageConverter GLOBAL = new JsonMessageConverter();
|
||||
|
||||
private static final String JSO = "json";
|
||||
private static final int BRACE = 1 << '{';
|
||||
private static final int BRACKET = 1 << '[';
|
||||
private static final int MASK = BRACE | BRACKET;
|
||||
|
||||
public JsonMessageConverter() {
|
||||
super(MimeType.APPLICATION_JSON, new MimeType("application", "*+json"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConvert(Class<?> clazz, HttpResponse response) {
|
||||
if (!super.canConvert(clazz, response)) {
|
||||
String disposition = response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||
String fileName = RegexUtil.regexFileNameFromContentDispositionHeader(disposition);
|
||||
return (fileName != null && FileUtil.getFileExtension(fileName).equalsIgnoreCase(JSO));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supports(Class<?> clazz, byte[] content) {
|
||||
return (MASK & (1 << content[0])) != 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> T convertInternal(Class<? extends T> clazz, InputStream body) throws IOException {
|
||||
byte[] bytes = IOUtil.toByteArray(body);
|
||||
return JSON.parseObject(bytes, 0, bytes.length, charset.newDecoder(), clazz);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
package com.foxinmy.weixin4j.http.message;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import com.foxinmy.weixin4j.http.HttpResponse;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
|
||||
/**
|
||||
* 消息转换接口
|
||||
*
|
||||
* @className MessageConverter
|
||||
* @author jinyu
|
||||
* @date Jul 20, 2016
|
||||
* @since JDK 1.8
|
||||
* @see
|
||||
*/
|
||||
public interface MessageConverter {
|
||||
/**
|
||||
* 获取可以转换的媒体类型
|
||||
*
|
||||
* @return 媒体列表
|
||||
*/
|
||||
public List<MimeType> supportedMimeTypes();
|
||||
|
||||
/**
|
||||
* 是否可以转换
|
||||
*
|
||||
* @param clazz
|
||||
* 转换类型
|
||||
* @param response
|
||||
* 响应对象
|
||||
* @return 是否标识
|
||||
*/
|
||||
public boolean canConvert(Class<?> clazz, HttpResponse response);
|
||||
|
||||
/**
|
||||
* 转换消息
|
||||
*
|
||||
* @param clazz
|
||||
* 转换类型
|
||||
* @param response
|
||||
* 响应对象
|
||||
* @throws IOException
|
||||
* @return 消息对象
|
||||
*/
|
||||
public <T> T convert(Class<? extends T> clazz, HttpResponse response) throws IOException;
|
||||
}
|
||||
@ -0,0 +1,51 @@
|
||||
package com.foxinmy.weixin4j.http.message;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import com.foxinmy.weixin4j.http.HttpHeaders;
|
||||
import com.foxinmy.weixin4j.http.HttpResponse;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
import com.foxinmy.weixin4j.util.FileUtil;
|
||||
import com.foxinmy.weixin4j.util.RegexUtil;
|
||||
import com.foxinmy.weixin4j.xml.XmlStream;
|
||||
|
||||
/**
|
||||
* XML 转换
|
||||
*
|
||||
* @className XmlMessageConverter
|
||||
* @author jinyu
|
||||
* @date Jul 20, 2016
|
||||
* @since JDK 1.8
|
||||
*/
|
||||
public class XmlMessageConverter extends AbstractMessageConverter {
|
||||
|
||||
public static final XmlMessageConverter GLOBAL = new XmlMessageConverter();
|
||||
|
||||
private static final String XML = "xml";
|
||||
private static final int BRACKET = '<';
|
||||
|
||||
public XmlMessageConverter() {
|
||||
super(MimeType.APPLICATION_XML, MimeType.TEXT_XML, new MimeType("application", "*+xml"));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canConvert(Class<?> clazz, HttpResponse response) {
|
||||
if (!super.canConvert(clazz, response)) {
|
||||
String disposition = response.getHeaders().getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||
String fileName = RegexUtil.regexFileNameFromContentDispositionHeader(disposition);
|
||||
return (fileName != null && FileUtil.getFileExtension(fileName).equalsIgnoreCase(XML));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean supports(Class<?> clazz, byte[] content) {
|
||||
return BRACKET == content[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
protected <T> T convertInternal(Class<? extends T> clazz, InputStream body) throws IOException {
|
||||
return XmlStream.fromXML(body, clazz);
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,4 @@
|
||||
package com.foxinmy.weixin4j.http.weixin;
|
||||
|
||||
import java.io.Serializable;
|
||||
package com.foxinmy.weixin4j.http.message;
|
||||
|
||||
import javax.xml.bind.annotation.XmlAccessType;
|
||||
import javax.xml.bind.annotation.XmlAccessorType;
|
||||
@ -20,22 +18,10 @@ import com.alibaba.fastjson.annotation.JSONField;
|
||||
*/
|
||||
@XmlRootElement
|
||||
@XmlAccessorType(XmlAccessType.FIELD)
|
||||
public class XmlResult implements Serializable {
|
||||
public class XmlResult extends ApiResult {
|
||||
|
||||
private static final long serialVersionUID = -6185313616955051150L;
|
||||
|
||||
/**
|
||||
* 此字段是通信标识,非交易 标识,交易是否成功需要查 看 result_code 来判断非空
|
||||
*/
|
||||
@XmlElement(name = "return_code")
|
||||
@JSONField(name = "return_code")
|
||||
private String returnCode;
|
||||
/**
|
||||
* 返回信息,如非 空,为错误原因 可能为空
|
||||
*/
|
||||
@XmlElement(name = "return_msg")
|
||||
@JSONField(name = "return_msg")
|
||||
private String returnMsg;
|
||||
|
||||
/**
|
||||
* 业务结果SUCCESS/FAIL 非空
|
||||
*/
|
||||
@ -55,20 +41,11 @@ public class XmlResult implements Serializable {
|
||||
@JSONField(name = "err_code_des")
|
||||
private String errCodeDes;
|
||||
|
||||
public XmlResult() {
|
||||
protected XmlResult() {
|
||||
}
|
||||
|
||||
public XmlResult(String returnCode, String returnMsg) {
|
||||
this.returnCode = returnCode;
|
||||
this.returnMsg = returnMsg;
|
||||
}
|
||||
|
||||
public String getReturnCode() {
|
||||
return returnCode;
|
||||
}
|
||||
|
||||
public String getReturnMsg() {
|
||||
return returnMsg;
|
||||
super(returnCode, returnMsg);
|
||||
}
|
||||
|
||||
public String getResultCode() {
|
||||
@ -83,14 +60,6 @@ public class XmlResult implements Serializable {
|
||||
return errCodeDes;
|
||||
}
|
||||
|
||||
public void setReturnCode(String returnCode) {
|
||||
this.returnCode = returnCode;
|
||||
}
|
||||
|
||||
public void setReturnMsg(String returnMsg) {
|
||||
this.returnMsg = returnMsg;
|
||||
}
|
||||
|
||||
public void setResultCode(String resultCode) {
|
||||
this.resultCode = resultCode;
|
||||
}
|
||||
@ -105,8 +74,6 @@ public class XmlResult implements Serializable {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "returnCode=" + returnCode + ", returnMsg=" + returnMsg
|
||||
+ ", resultCode=" + resultCode + ", errCode=" + errCode
|
||||
+ ", errCodeDes=" + errCodeDes;
|
||||
return super.toString() + ", resultCode=" + resultCode + ", errCode=" + errCode + ", errCodeDes=" + errCodeDes;
|
||||
}
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
package com.foxinmy.weixin4j.http.weixin;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* 调用接口返回JSON格式
|
||||
*
|
||||
* @className JsonResult
|
||||
* @author jinyu(foxinmy@gmail.com)
|
||||
* @date 2014年9月24日
|
||||
* @since JDK 1.6
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433747234&token=&lang=zh_CN">公众平台全局返回码说明</a>
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E5%85%A8%E5%B1%80%E8%BF%94%E5%9B%9E%E7%A0%81%E8%AF%B4%E6%98%8E">企业号全局返回码说明</a>
|
||||
*/
|
||||
public class JsonResult implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -6185313616955051150L;
|
||||
|
||||
@JSONField(name = "errcode")
|
||||
private int code;
|
||||
@JSONField(name = "errmsg")
|
||||
private String desc;
|
||||
private String text;
|
||||
|
||||
public JsonResult() {
|
||||
this.desc = "";
|
||||
this.text = "";
|
||||
}
|
||||
|
||||
public JsonResult(int code, String desc, String text) {
|
||||
this.code = code;
|
||||
this.desc = desc;
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getDesc() {
|
||||
return desc;
|
||||
}
|
||||
|
||||
public void setDesc(String desc) {
|
||||
this.desc = desc;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "JsonResult [code=" + code + ", desc=" + desc + ", text=" + text
|
||||
+ "]";
|
||||
}
|
||||
}
|
||||
@ -1,13 +1,11 @@
|
||||
package com.foxinmy.weixin4j.http.weixin;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import com.alibaba.fastjson.JSONException;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.ContentType;
|
||||
import com.foxinmy.weixin4j.http.HttpClient;
|
||||
import com.foxinmy.weixin4j.http.HttpClientException;
|
||||
import com.foxinmy.weixin4j.http.HttpHeaders;
|
||||
import com.foxinmy.weixin4j.http.HttpMethod;
|
||||
import com.foxinmy.weixin4j.http.HttpParams;
|
||||
import com.foxinmy.weixin4j.http.HttpRequest;
|
||||
@ -19,10 +17,12 @@ import com.foxinmy.weixin4j.http.entity.FormUrlEntity;
|
||||
import com.foxinmy.weixin4j.http.entity.HttpEntity;
|
||||
import com.foxinmy.weixin4j.http.entity.StringEntity;
|
||||
import com.foxinmy.weixin4j.http.factory.HttpClientFactory;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.message.XmlMessageConverter;
|
||||
import com.foxinmy.weixin4j.http.message.XmlResult;
|
||||
import com.foxinmy.weixin4j.logging.InternalLogger;
|
||||
import com.foxinmy.weixin4j.logging.InternalLoggerFactory;
|
||||
import com.foxinmy.weixin4j.model.Consts;
|
||||
import com.foxinmy.weixin4j.xml.XmlStream;
|
||||
|
||||
/**
|
||||
* 负责微信请求的执行
|
||||
@ -35,8 +35,9 @@ import com.foxinmy.weixin4j.xml.XmlStream;
|
||||
*/
|
||||
public class WeixinRequestExecutor {
|
||||
|
||||
protected final InternalLogger logger = InternalLoggerFactory
|
||||
.getInstance(getClass());
|
||||
protected final InternalLogger logger = InternalLoggerFactory.getInstance(getClass());
|
||||
|
||||
private static final String SUCCESS_CODE = ",0,success,";
|
||||
|
||||
protected final HttpClient httpClient;
|
||||
protected final HttpParams httpParams;
|
||||
@ -55,8 +56,7 @@ public class WeixinRequestExecutor {
|
||||
return doRequest(request);
|
||||
}
|
||||
|
||||
public WeixinResponse get(String url, Map<String, String> parameters)
|
||||
throws WeixinException {
|
||||
public WeixinResponse get(String url, Map<String, String> parameters) throws WeixinException {
|
||||
StringBuilder buf = new StringBuilder(url);
|
||||
if (parameters != null && !parameters.isEmpty()) {
|
||||
if (url.indexOf("?") < 0) {
|
||||
@ -81,10 +81,8 @@ public class WeixinRequestExecutor {
|
||||
return doRequest(request);
|
||||
}
|
||||
|
||||
public WeixinResponse post(String url, FormBodyPart... bodyParts)
|
||||
throws WeixinException {
|
||||
MultipartEntity entity = new MultipartEntity(
|
||||
HttpMultipartMode.BROWSER_COMPATIBLE, null, Consts.UTF_8);
|
||||
public WeixinResponse post(String url, FormBodyPart... bodyParts) throws WeixinException {
|
||||
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Consts.UTF_8);
|
||||
for (FormBodyPart bodyPart : bodyParts) {
|
||||
entity.addPart(bodyPart);
|
||||
}
|
||||
@ -93,85 +91,35 @@ public class WeixinRequestExecutor {
|
||||
return doRequest(request);
|
||||
}
|
||||
|
||||
protected WeixinResponse doRequest(HttpRequest request)
|
||||
throws WeixinException {
|
||||
protected WeixinResponse doRequest(HttpRequest request) throws WeixinException {
|
||||
request.setParams(httpParams);
|
||||
try {
|
||||
logger.info("weixin request >> " + request.getMethod() + " "
|
||||
+ request.getURI().toString());
|
||||
logger.info("weixin request >> " + request.getMethod() + " " + request.getURI().toString());
|
||||
HttpResponse httpResponse = httpClient.execute(request);
|
||||
HttpHeaders headers = httpResponse.getHeaders();
|
||||
WeixinResponse response = new WeixinResponse(httpResponse);
|
||||
logger.info("weixin response << " + httpResponse.getProtocol()
|
||||
+ httpResponse.getStatus() + ":" + response.getAsString());
|
||||
String contentType = headers.getFirst(HttpHeaders.CONTENT_TYPE);
|
||||
String disposition = headers
|
||||
.getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||
// json
|
||||
if (contentType
|
||||
.contains(ContentType.APPLICATION_JSON.getMimeType())
|
||||
|| (disposition != null && disposition.indexOf(".json") > 0)) {
|
||||
checkJson(response);
|
||||
} else if (contentType.contains(ContentType.TEXT_XML.getMimeType())) {
|
||||
checkXml(response);
|
||||
} else if (contentType.contains(ContentType.TEXT_PLAIN
|
||||
.getMimeType())
|
||||
|| contentType
|
||||
.contains(ContentType.TEXT_HTML.getMimeType())) {
|
||||
try {
|
||||
checkJson(response);
|
||||
return response;
|
||||
} catch (JSONException e) {
|
||||
;
|
||||
}
|
||||
try {
|
||||
checkXml(response);
|
||||
return response;
|
||||
} catch (IllegalArgumentException ex) {
|
||||
;
|
||||
}
|
||||
throw new WeixinException(response.getAsString());
|
||||
}
|
||||
logger.info("weixin response << " + httpResponse.getProtocol() + httpResponse.getStatus() + ":"
|
||||
+ response.getAsString());
|
||||
handlResponse(response);
|
||||
return response;
|
||||
} catch (HttpClientException e) {
|
||||
throw new WeixinException(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkJson(WeixinResponse response) throws WeixinException {
|
||||
JsonResult jsonResult = response.getAsJsonResult();
|
||||
response.setJsonResult(true);
|
||||
if (jsonResult.getCode() != 0) {
|
||||
throw new WeixinException(Integer.toString(jsonResult.getCode()),
|
||||
jsonResult.getDesc());
|
||||
protected void handlResponse(WeixinResponse response) throws WeixinException {
|
||||
ApiResult result = response.getAsResult();
|
||||
if (!SUCCESS_CODE.contains(String.format(",%s,", result.getReturnCode().toLowerCase()))) {
|
||||
throw new WeixinException(result.getReturnCode(), result.getReturnMsg());
|
||||
}
|
||||
}
|
||||
|
||||
protected void checkXml(WeixinResponse response) throws WeixinException {
|
||||
String xmlContent = response.getAsString();
|
||||
if (xmlContent.length() != xmlContent.replaceFirst("<retcode>",
|
||||
"<return_code>").length()) {
|
||||
// <?xml><root><data..../data></root>
|
||||
xmlContent = xmlContent.replaceFirst("<root>", "<xml>")
|
||||
.replaceFirst("<retcode>", "<return_code>")
|
||||
.replaceFirst("</retcode>", "</return_code>")
|
||||
.replaceFirst("<retmsg>", "<return_msg>")
|
||||
.replaceFirst("</retmsg>", "</return_msg>")
|
||||
.replaceFirst("</root>", "</xml>");
|
||||
}
|
||||
XmlResult xmlResult = XmlStream.fromXML(xmlContent, XmlResult.class);
|
||||
response.setText(xmlContent);
|
||||
response.setXmlResult(true);
|
||||
if ("0".equals(xmlResult.getReturnCode())) {
|
||||
return;
|
||||
}
|
||||
if (!Consts.SUCCESS.equalsIgnoreCase(xmlResult.getReturnCode())) {
|
||||
throw new WeixinException(xmlResult.getReturnCode(),
|
||||
xmlResult.getReturnMsg());
|
||||
}
|
||||
if (!Consts.SUCCESS.equalsIgnoreCase(xmlResult.getResultCode())) {
|
||||
throw new WeixinException(xmlResult.getErrCode(),
|
||||
xmlResult.getErrCodeDes());
|
||||
if (XmlMessageConverter.GLOBAL.canConvert(XmlResult.class, response)) {
|
||||
try {
|
||||
XmlResult xmlResult = XmlMessageConverter.GLOBAL.convert(XmlResult.class, response);
|
||||
if (!SUCCESS_CODE.contains(xmlResult.getResultCode())) {
|
||||
throw new WeixinException(xmlResult.getErrCode(), xmlResult.getErrCodeDes());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
package com.foxinmy.weixin4j.http.weixin;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@ -8,73 +11,102 @@ import com.alibaba.fastjson.TypeReference;
|
||||
import com.foxinmy.weixin4j.http.HttpHeaders;
|
||||
import com.foxinmy.weixin4j.http.HttpResponse;
|
||||
import com.foxinmy.weixin4j.http.HttpStatus;
|
||||
import com.foxinmy.weixin4j.http.HttpVersion;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.message.JsonMessageConverter;
|
||||
import com.foxinmy.weixin4j.http.message.MessageConverter;
|
||||
import com.foxinmy.weixin4j.http.message.XmlMessageConverter;
|
||||
import com.foxinmy.weixin4j.http.message.XmlResult;
|
||||
import com.foxinmy.weixin4j.util.StringUtil;
|
||||
import com.foxinmy.weixin4j.xml.XmlStream;
|
||||
|
||||
public class WeixinResponse {
|
||||
/**
|
||||
* 调用微信接口响应
|
||||
*
|
||||
* @className WeixinResponse
|
||||
* @author jinyu
|
||||
* @date Jul 21, 2016
|
||||
* @since JDK 1.6
|
||||
*/
|
||||
public class WeixinResponse implements HttpResponse {
|
||||
|
||||
private boolean isJsonResult;
|
||||
private boolean isXmlResult;
|
||||
private volatile String text;
|
||||
|
||||
private final HttpResponse response;
|
||||
private static List<MessageConverter> messageConverters = new ArrayList<MessageConverter>();
|
||||
private final TypeReference<ApiResult> APIRESULT_CLAZZ = new TypeReference<ApiResult>() {
|
||||
};
|
||||
private final TypeReference<XmlResult> XMLRESULT_CLAZZ = new TypeReference<XmlResult>() {
|
||||
};
|
||||
|
||||
static {
|
||||
messageConverters.add(new JsonMessageConverter());
|
||||
messageConverters.add(new XmlMessageConverter());
|
||||
}
|
||||
|
||||
public WeixinResponse(HttpResponse response) {
|
||||
this.response = response;
|
||||
}
|
||||
|
||||
public void setJsonResult(boolean isJsonResult) {
|
||||
this.isJsonResult = isJsonResult;
|
||||
}
|
||||
|
||||
public void setXmlResult(boolean isXmlResult) {
|
||||
this.isXmlResult = isXmlResult;
|
||||
}
|
||||
|
||||
public String getAsString() {
|
||||
if (text == null) {
|
||||
text = StringUtil.newStringUtf8(response.getContent());
|
||||
text = StringUtil.newStringUtf8(getContent());
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public JsonResult getAsJsonResult() {
|
||||
return JSON.parseObject(getAsString(), JsonResult.class);
|
||||
public ApiResult getAsResult() {
|
||||
return getAsObject(APIRESULT_CLAZZ);
|
||||
}
|
||||
|
||||
public JSONObject getAsJson() {
|
||||
return JSON.parseObject(getAsString());
|
||||
}
|
||||
|
||||
public XmlResult getAsXml() {
|
||||
return getAsObject(XMLRESULT_CLAZZ);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T> T getAsObject(TypeReference<T> typeReference) {
|
||||
if (isJsonResult) {
|
||||
return JSON.parseObject(getAsString(), typeReference);
|
||||
Class<T> clazz = (Class<T>) typeReference.getType();
|
||||
for (MessageConverter messageConverter : messageConverters) {
|
||||
if (messageConverter.canConvert(clazz, response)) {
|
||||
try {
|
||||
return messageConverter.convert(clazz, response);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("IO error on convert to " + typeReference, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isXmlResult) {
|
||||
@SuppressWarnings("unchecked")
|
||||
Class<T> clazz = (Class<T>) typeReference.getType();
|
||||
return XmlStream.fromXML(getAsString(), clazz);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public XmlResult getAsXmlResult() {
|
||||
return XmlStream.fromXML(getAsString(), XmlResult.class);
|
||||
throw new RuntimeException("cannot convert to " + typeReference);
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpHeaders getHeaders() {
|
||||
return response.getHeaders();
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpStatus getStatus() {
|
||||
return response.getStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] getContent() {
|
||||
return response.getContent();
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getBody() {
|
||||
return response.getBody();
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpVersion getProtocol() {
|
||||
return response.getProtocol();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() {
|
||||
response.close();
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ import com.foxinmy.weixin4j.api.CouponApi;
|
||||
import com.foxinmy.weixin4j.api.CustomsApi;
|
||||
import com.foxinmy.weixin4j.api.PayApi;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.XmlResult;
|
||||
import com.foxinmy.weixin4j.http.message.XmlResult;
|
||||
import com.foxinmy.weixin4j.model.Pageable;
|
||||
import com.foxinmy.weixin4j.model.WeixinPayAccount;
|
||||
import com.foxinmy.weixin4j.payment.coupon.CouponDetail;
|
||||
|
||||
@ -6,7 +6,7 @@ import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.foxinmy.weixin4j.http.weixin.XmlResult;
|
||||
import com.foxinmy.weixin4j.http.message.XmlResult;
|
||||
import com.foxinmy.weixin4j.type.SignType;
|
||||
|
||||
/**
|
||||
|
||||
@ -11,7 +11,7 @@ import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.foxinmy.weixin4j.http.weixin.XmlResult;
|
||||
import com.foxinmy.weixin4j.http.message.XmlResult;
|
||||
import com.foxinmy.weixin4j.type.RedpacketSendType;
|
||||
import com.foxinmy.weixin4j.type.RedpacketStatus;
|
||||
import com.foxinmy.weixin4j.type.RedpacketType;
|
||||
|
||||
@ -1,19 +1,22 @@
|
||||
package com.foxinmy.weixin4j.type;
|
||||
|
||||
import com.foxinmy.weixin4j.http.ContentType;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
|
||||
/**
|
||||
* 上传的媒体类型</br>
|
||||
* <p>
|
||||
* 公众平台上传限制:</br> 图片(image): 2MB,支持bmp/png/jpeg/jpg/gif格式</br>
|
||||
* 公众平台上传限制:</br>
|
||||
* 图片(image): 2MB,支持bmp/png/jpeg/jpg/gif格式</br>
|
||||
* 语音(voice):2MB,播放长度不超过60s,支持mp3/wma/wav/amr格式</br>
|
||||
* 视频(video):10MB,支持rm/rmvb/wmv/avi/mpg/mpeg/mp4格式</br>
|
||||
* 缩略图(thumb):64KB,支持JPG格式</br>
|
||||
* </p>
|
||||
* <p>
|
||||
* 企业号上传限制:</br> 图片(image):1MB,支持bmp/png/jpeg/jpg/gif格式</br>
|
||||
* 企业号上传限制:</br>
|
||||
* 图片(image):1MB,支持bmp/png/jpeg/jpg/gif格式</br>
|
||||
* 语音(voice):2MB,播放长度不超过60s,支持mp3/wma/wav/amr格式</br>
|
||||
* 视频(video):10MB,支持rm/rmvb/wmv/avi/mpg/mpeg/mp4格式</br> 普通文件(file):20MB</br>
|
||||
* 视频(video):10MB,支持rm/rmvb/wmv/avi/mpg/mpeg/mp4格式</br>
|
||||
* 普通文件(file):20MB</br>
|
||||
* </p>
|
||||
* <p>
|
||||
* <font color='red'>临时媒体文件在后台保存时间为3天,即3天后media_id失效</font>
|
||||
@ -24,18 +27,16 @@ import com.foxinmy.weixin4j.http.ContentType;
|
||||
* @since JDK 1.6
|
||||
*/
|
||||
public enum MediaType {
|
||||
image(ContentType.IMAGE_JPG), voice(ContentType.AUDIO_MP3), video(
|
||||
ContentType.VIDEO_MPEG4), thumb(ContentType.IMAGE_JPG), file(
|
||||
ContentType.MULTIPART_FORM_DATA), news(
|
||||
ContentType.MULTIPART_FORM_DATA);
|
||||
image(MimeType.IMAGE_JPG), voice(MimeType.AUDIO_MP3), video(MimeType.VIDEO_MPEG4), thumb(MimeType.IMAGE_JPG), file(
|
||||
MimeType.MULTIPART_FORM_DATA), news(MimeType.MULTIPART_FORM_DATA);
|
||||
|
||||
MediaType(ContentType contentType) {
|
||||
this.contentType = contentType;
|
||||
MediaType(MimeType mimeType) {
|
||||
this.mimeType = mimeType;
|
||||
}
|
||||
|
||||
private ContentType contentType;
|
||||
private MimeType mimeType;
|
||||
|
||||
public ContentType getContentType() {
|
||||
return contentType;
|
||||
public MimeType getMimeType() {
|
||||
return mimeType;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,10 @@
|
||||
package com.foxinmy.weixin4j.util;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import com.foxinmy.weixin4j.model.Consts;
|
||||
|
||||
@ -62,9 +65,7 @@ public final class StringUtil {
|
||||
return str;
|
||||
}
|
||||
|
||||
return new StringBuilder(strLen)
|
||||
.append(Character.toLowerCase(firstChar))
|
||||
.append(str.substring(1)).toString();
|
||||
return new StringBuilder(strLen).append(Character.toLowerCase(firstChar)).append(str.substring(1)).toString();
|
||||
}
|
||||
|
||||
public static String capitalize(final String str) {
|
||||
@ -78,13 +79,10 @@ public final class StringUtil {
|
||||
// already capitalized
|
||||
return str;
|
||||
}
|
||||
return new StringBuilder(strLen)
|
||||
.append(Character.toTitleCase(firstChar))
|
||||
.append(str.substring(1)).toString();
|
||||
return new StringBuilder(strLen).append(Character.toTitleCase(firstChar)).append(str.substring(1)).toString();
|
||||
}
|
||||
|
||||
public static String substringBefore(final String str,
|
||||
final String separator) {
|
||||
public static String substringBefore(final String str, final String separator) {
|
||||
if (isEmpty(str) || separator == null) {
|
||||
return str;
|
||||
}
|
||||
@ -119,8 +117,7 @@ public final class StringUtil {
|
||||
return join(array, separator, 0, array.length);
|
||||
}
|
||||
|
||||
public static String join(final Object[] array, final char separator,
|
||||
final int startIndex, final int endIndex) {
|
||||
public static String join(final Object[] array, final char separator, final int startIndex, final int endIndex) {
|
||||
if (array == null) {
|
||||
return null;
|
||||
}
|
||||
@ -187,8 +184,7 @@ public final class StringUtil {
|
||||
return join(array, separator, 0, array.length);
|
||||
}
|
||||
|
||||
public static String join(final int[] array, final char separator,
|
||||
final int startIndex, final int endIndex) {
|
||||
public static String join(final int[] array, final char separator, final int startIndex, final int endIndex) {
|
||||
if (array == null) {
|
||||
return null;
|
||||
}
|
||||
@ -234,4 +230,28 @@ public final class StringUtil {
|
||||
return clazz.getName();
|
||||
}
|
||||
}
|
||||
|
||||
public static String[] tokenizeToStringArray(String str, String delimiters) {
|
||||
return tokenizeToStringArray(str, delimiters, true, true);
|
||||
}
|
||||
|
||||
public static String[] tokenizeToStringArray(String str, String delimiters, boolean trimTokens,
|
||||
boolean ignoreEmptyTokens) {
|
||||
|
||||
if (str == null) {
|
||||
return null;
|
||||
}
|
||||
StringTokenizer st = new StringTokenizer(str, delimiters);
|
||||
List<String> tokens = new ArrayList<String>();
|
||||
while (st.hasMoreTokens()) {
|
||||
String token = st.nextToken();
|
||||
if (trimTokens) {
|
||||
token = token.trim();
|
||||
}
|
||||
if (!ignoreEmptyTokens || token.length() > 0) {
|
||||
tokens.add(token);
|
||||
}
|
||||
}
|
||||
return tokens.toArray(new String[tokens.size()]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -69,7 +69,7 @@ public final class XmlStream {
|
||||
unmarshaller = jaxbContext.createUnmarshaller();
|
||||
messageUnmarshaller.put(clazz, unmarshaller);
|
||||
} catch (JAXBException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
try {
|
||||
@ -83,7 +83,7 @@ public final class XmlStream {
|
||||
return (T) unmarshaller.unmarshal(source);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (content != null) {
|
||||
try {
|
||||
|
||||
@ -11,7 +11,7 @@ import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.exception.WeixinPayException;
|
||||
import com.foxinmy.weixin4j.http.weixin.XmlResult;
|
||||
import com.foxinmy.weixin4j.http.message.XmlResult;
|
||||
import com.foxinmy.weixin4j.model.WeixinPayAccount;
|
||||
import com.foxinmy.weixin4j.payment.WeixinPayProxy;
|
||||
import com.foxinmy.weixin4j.payment.mch.MchPayPackage;
|
||||
@ -45,7 +45,7 @@ public class PayTest {
|
||||
static {
|
||||
ACCOUNT = new WeixinPayAccount("appid", "paysignkey", "mchid");
|
||||
SIGNATURE = new WeixinPaymentSignature(ACCOUNT.getPaySignKey());
|
||||
PAY = new WeixinPayProxy(new Weixin4jSettings(ACCOUNT));
|
||||
PAY = new WeixinPayProxy(new Weixin4jSettings<WeixinPayAccount>(ACCOUNT));
|
||||
}
|
||||
/**
|
||||
* 商户证书文件
|
||||
|
||||
@ -5,7 +5,7 @@ import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.Button;
|
||||
import com.foxinmy.weixin4j.model.MediaCounter;
|
||||
import com.foxinmy.weixin4j.model.MediaDownloadResult;
|
||||
@ -370,7 +370,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738732&token=&lang=zh_CN">
|
||||
* 更新永久图文素材</a>
|
||||
*/
|
||||
public JsonResult updateMaterialArticle(String mediaId, int index,
|
||||
public ApiResult updateMaterialArticle(String mediaId, int index,
|
||||
MpArticle article) throws WeixinException {
|
||||
return mediaApi.updateMaterialArticle(mediaId, index, article);
|
||||
}
|
||||
@ -387,7 +387,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738731&token=&lang=zh_CN">
|
||||
* 删除永久媒体素材</a>
|
||||
*/
|
||||
public JsonResult deleteMaterialMedia(String mediaId)
|
||||
public ApiResult deleteMaterialMedia(String mediaId)
|
||||
throws WeixinException {
|
||||
return mediaApi.deleteMaterialMedia(mediaId);
|
||||
}
|
||||
@ -478,7 +478,7 @@ public class WeixinProxy {
|
||||
* @see {@link #sendNotify(NotifyMessage,String) }
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult sendNotify(NotifyMessage notify) throws WeixinException {
|
||||
public ApiResult sendNotify(NotifyMessage notify) throws WeixinException {
|
||||
return notifyApi.sendNotify(notify);
|
||||
}
|
||||
|
||||
@ -502,7 +502,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.tuple.News
|
||||
* @see com.foxinmy.weixin4j.mp.api.NotifyApi
|
||||
*/
|
||||
public JsonResult sendNotify(NotifyMessage notify, String kfAccount)
|
||||
public ApiResult sendNotify(NotifyMessage notify, String kfAccount)
|
||||
throws WeixinException {
|
||||
return notifyApi.sendNotify(notify, kfAccount);
|
||||
}
|
||||
@ -568,7 +568,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 新增客服账号</a>
|
||||
*/
|
||||
public JsonResult createKfAccount(String id, String name, String pwd)
|
||||
public ApiResult createKfAccount(String id, String name, String pwd)
|
||||
throws WeixinException {
|
||||
return customApi.createKfAccount(id, name, pwd);
|
||||
}
|
||||
@ -590,7 +590,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 更新客服账号</a>
|
||||
*/
|
||||
public JsonResult updateKfAccount(String id, String name, String pwd)
|
||||
public ApiResult updateKfAccount(String id, String name, String pwd)
|
||||
throws WeixinException {
|
||||
return customApi.updateKfAccount(id, name, pwd);
|
||||
}
|
||||
@ -611,7 +611,7 @@ public class WeixinProxy {
|
||||
* >邀请绑定客服帐号<a/>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult inviteKfAccount(String kfAccount, String inviteAccount)
|
||||
public ApiResult inviteKfAccount(String kfAccount, String inviteAccount)
|
||||
throws WeixinException {
|
||||
return customApi.inviteKfAccount(kfAccount, inviteAccount);
|
||||
}
|
||||
@ -632,7 +632,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 上传客服头像</a>
|
||||
*/
|
||||
public JsonResult uploadKfAvatar(String accountId, InputStream is,
|
||||
public ApiResult uploadKfAvatar(String accountId, InputStream is,
|
||||
String fileName) throws WeixinException {
|
||||
return customApi.uploadKfAvatar(accountId, is, fileName);
|
||||
}
|
||||
@ -649,7 +649,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 删除客服账号</a>
|
||||
*/
|
||||
public JsonResult deleteKfAccount(String id) throws WeixinException {
|
||||
public ApiResult deleteKfAccount(String id) throws WeixinException {
|
||||
return customApi.deleteKfAccount(id);
|
||||
}
|
||||
|
||||
@ -673,7 +673,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 创建会话</a>
|
||||
*/
|
||||
public JsonResult createKfSession(String userOpenId, String kfAccount,
|
||||
public ApiResult createKfSession(String userOpenId, String kfAccount,
|
||||
String text) throws WeixinException {
|
||||
return customApi.createKfSession(userOpenId, kfAccount, text);
|
||||
}
|
||||
@ -694,7 +694,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044820&token=&lang=zh_CN">
|
||||
* 关闭会话</a>
|
||||
*/
|
||||
public JsonResult closeKfSession(String userOpenId, String kfAccount,
|
||||
public ApiResult closeKfSession(String userOpenId, String kfAccount,
|
||||
String text) throws WeixinException {
|
||||
return customApi.closeKfSession(userOpenId, kfAccount, text);
|
||||
}
|
||||
@ -891,7 +891,7 @@ public class WeixinProxy {
|
||||
* @see {@link #massByOpenIds(Tuple, String...)
|
||||
*
|
||||
*/
|
||||
public JsonResult deleteMassNews(String msgid) throws WeixinException {
|
||||
public ApiResult deleteMassNews(String msgid) throws WeixinException {
|
||||
return massApi.deleteMassNews(msgid);
|
||||
}
|
||||
|
||||
@ -912,7 +912,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN">
|
||||
* 预览群发消息</a>
|
||||
*/
|
||||
public JsonResult previewMassNews(String toUser, String toWxName,
|
||||
public ApiResult previewMassNews(String toUser, String toWxName,
|
||||
MassTuple tuple) throws WeixinException {
|
||||
return massApi.previewMassNews(toUser, toWxName, tuple);
|
||||
}
|
||||
@ -1109,7 +1109,7 @@ public class WeixinProxy {
|
||||
* 设置用户备注名</a>
|
||||
* @see com.foxinmy.weixin4j.mp.api.UserApi
|
||||
*/
|
||||
public JsonResult remarkUserName(String openId, String remark)
|
||||
public ApiResult remarkUserName(String openId, String remark)
|
||||
throws WeixinException {
|
||||
return userApi.remarkUserName(openId, remark);
|
||||
}
|
||||
@ -1178,7 +1178,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
* @see com.foxinmy.weixin4j.mp.api.GroupApi
|
||||
*/
|
||||
public JsonResult modifyGroup(int groupId, String name)
|
||||
public ApiResult modifyGroup(int groupId, String name)
|
||||
throws WeixinException {
|
||||
return groupApi.modifyGroup(groupId, name);
|
||||
}
|
||||
@ -1197,7 +1197,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
* @see com.foxinmy.weixin4j.mp.api.GroupApi
|
||||
*/
|
||||
public JsonResult moveGroup(int groupId, String openId)
|
||||
public ApiResult moveGroup(int groupId, String openId)
|
||||
throws WeixinException {
|
||||
return groupApi.moveGroup(groupId, openId);
|
||||
}
|
||||
@ -1216,7 +1216,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
* @see com.foxinmy.weixin4j.mp.api.GroupApi
|
||||
*/
|
||||
public JsonResult moveGroup(int groupId, String... openIds)
|
||||
public ApiResult moveGroup(int groupId, String... openIds)
|
||||
throws WeixinException {
|
||||
return groupApi.moveGroup(groupId, openIds);
|
||||
}
|
||||
@ -1233,7 +1233,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
* @see com.foxinmy.weixin4j.mp.api.GroupApi
|
||||
*/
|
||||
public JsonResult deleteGroup(int groupId) throws WeixinException {
|
||||
public ApiResult deleteGroup(int groupId) throws WeixinException {
|
||||
return groupApi.deleteGroup(groupId);
|
||||
}
|
||||
|
||||
@ -1250,7 +1250,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.type.ButtonType
|
||||
* @see com.foxinmy.weixin4j.mp.api.MenuApi
|
||||
*/
|
||||
public JsonResult createMenu(List<Button> buttons) throws WeixinException {
|
||||
public ApiResult createMenu(List<Button> buttons) throws WeixinException {
|
||||
return menuApi.createMenu(buttons);
|
||||
}
|
||||
|
||||
@ -1298,7 +1298,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.mp.api.MenuApi
|
||||
* @return 处理结果
|
||||
*/
|
||||
public JsonResult deleteMenu() throws WeixinException {
|
||||
public ApiResult deleteMenu() throws WeixinException {
|
||||
return menuApi.deleteMenu();
|
||||
}
|
||||
|
||||
@ -1332,7 +1332,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.mp.api.MenuApi
|
||||
* @return 处理结果
|
||||
*/
|
||||
public JsonResult deleteCustomMenu(String menuId) throws WeixinException {
|
||||
public ApiResult deleteCustomMenu(String menuId) throws WeixinException {
|
||||
return menuApi.deleteCustomMenu(menuId);
|
||||
}
|
||||
|
||||
@ -1384,7 +1384,7 @@ public class WeixinProxy {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN">
|
||||
* 设置所处行业</a>
|
||||
*/
|
||||
public JsonResult setTmplIndustry(IndustryType... industryTypes)
|
||||
public ApiResult setTmplIndustry(IndustryType... industryTypes)
|
||||
throws WeixinException {
|
||||
return tmplApi.setTmplIndustry(industryTypes);
|
||||
}
|
||||
@ -1432,7 +1432,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.mp.api.TmplApi
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteTemplate(String templateId) throws WeixinException {
|
||||
public ApiResult deleteTemplate(String templateId) throws WeixinException {
|
||||
return tmplApi.deleteTemplate(templateId);
|
||||
}
|
||||
|
||||
@ -1453,7 +1453,7 @@ public class WeixinProxy {
|
||||
* @seee com.foxinmy.weixin4j.msg.event.TemplatesendjobfinishMessage
|
||||
* @see com.foxinmy.weixin4j.mp.api.TmplApi
|
||||
*/
|
||||
public JsonResult sendTmplMessage(TemplateMessage tplMessage)
|
||||
public ApiResult sendTmplMessage(TemplateMessage tplMessage)
|
||||
throws WeixinException {
|
||||
return tmplApi.sendTmplMessage(tplMessage);
|
||||
}
|
||||
@ -1518,7 +1518,7 @@ public class WeixinProxy {
|
||||
* @return 操作结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult clearQuota() throws WeixinException {
|
||||
public ApiResult clearQuota() throws WeixinException {
|
||||
return helperApi.clearQuota(getWeixinAccount().getId());
|
||||
}
|
||||
|
||||
@ -1687,7 +1687,7 @@ public class WeixinProxy {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">更新标签</a>
|
||||
*/
|
||||
public JsonResult updateTag(Tag tag) throws WeixinException {
|
||||
public ApiResult updateTag(Tag tag) throws WeixinException {
|
||||
return tagApi.updateTag(tag);
|
||||
}
|
||||
|
||||
@ -1702,7 +1702,7 @@ public class WeixinProxy {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">删除标签</a>
|
||||
*/
|
||||
public JsonResult deleteTag(int tagId) throws WeixinException {
|
||||
public ApiResult deleteTag(int tagId) throws WeixinException {
|
||||
return tagApi.deleteTag(tagId);
|
||||
}
|
||||
|
||||
@ -1719,7 +1719,7 @@ public class WeixinProxy {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">批量为用户打标签</a>
|
||||
*/
|
||||
public JsonResult taggingUsers(int tagId, String... openIds)
|
||||
public ApiResult taggingUsers(int tagId, String... openIds)
|
||||
throws WeixinException {
|
||||
return tagApi.taggingUsers(tagId, openIds);
|
||||
}
|
||||
@ -1737,7 +1737,7 @@ public class WeixinProxy {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">批量为用户取消标签</a>
|
||||
*/
|
||||
public JsonResult untaggingUsers(int tagId, String... openIds)
|
||||
public ApiResult untaggingUsers(int tagId, String... openIds)
|
||||
throws WeixinException {
|
||||
return tagApi.untaggingUsers(tagId, openIds);
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.mp.component.WeixinComponentPreCodeCreator;
|
||||
@ -222,7 +222,7 @@ public class ComponentApi extends MpApi {
|
||||
* @see com.foxinmy.weixin4j.mp.model.AuthorizerOption
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult setAuthorizerOption(String authAppId,
|
||||
public ApiResult setAuthorizerOption(String authAppId,
|
||||
AuthorizerOption option) throws WeixinException {
|
||||
String component_set_authorizer_option_uri = getRequestUri("component_set_authorizer_option_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -233,6 +233,6 @@ public class ComponentApi extends MpApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(component_set_authorizer_option_uri,
|
||||
tokenManager.getAccessToken()), obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -9,10 +9,10 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.ContentType;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
import com.foxinmy.weixin4j.http.apache.FormBodyPart;
|
||||
import com.foxinmy.weixin4j.http.apache.InputStreamBody;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Pageable;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
@ -130,7 +130,7 @@ public class CustomApi extends MpApi {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 新增客服账号</a>
|
||||
*/
|
||||
public JsonResult createKfAccount(String id, String name, String pwd) throws WeixinException {
|
||||
public ApiResult createKfAccount(String id, String name, String pwd) throws WeixinException {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("kf_account", id);
|
||||
obj.put("nickname", name);
|
||||
@ -139,7 +139,7 @@ public class CustomApi extends MpApi {
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(String.format(kf_create_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -158,7 +158,7 @@ public class CustomApi extends MpApi {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 新增客服账号</a>
|
||||
*/
|
||||
public JsonResult updateKfAccount(String id, String name, String pwd) throws WeixinException {
|
||||
public ApiResult updateKfAccount(String id, String name, String pwd) throws WeixinException {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("kf_account", id);
|
||||
obj.put("nickname", name);
|
||||
@ -167,7 +167,7 @@ public class CustomApi extends MpApi {
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(String.format(kf_update_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -185,7 +185,7 @@ public class CustomApi extends MpApi {
|
||||
* >邀请绑定客服帐号<a/>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult inviteKfAccount(String kfAccount, String inviteAccount) throws WeixinException {
|
||||
public ApiResult inviteKfAccount(String kfAccount, String inviteAccount) throws WeixinException {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("kf_account", kfAccount);
|
||||
obj.put("invite_wx", inviteAccount);
|
||||
@ -193,7 +193,7 @@ public class CustomApi extends MpApi {
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(String.format(kf_invite_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -211,19 +211,20 @@ public class CustomApi extends MpApi {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 上传客服头像</a>
|
||||
*/
|
||||
public JsonResult uploadKfAvatar(String accountId, InputStream is, String fileName) throws WeixinException {
|
||||
public ApiResult uploadKfAvatar(String accountId, InputStream is, String fileName) throws WeixinException {
|
||||
if (StringUtil.isBlank(fileName)) {
|
||||
fileName = ObjectId.get().toHexString();
|
||||
}
|
||||
if (StringUtil.isBlank(FileUtil.getFileExtension(fileName))) {
|
||||
fileName = String.format("%s.jpg", fileName);
|
||||
}
|
||||
MimeType mimeType = new MimeType("image", FileUtil.getFileExtension(fileName));
|
||||
Token token = tokenManager.getCache();
|
||||
String kf_avatar_uri = getRequestUri("kf_avatar_uri");
|
||||
WeixinResponse response = weixinExecutor.post(String.format(kf_avatar_uri, token.getAccessToken(), accountId),
|
||||
new FormBodyPart("media", new InputStreamBody(is, ContentType.IMAGE_JPG.getMimeType(), fileName)));
|
||||
new FormBodyPart("media", new InputStreamBody(is, mimeType.toString(), fileName)));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -237,12 +238,12 @@ public class CustomApi extends MpApi {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044813&token=&lang=zh_CN">
|
||||
* 删除客服账号</a>
|
||||
*/
|
||||
public JsonResult deleteKfAccount(String id) throws WeixinException {
|
||||
public ApiResult deleteKfAccount(String id) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String kf_delete_uri = getRequestUri("kf_delete_uri");
|
||||
WeixinResponse response = weixinExecutor.get(String.format(kf_delete_uri, token.getAccessToken(), id));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -264,7 +265,7 @@ public class CustomApi extends MpApi {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044820&token=&lang=zh_CN">
|
||||
* 创建会话</a>
|
||||
*/
|
||||
public JsonResult createKfSession(String userOpenId, String kfAccount, String text) throws WeixinException {
|
||||
public ApiResult createKfSession(String userOpenId, String kfAccount, String text) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String kfsession_create_uri = getRequestUri("kfsession_create_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -274,7 +275,7 @@ public class CustomApi extends MpApi {
|
||||
WeixinResponse response = weixinExecutor.post(String.format(kfsession_create_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -292,7 +293,7 @@ public class CustomApi extends MpApi {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1458044820&token=&lang=zh_CN">
|
||||
* 关闭会话</a>
|
||||
*/
|
||||
public JsonResult closeKfSession(String userOpenId, String kfAccount, String text) throws WeixinException {
|
||||
public ApiResult closeKfSession(String userOpenId, String kfAccount, String text) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String kfsession_close_uri = getRequestUri("kfsession_close_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -302,7 +303,7 @@ public class CustomApi extends MpApi {
|
||||
WeixinResponse response = weixinExecutor.post(String.format(kfsession_close_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -5,7 +5,7 @@ import java.util.List;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.mp.model.Group;
|
||||
@ -104,7 +104,7 @@ public class GroupApi extends MpApi {
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group#toModifyJson()
|
||||
*/
|
||||
public JsonResult modifyGroup(int groupId, String name)
|
||||
public ApiResult modifyGroup(int groupId, String name)
|
||||
throws WeixinException {
|
||||
String group_modify_uri = getRequestUri("group_modify_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
@ -113,7 +113,7 @@ public class GroupApi extends MpApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(group_modify_uri, token.getAccessToken()),
|
||||
group.toModifyJson());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -128,7 +128,7 @@ public class GroupApi extends MpApi {
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">移动分组</a>
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
*/
|
||||
public JsonResult moveGroup(int groupId, String openId)
|
||||
public ApiResult moveGroup(int groupId, String openId)
|
||||
throws WeixinException {
|
||||
String group_move_uri = getRequestUri("group_move_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
@ -136,7 +136,7 @@ public class GroupApi extends MpApi {
|
||||
token.getAccessToken()), String.format(
|
||||
"{\"openid\":\"%s\",\"to_groupid\":%d}", openId, groupId));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -151,7 +151,7 @@ public class GroupApi extends MpApi {
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">批量移动分组</a>
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
*/
|
||||
public JsonResult moveGroup(int groupId, String... openIds)
|
||||
public ApiResult moveGroup(int groupId, String... openIds)
|
||||
throws WeixinException {
|
||||
String group_batchmove_uri = getRequestUri("group_batchmove_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
@ -162,7 +162,7 @@ public class GroupApi extends MpApi {
|
||||
String.format(group_batchmove_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -175,13 +175,13 @@ public class GroupApi extends MpApi {
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">删除用户分组</a>
|
||||
* @see com.foxinmy.weixin4j.mp.model.Group
|
||||
*/
|
||||
public JsonResult deleteGroup(int groupId) throws WeixinException {
|
||||
public ApiResult deleteGroup(int groupId) throws WeixinException {
|
||||
String group_delete_uri = getRequestUri("group_delete_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(group_delete_uri, token.getAccessToken()),
|
||||
String.format("{\"group\":{\"id\":%d}}", groupId));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -10,7 +10,7 @@ import com.alibaba.fastjson.JSONPath;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.alibaba.fastjson.parser.deserializer.ExtraProcessor;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Button;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
@ -233,12 +233,12 @@ public class HelperApi extends MpApi {
|
||||
* @return 操作结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult clearQuota(String appId) throws WeixinException {
|
||||
public ApiResult clearQuota(String appId) throws WeixinException {
|
||||
String clearquota_uri = getRequestUri("clearquota_uri");
|
||||
String body = String.format("{\"appid\":\"%s\"}", appId);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(clearquota_uri, tokenManager.getAccessToken()),
|
||||
body);
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
@ -7,7 +7,7 @@ import java.util.Map;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.token.TokenManager;
|
||||
@ -224,7 +224,7 @@ public class MassApi extends MpApi {
|
||||
* @see {@link #massByGroupId(Tuple, int)}
|
||||
* @see {@link #massByOpenIds(Tuple, String...)
|
||||
*/
|
||||
public JsonResult deleteMassNews(String msgid) throws WeixinException {
|
||||
public ApiResult deleteMassNews(String msgid) throws WeixinException {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("msgid", msgid);
|
||||
String mass_delete_uri = getRequestUri("mass_delete_uri");
|
||||
@ -233,7 +233,7 @@ public class MassApi extends MpApi {
|
||||
String.format(mass_delete_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -251,7 +251,7 @@ public class MassApi extends MpApi {
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN">预览群发消息</a>
|
||||
*/
|
||||
public JsonResult previewMassNews(String toUser, String toWxName,
|
||||
public ApiResult previewMassNews(String toUser, String toWxName,
|
||||
MassTuple tuple) throws WeixinException {
|
||||
String msgtype = tuple.getMessageType();
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -265,7 +265,7 @@ public class MassApi extends MpApi {
|
||||
String.format(mass_preview_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -19,12 +19,14 @@ import com.foxinmy.weixin4j.http.HttpHeaders;
|
||||
import com.foxinmy.weixin4j.http.HttpMethod;
|
||||
import com.foxinmy.weixin4j.http.HttpRequest;
|
||||
import com.foxinmy.weixin4j.http.HttpResponse;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
import com.foxinmy.weixin4j.http.apache.ByteArrayBody;
|
||||
import com.foxinmy.weixin4j.http.apache.FormBodyPart;
|
||||
import com.foxinmy.weixin4j.http.apache.InputStreamBody;
|
||||
import com.foxinmy.weixin4j.http.apache.StringBody;
|
||||
import com.foxinmy.weixin4j.http.entity.StringEntity;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.message.JsonMessageConverter;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Consts;
|
||||
import com.foxinmy.weixin4j.model.MediaCounter;
|
||||
@ -71,8 +73,7 @@ public class MediaApi extends MpApi {
|
||||
* @return 图片URL 可用于群发消息中的图片链接和创建卡券logo链接
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public String uploadImage(InputStream is, String fileName)
|
||||
throws WeixinException {
|
||||
public String uploadImage(InputStream is, String fileName) throws WeixinException {
|
||||
if (StringUtil.isBlank(fileName)) {
|
||||
fileName = ObjectId.get().toHexString();
|
||||
}
|
||||
@ -80,11 +81,10 @@ public class MediaApi extends MpApi {
|
||||
fileName = String.format("%s.jpg", fileName);
|
||||
}
|
||||
String image_upload_uri = getRequestUri("image_upload_uri");
|
||||
MimeType mimeType = new MimeType("image", FileUtil.getFileExtension(fileName));
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(String.format(
|
||||
image_upload_uri, token.getAccessToken()),
|
||||
new FormBodyPart("media", new InputStreamBody(is,
|
||||
ContentType.IMAGE_JPG.getMimeType(), fileName)));
|
||||
WeixinResponse response = weixinExecutor.post(String.format(image_upload_uri, token.getAccessToken()),
|
||||
new FormBodyPart("media", new InputStreamBody(is, mimeType.toString(), fileName)));
|
||||
return response.getAsJson().getString("url");
|
||||
}
|
||||
|
||||
@ -101,12 +101,12 @@ public class MediaApi extends MpApi {
|
||||
* 视频描述 可为空
|
||||
* @return 群发视频消息对象
|
||||
* @throws WeixinException
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN">高级群发</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140549&token=&lang=zh_CN">高级群发</a>
|
||||
* @see com.foxinmy.weixin4j.tuple.MpVideo
|
||||
*/
|
||||
public MpVideo uploadVideo(InputStream is, String fileName, String title,
|
||||
String description) throws WeixinException {
|
||||
public MpVideo uploadVideo(InputStream is, String fileName, String title, String description)
|
||||
throws WeixinException {
|
||||
MediaUploadResult uploadResult = uploadMedia(false, is, fileName);
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("media_id", uploadResult.getMediaId());
|
||||
@ -114,8 +114,7 @@ public class MediaApi extends MpApi {
|
||||
obj.put("description", description);
|
||||
String video_upload_uri = getRequestUri("video_upload_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(video_upload_uri, token.getAccessToken()),
|
||||
WeixinResponse response = weixinExecutor.post(String.format(video_upload_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
String mediaId = response.getAsJson().getString("media_id");
|
||||
@ -123,8 +122,8 @@ public class MediaApi extends MpApi {
|
||||
}
|
||||
|
||||
/**
|
||||
* 上传媒体文件:图片(image)、语音(voice)、视频(video)和缩略图(thumb) </br> <font
|
||||
* color="red">此接口只包含图片、语音、缩略图、视频(临时)四种媒体类型的上传</font>
|
||||
* 上传媒体文件:图片(image)、语音(voice)、视频(video)和缩略图(thumb) </br>
|
||||
* <font color="red">此接口只包含图片、语音、缩略图、视频(临时)四种媒体类型的上传</font>
|
||||
* <p>
|
||||
* 正常情况下返回{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789},
|
||||
* 否则抛出异常.
|
||||
@ -137,16 +136,15 @@ public class MediaApi extends MpApi {
|
||||
* @param fileName
|
||||
* 文件名
|
||||
* @return 上传到微信服务器返回的媒体标识
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738726&token=&lang=zh_CN">上传临时素材</a>
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729&token=&lang=zh_CN">上传永久素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738726&token=&lang=zh_CN">上传临时素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729&token=&lang=zh_CN">上传永久素材</a>
|
||||
* @see com.foxinmy.weixin4j.model.MediaUploadResult
|
||||
* @see com.foxinmy.weixin4j.type.MediaType
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public MediaUploadResult uploadMedia(boolean isMaterial, InputStream is,
|
||||
String fileName) throws WeixinException {
|
||||
public MediaUploadResult uploadMedia(boolean isMaterial, InputStream is, String fileName) throws WeixinException {
|
||||
byte[] content;
|
||||
try {
|
||||
content = IOUtil.toByteArray(is);
|
||||
@ -158,55 +156,42 @@ public class MediaApi extends MpApi {
|
||||
}
|
||||
String suffixName = FileUtil.getFileExtension(fileName);
|
||||
if (StringUtil.isBlank(suffixName)) {
|
||||
suffixName = FileUtil
|
||||
.getFileType(new ByteArrayInputStream(content));
|
||||
suffixName = FileUtil.getFileType(new ByteArrayInputStream(content));
|
||||
fileName = String.format("%s.%s", fileName, suffixName);
|
||||
}
|
||||
MediaType mediaType;
|
||||
if (",bmp,png,jpeg,jpg,gif,"
|
||||
.contains(String.format(",%s,", suffixName))) {
|
||||
if (",bmp,png,jpeg,jpg,gif,".contains(String.format(",%s,", suffixName))) {
|
||||
mediaType = MediaType.image;
|
||||
} else if (",mp3,wma,wav,amr,".contains(String.format(",%s,",
|
||||
suffixName))) {
|
||||
} else if (",mp3,wma,wav,amr,".contains(String.format(",%s,", suffixName))) {
|
||||
mediaType = MediaType.voice;
|
||||
} else if (",rm,rmvb,wmv,avi,mpg,mpeg,mp4,".contains(String.format(
|
||||
",%s,", suffixName))) {
|
||||
} else if (",rm,rmvb,wmv,avi,mpg,mpeg,mp4,".contains(String.format(",%s,", suffixName))) {
|
||||
mediaType = MediaType.video;
|
||||
} else {
|
||||
throw new WeixinException("cannot handle mediaType:" + suffixName);
|
||||
}
|
||||
if (mediaType == MediaType.video && isMaterial) {
|
||||
throw new WeixinException(
|
||||
"please invoke uploadMaterialVideo method");
|
||||
throw new WeixinException("please invoke uploadMaterialVideo method");
|
||||
}
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = null;
|
||||
try {
|
||||
if (isMaterial) {
|
||||
String material_media_upload_uri = getRequestUri("material_media_upload_uri");
|
||||
response = weixinExecutor
|
||||
.post(String.format(material_media_upload_uri,
|
||||
token.getAccessToken()), new FormBodyPart(
|
||||
"media", new ByteArrayBody(content, mediaType
|
||||
.getContentType().getMimeType(),
|
||||
fileName)), new FormBodyPart("type",
|
||||
new StringBody(mediaType.name(), Consts.UTF_8)));
|
||||
response = weixinExecutor.post(String.format(material_media_upload_uri, token.getAccessToken()),
|
||||
new FormBodyPart("media",
|
||||
new ByteArrayBody(content, mediaType.getMimeType().toString(), fileName)),
|
||||
new FormBodyPart("type", new StringBody(mediaType.name(), Consts.UTF_8)));
|
||||
JSONObject obj = response.getAsJson();
|
||||
return new MediaUploadResult(obj.getString("media_id"),
|
||||
mediaType, new Date(), obj.getString("url"));
|
||||
return new MediaUploadResult(obj.getString("media_id"), mediaType, new Date(), obj.getString("url"));
|
||||
} else {
|
||||
String media_upload_uri = getRequestUri("media_upload_uri");
|
||||
response = weixinExecutor.post(String.format(media_upload_uri,
|
||||
token.getAccessToken(), mediaType.name()),
|
||||
new FormBodyPart("media", new InputStreamBody(
|
||||
new ByteArrayInputStream(content), mediaType
|
||||
.getContentType().getMimeType(),
|
||||
fileName)));
|
||||
response = weixinExecutor.post(
|
||||
String.format(media_upload_uri, token.getAccessToken(), mediaType.name()),
|
||||
new FormBodyPart("media", new InputStreamBody(new ByteArrayInputStream(content),
|
||||
mediaType.getMimeType().toString(), fileName)));
|
||||
JSONObject obj = response.getAsJson();
|
||||
return new MediaUploadResult(obj.getString("media_id"),
|
||||
obj.getObject("type", MediaType.class), new Date(
|
||||
obj.getLong("created_at") * 1000l),
|
||||
obj.getString("url"));
|
||||
return new MediaUploadResult(obj.getString("media_id"), obj.getObject("type", MediaType.class),
|
||||
new Date(obj.getLong("created_at") * 1000l), obj.getString("url"));
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new WeixinException(e);
|
||||
@ -230,60 +215,45 @@ public class MediaApi extends MpApi {
|
||||
*
|
||||
* @throws WeixinException
|
||||
* @see com.foxinmy.weixin4j.model.MediaDownloadResult
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738727&token=&lang=zh_CN">下载临时媒体素材</a>
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738730&token=&lang=zh_CN">下载永久媒体素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738727&token=&lang=zh_CN">下载临时媒体素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738730&token=&lang=zh_CN">下载永久媒体素材</a>
|
||||
*/
|
||||
public MediaDownloadResult downloadMedia(String mediaId, boolean isMaterial)
|
||||
throws WeixinException {
|
||||
public MediaDownloadResult downloadMedia(String mediaId, boolean isMaterial) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
try {
|
||||
HttpRequest request = null;
|
||||
if (isMaterial) {
|
||||
String material_media_download_uri = getRequestUri("material_media_download_uri");
|
||||
request = new HttpRequest(HttpMethod.POST, String.format(
|
||||
material_media_download_uri, token.getAccessToken()));
|
||||
request.setEntity(new StringEntity(String.format(
|
||||
"{\"media_id\":\"%s\"}", mediaId)));
|
||||
request = new HttpRequest(HttpMethod.POST,
|
||||
String.format(material_media_download_uri, token.getAccessToken()));
|
||||
request.setEntity(new StringEntity(String.format("{\"media_id\":\"%s\"}", mediaId)));
|
||||
} else {
|
||||
String meida_download_uri = getRequestUri("meida_download_uri");
|
||||
request = new HttpRequest(HttpMethod.GET, String.format(
|
||||
meida_download_uri, token.getAccessToken(), mediaId));
|
||||
request = new HttpRequest(HttpMethod.GET,
|
||||
String.format(meida_download_uri, token.getAccessToken(), mediaId));
|
||||
}
|
||||
request.setParams(weixinExecutor.getExecuteParams());
|
||||
logger.info("weixin request >> " + request.getMethod() + " "
|
||||
+ request.getURI().toString());
|
||||
HttpResponse response = weixinExecutor.getExecuteClient().execute(
|
||||
request);
|
||||
logger.info("weixin request >> " + request.getMethod() + " " + request.getURI().toString());
|
||||
HttpResponse response = weixinExecutor.getExecuteClient().execute(request);
|
||||
byte[] content = IOUtil.toByteArray(response.getBody());
|
||||
HttpHeaders headers = response.getHeaders();
|
||||
String contentType = headers.getFirst(HttpHeaders.CONTENT_TYPE);
|
||||
String disposition = headers
|
||||
.getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||
logger.info("weixin response << " + response.getProtocol()
|
||||
+ response.getStatus().toString() + "[" + contentType
|
||||
+ "]->" + disposition);
|
||||
if (contentType.contains(ContentType.TEXT_PLAIN.getMimeType())
|
||||
|| contentType.contains(ContentType.APPLICATION_JSON
|
||||
.getMimeType())
|
||||
|| (disposition != null && disposition.indexOf(".json") > 0)) {
|
||||
JsonResult jsonResult = JSON.parseObject(content, 0,
|
||||
content.length, Consts.UTF_8.newDecoder(),
|
||||
JsonResult.class);
|
||||
if (jsonResult.getCode() != 0) {
|
||||
throw new WeixinException(Integer.toString(jsonResult
|
||||
.getCode()), jsonResult.getDesc());
|
||||
String disposition = headers.getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||
logger.info("weixin response << " + response.getProtocol() + response.getStatus().toString() + "["
|
||||
+ contentType + "]->" + disposition);
|
||||
if (JsonMessageConverter.GLOBAL.canConvert(ApiResult.class, response)) {
|
||||
ApiResult result = JsonMessageConverter.GLOBAL.convert(ApiResult.class, response);
|
||||
if (!"0".equals(result.getReturnCode())) {
|
||||
throw new WeixinException(result.getReturnCode(), result.getReturnMsg());
|
||||
}
|
||||
}
|
||||
String fileName = RegexUtil
|
||||
.regexFileNameFromContentDispositionHeader(disposition);
|
||||
String fileName = RegexUtil.regexFileNameFromContentDispositionHeader(disposition);
|
||||
if (StringUtil.isBlank(fileName)) {
|
||||
fileName = String.format("%s.%s", mediaId,
|
||||
contentType.split("/")[1]);
|
||||
fileName = String.format("%s.%s", mediaId, contentType.split("/")[1]);
|
||||
}
|
||||
return new MediaDownloadResult(content,
|
||||
ContentType.create(contentType), fileName);
|
||||
return new MediaDownloadResult(content, ContentType.create(contentType), fileName);
|
||||
} catch (IOException e) {
|
||||
throw new WeixinException("I/O Error on getBody", e);
|
||||
} catch (HttpClientException e) {
|
||||
@ -302,19 +272,17 @@ public class MediaApi extends MpApi {
|
||||
* 图文列表
|
||||
* @return 上传到微信服务器返回的媒体标识
|
||||
* @throws WeixinException
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729&token=&lang=zh_CN">上传永久媒体素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729&token=&lang=zh_CN">上传永久媒体素材</a>
|
||||
* @see com.foxinmy.weixin4j.tuple.MpArticle
|
||||
*/
|
||||
public String uploadMaterialArticle(List<MpArticle> articles)
|
||||
throws WeixinException {
|
||||
public String uploadMaterialArticle(List<MpArticle> articles) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_article_upload_uri = getRequestUri("material_article_upload_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("articles", articles);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_article_upload_uri,
|
||||
token.getAccessToken()), obj.toJSONString());
|
||||
WeixinResponse response = weixinExecutor
|
||||
.post(String.format(material_article_upload_uri, token.getAccessToken()), obj.toJSONString());
|
||||
|
||||
return response.getAsJson().getString("media_id");
|
||||
}
|
||||
@ -329,12 +297,10 @@ public class MediaApi extends MpApi {
|
||||
* @see {@link #downloadMedia(String, boolean)}
|
||||
* @see com.foxinmy.weixin4j.tuple.MpArticle
|
||||
*/
|
||||
public List<MpArticle> downloadArticle(String mediaId)
|
||||
throws WeixinException {
|
||||
public List<MpArticle> downloadArticle(String mediaId) throws WeixinException {
|
||||
MediaDownloadResult result = downloadMedia(mediaId, true);
|
||||
byte[] content = result.getContent();
|
||||
JSONObject obj = JSON.parseObject(content, 0, content.length,
|
||||
Consts.UTF_8.newDecoder(), JSONObject.class);
|
||||
JSONObject obj = JSON.parseObject(content, 0, content.length, Consts.UTF_8.newDecoder(), JSONObject.class);
|
||||
return JSON.parseArray(obj.getString("news_item"), MpArticle.class);
|
||||
}
|
||||
|
||||
@ -350,22 +316,20 @@ public class MediaApi extends MpApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
* @see com.foxinmy.weixin4j.tuple.MpArticle
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738732&token=&lang=zh_CN">更新永久图文素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738732&token=&lang=zh_CN">更新永久图文素材</a>
|
||||
*/
|
||||
public JsonResult updateMaterialArticle(String mediaId, int index,
|
||||
MpArticle article) throws WeixinException {
|
||||
public ApiResult updateMaterialArticle(String mediaId, int index, MpArticle article) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_article_update_uri = getRequestUri("material_article_update_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("articles", article);
|
||||
obj.put("media_id", mediaId);
|
||||
obj.put("index", index);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_article_update_uri,
|
||||
token.getAccessToken()), obj.toJSONString());
|
||||
WeixinResponse response = weixinExecutor
|
||||
.post(String.format(material_article_update_uri, token.getAccessToken()), obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -375,20 +339,18 @@ public class MediaApi extends MpApi {
|
||||
* 媒体素材的media_id
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738731&token=&lang=zh_CN">删除永久媒体素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738731&token=&lang=zh_CN">删除永久媒体素材</a>
|
||||
*/
|
||||
public JsonResult deleteMaterialMedia(String mediaId)
|
||||
throws WeixinException {
|
||||
public ApiResult deleteMaterialMedia(String mediaId) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_media_del_uri = getRequestUri("material_media_del_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("media_id", mediaId);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_media_del_uri, token.getAccessToken()),
|
||||
WeixinResponse response = weixinExecutor.post(String.format(material_media_del_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -403,12 +365,12 @@ public class MediaApi extends MpApi {
|
||||
* @param introduction
|
||||
* 视频描述
|
||||
* @return 上传到微信服务器返回的媒体标识
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729&token=&lang=zh_CN">上传永久媒体素材</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738729&token=&lang=zh_CN">上传永久媒体素材</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public String uploadMaterialVideo(InputStream is, String fileName,
|
||||
String title, String introduction) throws WeixinException {
|
||||
public String uploadMaterialVideo(InputStream is, String fileName, String title, String introduction)
|
||||
throws WeixinException {
|
||||
if (StringUtil.isBlank(fileName)) {
|
||||
fileName = ObjectId.get().toHexString();
|
||||
}
|
||||
@ -416,18 +378,16 @@ public class MediaApi extends MpApi {
|
||||
fileName = String.format("%s.mp4", fileName);
|
||||
}
|
||||
String material_media_upload_uri = getRequestUri("material_media_upload_uri");
|
||||
MimeType mimeType = new MimeType("video", FileUtil.getFileExtension(fileName));
|
||||
Token token = tokenManager.getCache();
|
||||
try {
|
||||
JSONObject description = new JSONObject();
|
||||
description.put("title", title);
|
||||
description.put("introduction", introduction);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_media_upload_uri,
|
||||
token.getAccessToken()),
|
||||
new FormBodyPart("media", new InputStreamBody(is,
|
||||
ContentType.VIDEO_MPEG4.getMimeType(), fileName)),
|
||||
new FormBodyPart("description", new StringBody(description
|
||||
.toJSONString(), Consts.UTF_8)));
|
||||
String.format(material_media_upload_uri, token.getAccessToken()),
|
||||
new FormBodyPart("media", new InputStreamBody(is, mimeType.toString(), fileName)),
|
||||
new FormBodyPart("description", new StringBody(description.toJSONString(), Consts.UTF_8)));
|
||||
return response.getAsJson().getString("media_id");
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new WeixinException(e);
|
||||
@ -443,19 +403,19 @@ public class MediaApi extends MpApi {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取永久媒体素材的总数</br> .图片和图文消息素材(包括单图文和多图文)的总数上限为5000,其他素材的总数上限为1000
|
||||
* 获取永久媒体素材的总数</br>
|
||||
* .图片和图文消息素材(包括单图文和多图文)的总数上限为5000,其他素材的总数上限为1000
|
||||
*
|
||||
* @return 总数对象
|
||||
* @throws WeixinException
|
||||
* @see com.foxinmy.weixin4j.model.MediaCounter
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738733&token=&lang=zh_CN">获取素材总数</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738733&token=&lang=zh_CN">获取素材总数</a>
|
||||
*/
|
||||
public MediaCounter countMaterialMedia() throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_media_count_uri = getRequestUri("material_media_count_uri");
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
material_media_count_uri, token.getAccessToken()));
|
||||
WeixinResponse response = weixinExecutor.get(String.format(material_media_count_uri, token.getAccessToken()));
|
||||
|
||||
return response.getAsObject(new TypeReference<MediaCounter>() {
|
||||
});
|
||||
@ -475,35 +435,29 @@ public class MediaApi extends MpApi {
|
||||
* @see com.foxinmy.weixin4j.model.MediaItem
|
||||
* @see com.foxinmy.weixin4j.model.Pageable
|
||||
* @see com.foxinmy.weixin4j.model.Pagedata
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738734&token=&lang=zh_CN">获取素材列表</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1444738734&token=&lang=zh_CN">获取素材列表</a>
|
||||
*/
|
||||
public MediaRecord listMaterialMedia(MediaType mediaType, Pageable pageable)
|
||||
throws WeixinException {
|
||||
public MediaRecord listMaterialMedia(MediaType mediaType, Pageable pageable) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_media_list_uri = getRequestUri("material_media_list_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("type", mediaType.name());
|
||||
obj.put("offset", pageable.getOffset());
|
||||
obj.put("count", pageable.getPageSize());
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_media_list_uri, token.getAccessToken()),
|
||||
WeixinResponse response = weixinExecutor.post(String.format(material_media_list_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
MediaRecord mediaRecord = null;
|
||||
if (mediaType == MediaType.news) {
|
||||
mediaRecord = JSON.parseObject(response.getAsString(),
|
||||
MediaRecord.class, new ExtraProcessor() {
|
||||
@Override
|
||||
public void processExtra(Object object, String key,
|
||||
Object value) {
|
||||
if (key.equals("content")) {
|
||||
((MediaItem) object).setArticles(JSON
|
||||
.parseArray(((JSONObject) value)
|
||||
.getString("news_item"),
|
||||
MpArticle.class));
|
||||
}
|
||||
}
|
||||
});
|
||||
mediaRecord = JSON.parseObject(response.getAsString(), MediaRecord.class, new ExtraProcessor() {
|
||||
@Override
|
||||
public void processExtra(Object object, String key, Object value) {
|
||||
if (key.equals("content")) {
|
||||
((MediaItem) object).setArticles(
|
||||
JSON.parseArray(((JSONObject) value).getString("news_item"), MpArticle.class));
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
obj = response.getAsJson();
|
||||
obj.put("items", obj.remove("itemlist"));
|
||||
@ -523,15 +477,13 @@ public class MediaApi extends MpApi {
|
||||
* @see {@link #listMaterialMedia(MediaType, Pageable)}
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public List<MediaItem> listAllMaterialMedia(MediaType mediaType)
|
||||
throws WeixinException {
|
||||
public List<MediaItem> listAllMaterialMedia(MediaType mediaType) throws WeixinException {
|
||||
Pageable pageable = new Pageable(1, 20);
|
||||
List<MediaItem> mediaList = new ArrayList<MediaItem>();
|
||||
MediaRecord mediaRecord = null;
|
||||
for (;;) {
|
||||
mediaRecord = listMaterialMedia(mediaType, pageable);
|
||||
if (mediaRecord.getItems() == null
|
||||
|| mediaRecord.getItems().isEmpty()) {
|
||||
if (mediaRecord.getItems() == null || mediaRecord.getItems().isEmpty()) {
|
||||
break;
|
||||
}
|
||||
mediaList.addAll(mediaRecord.getItems());
|
||||
|
||||
@ -11,7 +11,7 @@ import com.alibaba.fastjson.parser.deserializer.ExtraProcessor;
|
||||
import com.alibaba.fastjson.parser.deserializer.ParseProcess;
|
||||
import com.alibaba.fastjson.serializer.NameFilter;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Button;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
@ -48,11 +48,11 @@ public class MenuApi extends MpApi {
|
||||
* @see com.foxinmy.weixin4j.model.Button
|
||||
* @return 处理结果
|
||||
*/
|
||||
public JsonResult createMenu(List<Button> buttons) throws WeixinException {
|
||||
public ApiResult createMenu(List<Button> buttons) throws WeixinException {
|
||||
String menu_create_uri = getRequestUri("menu_create_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("button", buttons);
|
||||
return createMenu0(menu_create_uri, obj).getAsJsonResult();
|
||||
return createMenu0(menu_create_uri, obj).getAsResult();
|
||||
}
|
||||
|
||||
private WeixinResponse createMenu0(String url, JSONObject data)
|
||||
@ -148,13 +148,13 @@ public class MenuApi extends MpApi {
|
||||
* 删除菜单</a>
|
||||
* @return 处理结果
|
||||
*/
|
||||
public JsonResult deleteMenu() throws WeixinException {
|
||||
public ApiResult deleteMenu() throws WeixinException {
|
||||
String menu_delete_uri = getRequestUri("menu_delete_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
menu_delete_uri, token.getAccessToken()));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -190,7 +190,7 @@ public class MenuApi extends MpApi {
|
||||
* 删除个性化菜单</a>
|
||||
* @return 处理结果
|
||||
*/
|
||||
public JsonResult deleteCustomMenu(String menuId) throws WeixinException {
|
||||
public ApiResult deleteCustomMenu(String menuId) throws WeixinException {
|
||||
String menu_delete_uri = getRequestUri("menu_delete_custom_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -199,7 +199,7 @@ public class MenuApi extends MpApi {
|
||||
String.format(menu_delete_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -4,7 +4,7 @@ import java.util.List;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.mp.message.NotifyMessage;
|
||||
@ -41,7 +41,7 @@ public class NotifyApi extends MpApi {
|
||||
* @see {@link #sendNotify(NotifyMessage, String)}
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult sendNotify(NotifyMessage notify) throws WeixinException {
|
||||
public ApiResult sendNotify(NotifyMessage notify) throws WeixinException {
|
||||
return sendNotify(notify, null);
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ public class NotifyApi extends MpApi {
|
||||
* @see com.foxinmy.weixin4j.tuple.News
|
||||
* @see com.foxinmy.weixin4j.mp.message.NotifyMessage
|
||||
*/
|
||||
public JsonResult sendNotify(NotifyMessage notify, String kfAccount)
|
||||
public ApiResult sendNotify(NotifyMessage notify, String kfAccount)
|
||||
throws WeixinException {
|
||||
NotifyTuple tuple = notify.getTuple();
|
||||
if (tuple instanceof MpNews) {
|
||||
@ -94,6 +94,6 @@ public class NotifyApi extends MpApi {
|
||||
String.format(custom_notify_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -26,7 +26,7 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.alibaba.fastjson.parser.Feature;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinRequestExecutor;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinSSLRequestExecutor;
|
||||
@ -531,7 +531,7 @@ public class PayOldApi extends MpApi {
|
||||
* @return 发货处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deliverNotify(String openId, String transid,
|
||||
public ApiResult deliverNotify(String openId, String transid,
|
||||
String outTradeNo, boolean status, String statusMsg)
|
||||
throws WeixinException {
|
||||
String delivernotify_uri = getRequestUri("delivernotify_old_uri");
|
||||
@ -552,7 +552,7 @@ public class PayOldApi extends MpApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(delivernotify_uri, token.getAccessToken()),
|
||||
JSON.toJSONString(map));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -565,12 +565,12 @@ public class PayOldApi extends MpApi {
|
||||
* @return 维权处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateFeedback(String openId, String feedbackId)
|
||||
public ApiResult updateFeedback(String openId, String feedbackId)
|
||||
throws WeixinException {
|
||||
String payfeedback_uri = getRequestUri("payfeedback_old_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
payfeedback_uri, token.getAccessToken(), openId, feedbackId));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,13 +6,12 @@ import java.util.List;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.mp.model.Following;
|
||||
import com.foxinmy.weixin4j.mp.model.Tag;
|
||||
import com.foxinmy.weixin4j.mp.model.User;
|
||||
import com.foxinmy.weixin4j.token.TokenManager;
|
||||
import com.foxinmy.weixin4j.util.StringUtil;
|
||||
|
||||
/**
|
||||
* 标签相关API
|
||||
@ -82,14 +81,14 @@ public class TagApi extends MpApi {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">更新标签</a>
|
||||
*/
|
||||
public JsonResult updateTag(Tag tag) throws WeixinException {
|
||||
public ApiResult updateTag(Tag tag) throws WeixinException {
|
||||
String tag_update_uri = getRequestUri("tag_update_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("tag", tag);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(tag_update_uri, tokenManager.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -102,12 +101,12 @@ public class TagApi extends MpApi {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">删除标签</a>
|
||||
*/
|
||||
public JsonResult deleteTag(int tagId) throws WeixinException {
|
||||
public ApiResult deleteTag(int tagId) throws WeixinException {
|
||||
String tag_delete_uri = getRequestUri("tag_delete_uri");
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(tag_delete_uri, tokenManager.getAccessToken()),
|
||||
String.format("{\"tagid\":%d}", tagId));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -122,12 +121,12 @@ public class TagApi extends MpApi {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">批量为用户打标签</a>
|
||||
*/
|
||||
public JsonResult taggingUsers(int tagId, String... openIds)
|
||||
public ApiResult taggingUsers(int tagId, String... openIds)
|
||||
throws WeixinException {
|
||||
return batchUsers("tag_tagging_uri", tagId, openIds);
|
||||
}
|
||||
|
||||
private JsonResult batchUsers(String batchType, int tagId,
|
||||
private ApiResult batchUsers(String batchType, int tagId,
|
||||
String... openIds) throws WeixinException {
|
||||
String tag_batch_uri = getRequestUri(batchType);
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -136,7 +135,7 @@ public class TagApi extends MpApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(tag_batch_uri, tokenManager.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -151,7 +150,7 @@ public class TagApi extends MpApi {
|
||||
* @see <a
|
||||
* href="http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140837&token=&lang=zh_CN">批量为用户取消标签</a>
|
||||
*/
|
||||
public JsonResult untaggingUsers(int tagId, String... openIds)
|
||||
public ApiResult untaggingUsers(int tagId, String... openIds)
|
||||
throws WeixinException {
|
||||
return batchUsers("tag_untagging_uri", tagId, openIds);
|
||||
}
|
||||
@ -235,11 +234,12 @@ public class TagApi extends MpApi {
|
||||
Following f = null;
|
||||
for (;;) {
|
||||
f = getTagFollowingOpenIds(tagId, nextOpenId);
|
||||
if (f.getCount() == 0 || StringUtil.isBlank(f.getNextOpenId())) {
|
||||
break;
|
||||
if (f.hasContent()) {
|
||||
openIds.addAll(f.getOpenIds());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
continue;
|
||||
}
|
||||
openIds.addAll(f.getOpenIds());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
break;
|
||||
}
|
||||
return openIds;
|
||||
}
|
||||
@ -261,11 +261,12 @@ public class TagApi extends MpApi {
|
||||
Following f = null;
|
||||
for (;;) {
|
||||
f = getTagFollowing(tagId, nextOpenId);
|
||||
if (f.getCount() == 0 || StringUtil.isBlank(f.getNextOpenId())) {
|
||||
break;
|
||||
if (f.hasContent()) {
|
||||
userList.addAll(f.getUserList());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
continue;
|
||||
}
|
||||
userList.addAll(f.getUserList());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
break;
|
||||
}
|
||||
return userList;
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.serializer.NameFilter;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.mp.message.TemplateMessage;
|
||||
@ -43,7 +43,7 @@ public class TmplApi extends MpApi {
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN">设置所处行业</a>
|
||||
*/
|
||||
public JsonResult setTmplIndustry(IndustryType... industryTypes)
|
||||
public ApiResult setTmplIndustry(IndustryType... industryTypes)
|
||||
throws WeixinException {
|
||||
JSONObject obj = new JSONObject();
|
||||
for (int i = 0; i < industryTypes.length; i++) {
|
||||
@ -56,7 +56,7 @@ public class TmplApi extends MpApi {
|
||||
template_set_industry_uri, token.getAccessToken()), obj
|
||||
.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -133,13 +133,13 @@ public class TmplApi extends MpApi {
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277&token=&lang=zh_CN">删除模板</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteTemplate(String templateId) throws WeixinException {
|
||||
public ApiResult deleteTemplate(String templateId) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String template_del_uri = getRequestUri("template_del_uri");
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(template_del_uri, token.getAccessToken()),
|
||||
String.format("{\"template_id\"=\"%s\"}", templateId));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -157,7 +157,7 @@ public class TmplApi extends MpApi {
|
||||
* @see com.foxinmy.weixin4j.mp.message.TemplateMessage
|
||||
* @see com.foxinmy.weixin4j.msg.event.TemplatesendjobfinishMessage
|
||||
*/
|
||||
public JsonResult sendTmplMessage(TemplateMessage tplMessage)
|
||||
public ApiResult sendTmplMessage(TemplateMessage tplMessage)
|
||||
throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String template_send_uri = getRequestUri("template_send_uri");
|
||||
@ -174,6 +174,6 @@ public class TmplApi extends MpApi {
|
||||
}
|
||||
}));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,14 +7,13 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.mp.model.Following;
|
||||
import com.foxinmy.weixin4j.mp.model.User;
|
||||
import com.foxinmy.weixin4j.mp.type.Lang;
|
||||
import com.foxinmy.weixin4j.token.TokenManager;
|
||||
import com.foxinmy.weixin4j.util.StringUtil;
|
||||
|
||||
/**
|
||||
* 用户相关API
|
||||
@ -68,8 +67,8 @@ public class UserApi extends MpApi {
|
||||
public User getUser(String openId, Lang lang) throws WeixinException {
|
||||
String user_info_uri = getRequestUri("api_user_info_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
user_info_uri, token.getAccessToken(), openId, lang.name()));
|
||||
WeixinResponse response = weixinExecutor
|
||||
.get(String.format(user_info_uri, token.getAccessToken(), openId, lang.name()));
|
||||
|
||||
return response.getAsObject(new TypeReference<User>() {
|
||||
});
|
||||
@ -107,25 +106,21 @@ public class UserApi extends MpApi {
|
||||
* @see com.foxinmy.weixin4j.mp.model.User
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public List<User> getUsers(Lang lang, String... openIds)
|
||||
throws WeixinException {
|
||||
public List<User> getUsers(Lang lang, String... openIds) throws WeixinException {
|
||||
String api_users_info_uri = getRequestUri("api_users_info_uri");
|
||||
StringBuilder parameter = new StringBuilder();
|
||||
parameter.append("{\"user_list\": [");
|
||||
for (String openId : openIds) {
|
||||
parameter.append("{\"openid\": \"").append(openId).append("\"");
|
||||
parameter.append(",\"lang\": \"").append(lang.name()).append("\"")
|
||||
.append("},");
|
||||
parameter.append(",\"lang\": \"").append(lang.name()).append("\"").append("},");
|
||||
}
|
||||
parameter.delete(parameter.length() - 1, parameter.length());
|
||||
parameter.append("]}");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(api_users_info_uri, token.getAccessToken()),
|
||||
WeixinResponse response = weixinExecutor.post(String.format(api_users_info_uri, token.getAccessToken()),
|
||||
parameter.toString());
|
||||
|
||||
return JSON.parseArray(
|
||||
response.getAsJson().getString("user_info_list"), User.class);
|
||||
return JSON.parseArray(response.getAsJson().getString("user_info_list"), User.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -149,11 +144,8 @@ public class UserApi extends MpApi {
|
||||
if (following.getCount() > 0) {
|
||||
List<User> users = new ArrayList<User>(following.getCount());
|
||||
for (int i = 1; i <= (int) Math.ceil(following.getCount() / 100d); i++) {
|
||||
users.addAll(getUsers(following
|
||||
.getOpenIds()
|
||||
.subList((i - 1) * 100,
|
||||
Math.min(i * 100, following.getCount()))
|
||||
.toArray(new String[] {})));
|
||||
users.addAll(getUsers(following.getOpenIds()
|
||||
.subList((i - 1) * 100, Math.min(i * 100, following.getCount())).toArray(new String[] {})));
|
||||
}
|
||||
following.setUserList(users);
|
||||
}
|
||||
@ -172,20 +164,17 @@ public class UserApi extends MpApi {
|
||||
* 获取关注者列表</a>
|
||||
* @see com.foxinmy.weixin4j.mp.model.Following
|
||||
*/
|
||||
public Following getFollowingOpenIds(String nextOpenId)
|
||||
throws WeixinException {
|
||||
public Following getFollowingOpenIds(String nextOpenId) throws WeixinException {
|
||||
String following_uri = getRequestUri("following_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
following_uri, token.getAccessToken(), nextOpenId == null ? ""
|
||||
: nextOpenId));
|
||||
WeixinResponse response = weixinExecutor
|
||||
.get(String.format(following_uri, token.getAccessToken(), nextOpenId == null ? "" : nextOpenId));
|
||||
|
||||
JSONObject result = response.getAsJson();
|
||||
Following following = JSON.toJavaObject(result, Following.class);
|
||||
|
||||
if (following.getCount() > 0) {
|
||||
following.setOpenIds(JSON.parseArray(result.getJSONObject("data")
|
||||
.getString("openid"), String.class));
|
||||
following.setOpenIds(JSON.parseArray(result.getJSONObject("data").getString("openid"), String.class));
|
||||
}
|
||||
return following;
|
||||
}
|
||||
@ -215,12 +204,12 @@ public class UserApi extends MpApi {
|
||||
Following f = null;
|
||||
for (;;) {
|
||||
f = getFollowing(nextOpenId);
|
||||
if (f.getCount() == f.getTotal() || f.getCount() == 0
|
||||
|| StringUtil.isBlank(f.getNextOpenId())) {
|
||||
break;
|
||||
if (f.hasContent()) {
|
||||
userList.addAll(f.getUserList());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
continue;
|
||||
}
|
||||
userList.addAll(f.getUserList());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
break;
|
||||
}
|
||||
return userList;
|
||||
}
|
||||
@ -245,12 +234,12 @@ public class UserApi extends MpApi {
|
||||
Following f = null;
|
||||
for (;;) {
|
||||
f = getFollowingOpenIds(nextOpenId);
|
||||
if (f.getCount() == f.getTotal() || f.getCount() == 0
|
||||
|| StringUtil.isBlank(f.getNextOpenId())) {
|
||||
break;
|
||||
if (f.hasContent()) {
|
||||
openIds.addAll(f.getOpenIds());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
continue;
|
||||
}
|
||||
openIds.addAll(f.getOpenIds());
|
||||
nextOpenId = f.getNextOpenId();
|
||||
break;
|
||||
}
|
||||
return openIds;
|
||||
}
|
||||
@ -267,17 +256,15 @@ public class UserApi extends MpApi {
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140838&token=&lang=zh_CN">
|
||||
* 设置用户备注名</a>
|
||||
*/
|
||||
public JsonResult remarkUserName(String openId, String remark)
|
||||
throws WeixinException {
|
||||
public ApiResult remarkUserName(String openId, String remark) throws WeixinException {
|
||||
String username_remark_uri = getRequestUri("username_remark_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("openid", openId);
|
||||
obj.put("remark", remark);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(username_remark_uri, token.getAccessToken()),
|
||||
WeixinResponse response = weixinExecutor.post(String.format(username_remark_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,6 +82,10 @@ public class Following implements Serializable {
|
||||
this.nextOpenId = nextOpenId;
|
||||
}
|
||||
|
||||
public boolean hasContent() {
|
||||
return userList != null && !userList.isEmpty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Following [total=" + total + ", count=" + count + ", openIds=" + openIds + ", nextOpenId=" + nextOpenId
|
||||
|
||||
@ -2,7 +2,7 @@ package com.foxinmy.weixin4j.mp.model;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
|
||||
/**
|
||||
* 语义理解结果
|
||||
@ -11,10 +11,10 @@ import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
* @author jinyu(foxinmy@gmail.com)
|
||||
* @date 2014年11月7日
|
||||
* @since JDK 1.6
|
||||
* @see <a
|
||||
* href="https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141241&token=&lang=zh_CN">语义理解</a>
|
||||
* @see <a href=
|
||||
* "https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141241&token=&lang=zh_CN">语义理解</a>
|
||||
*/
|
||||
public class SemResult extends JsonResult {
|
||||
public class SemResult extends ApiResult {
|
||||
|
||||
private static final long serialVersionUID = 9051214458161068387L;
|
||||
/**
|
||||
@ -92,8 +92,7 @@ public class SemResult extends JsonResult {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SemResult [query=" + query + ", type=" + type + ", semantic="
|
||||
+ semantic + ", result=" + result + ", answer=" + answer + ", "
|
||||
+ super.toString() + "]";
|
||||
return "SemResult [" + super.toString() + ", query=" + query + ", type=" + type + ", semantic=" + semantic
|
||||
+ ", result=" + result + ", answer=" + answer + ", " + super.toString() + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.Pageable;
|
||||
import com.foxinmy.weixin4j.mp.api.CustomApi;
|
||||
import com.foxinmy.weixin4j.mp.model.KfAccount;
|
||||
@ -61,44 +61,44 @@ public class CustomTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void createKfAccount() throws WeixinException {
|
||||
JsonResult result = customApi.createKfAccount("test@test", "test",
|
||||
ApiResult result = customApi.createKfAccount("test@test", "test",
|
||||
"123456");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateKfAccount() throws WeixinException {
|
||||
JsonResult result = customApi.updateKfAccount("temp1@canyidianzhang",
|
||||
ApiResult result = customApi.updateKfAccount("temp1@canyidianzhang",
|
||||
"temp", "123456");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void uploadKfAvatar() throws WeixinException, IOException {
|
||||
JsonResult result = customApi.uploadKfAvatar("temp1@canyidianzhang",
|
||||
ApiResult result = customApi.uploadKfAvatar("temp1@canyidianzhang",
|
||||
new FileInputStream(new File("/Users/jy/Music/简谱/风动草.jpg")),
|
||||
"风动草.jpg");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void deleteKfAccount() throws WeixinException, IOException {
|
||||
JsonResult result = customApi.deleteKfAccount("temp@canyidianzhang");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = customApi.deleteKfAccount("temp@canyidianzhang");
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createSession() throws WeixinException {
|
||||
JsonResult result = customApi.createKfSession(
|
||||
ApiResult result = customApi.createKfSession(
|
||||
"opKwyt6IhrqPmTTZshyqH5W9gIVo", "kfAccount", "text");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void closeSession() throws WeixinException {
|
||||
JsonResult result = customApi.closeKfSession(
|
||||
ApiResult result = customApi.closeKfSession(
|
||||
"opKwyt6IhrqPmTTZshyqH5W9gIVo", "kfAccount", "text");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -7,7 +7,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.mp.api.GroupApi;
|
||||
import com.foxinmy.weixin4j.mp.model.Group;
|
||||
|
||||
@ -48,27 +48,27 @@ public class GroupTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void modify() throws WeixinException {
|
||||
JsonResult result = groupApi.modifyGroup(100, "my1");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = groupApi.modifyGroup(100, "my1");
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void move() throws WeixinException {
|
||||
JsonResult result = groupApi.moveGroup(100,
|
||||
ApiResult result = groupApi.moveGroup(100,
|
||||
"owGBft_vbBbOaQOmpEUE4xDLeRSU");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void batchMove() throws WeixinException {
|
||||
JsonResult result = groupApi.moveGroup(100,
|
||||
ApiResult result = groupApi.moveGroup(100,
|
||||
"owGBft_vbBbOaQOmpEUE4xDLeRSU");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void delete() throws WeixinException {
|
||||
JsonResult result = groupApi.deleteGroup(100);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = groupApi.deleteGroup(100);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
}
|
||||
|
||||
@ -11,7 +11,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.MediaUploadResult;
|
||||
import com.foxinmy.weixin4j.mp.api.MassApi;
|
||||
import com.foxinmy.weixin4j.mp.api.MediaApi;
|
||||
@ -86,15 +86,15 @@ public class MassTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void deleteMass() throws WeixinException {
|
||||
JsonResult result = massApi.deleteMassNews("34182");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = massApi.deleteMassNews("34182");
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void previewMass() throws WeixinException {
|
||||
JsonResult result = massApi.previewMassNews(
|
||||
ApiResult result = massApi.previewMassNews(
|
||||
"oyFLst1bqtuTcxK-ojF8hOGtLQao", null, new Text("test"));
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -12,7 +12,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.MediaCounter;
|
||||
import com.foxinmy.weixin4j.model.MediaDownloadResult;
|
||||
import com.foxinmy.weixin4j.model.MediaItem;
|
||||
@ -56,7 +56,7 @@ public class MediaTest extends TokenTest {
|
||||
public void download1() throws WeixinException, IOException {
|
||||
MediaDownloadResult content = mediaApi
|
||||
.downloadMedia(
|
||||
"fbyQZL96sK9evnTgDx21jPZgWAnw6YPgslNzcqLFp0lqPCD-XipoPfkwFU1OM9J_",
|
||||
"DVWwU0u9ommOTPgyJszpKw5OSL9M-bdRY6gQkax1uuo",
|
||||
false);
|
||||
Assert.assertTrue(content != null);
|
||||
System.err.println(content);
|
||||
@ -64,7 +64,7 @@ public class MediaTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void upload2() throws IOException, WeixinException {
|
||||
File file = new File("/Users/jy/Downloads/weixin4j.png");
|
||||
File file = new File("/root/Pictures/2.jpg");
|
||||
MediaUploadResult mediaId = mediaApi.uploadMedia(true,
|
||||
new FileInputStream(file), file.getName());
|
||||
// 8790403529
|
||||
@ -101,7 +101,7 @@ public class MediaTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void deleteMaterialMedia() throws WeixinException {
|
||||
JsonResult result = mediaApi.deleteMaterialMedia("17385064953");
|
||||
ApiResult result = mediaApi.deleteMaterialMedia("17385064953");
|
||||
System.err.println(result);
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ public class MediaTest extends TokenTest {
|
||||
article.setDigest("digest_update");
|
||||
article.setShowCoverPic(false);
|
||||
article.setSourceUrl("http://www.baidu.com");
|
||||
JsonResult result = mediaApi.updateMaterialArticle("17385064953", 0,
|
||||
ApiResult result = mediaApi.updateMaterialArticle("17385064953", 0,
|
||||
article);
|
||||
System.err.println(result);
|
||||
// 17385065153
|
||||
|
||||
@ -8,7 +8,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.Button;
|
||||
import com.foxinmy.weixin4j.mp.api.MenuApi;
|
||||
import com.foxinmy.weixin4j.mp.model.Menu;
|
||||
@ -54,8 +54,8 @@ public class MenuTest extends TokenTest {
|
||||
button.pushSub(new Button("在线客服", "KF", ButtonType.click));
|
||||
buttons.add(button);
|
||||
|
||||
JsonResult result = menuApi.createMenu(buttons);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = menuApi.createMenu(buttons);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -69,8 +69,8 @@ public class MenuTest extends TokenTest {
|
||||
buttons.add(b2);
|
||||
Button b3 = new Button("最新资讯", "NEWS", ButtonType.click);
|
||||
buttons.add(b3);
|
||||
JsonResult result = menuApi.createMenu(buttons);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = menuApi.createMenu(buttons);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -92,8 +92,8 @@ public class MenuTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void delete() throws WeixinException {
|
||||
JsonResult result = menuApi.deleteMenu();
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = menuApi.deleteMenu();
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -9,7 +9,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.MediaUploadResult;
|
||||
import com.foxinmy.weixin4j.mp.api.MediaApi;
|
||||
import com.foxinmy.weixin4j.mp.api.NotifyApi;
|
||||
@ -87,8 +87,8 @@ public class NotifyTest extends TokenTest {
|
||||
NotifyMessage notify = new NotifyMessage(
|
||||
"owGBft_vbBbOaQOmpEUE4xDLeRSU", new Text(
|
||||
"this is a notify message!"));
|
||||
JsonResult result = notifyApi.sendNotify(notify);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = notifyApi.sendNotify(notify);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -99,7 +99,7 @@ public class NotifyTest extends TokenTest {
|
||||
NotifyMessage imageNotify = new NotifyMessage(
|
||||
"owGBft_vbBbOaQOmpEUE4xDLeRSU", new Image(
|
||||
mediaResult.getMediaId()));
|
||||
JsonResult result = notifyApi.sendNotify(imageNotify);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = notifyApi.sendNotify(imageNotify);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.mp.api.TagApi;
|
||||
import com.foxinmy.weixin4j.mp.model.Tag;
|
||||
import com.foxinmy.weixin4j.mp.model.User;
|
||||
@ -44,19 +44,19 @@ public class TagTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void update() throws WeixinException {
|
||||
JsonResult result = tagApi.updateTag(new Tag(120, "测试12"));
|
||||
ApiResult result = tagApi.updateTag(new Tag(120, "测试12"));
|
||||
System.err.println(result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void remove() throws WeixinException {
|
||||
JsonResult result = tagApi.deleteTag(134);
|
||||
ApiResult result = tagApi.deleteTag(134);
|
||||
System.err.print(result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void batchtagging() throws WeixinException {
|
||||
JsonResult result = tagApi.taggingUsers(120,
|
||||
ApiResult result = tagApi.taggingUsers(120,
|
||||
"owGBft-GyGJuKXBzpkzrfl-RG8TI", "owGBfty5TYNwh-3iUTGtxAHcD310",
|
||||
"owGBftzXEfBml_bYvbrYxE5lE5U8");
|
||||
System.err.println(result);
|
||||
@ -64,7 +64,7 @@ public class TagTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void batchuntagging() throws WeixinException {
|
||||
JsonResult result = tagApi.taggingUsers(120,
|
||||
ApiResult result = tagApi.taggingUsers(120,
|
||||
"owGBftwS5Yr6xKH_Hb9mGv1nbd3o");
|
||||
System.err.println(result);
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.mp.api.TmplApi;
|
||||
import com.foxinmy.weixin4j.mp.message.TemplateMessage;
|
||||
import com.foxinmy.weixin4j.mp.type.IndustryType;
|
||||
@ -39,7 +39,7 @@ public class TemplateTest extends TokenTest {
|
||||
TemplateMessage tplMessage = new TemplateMessage("touser",
|
||||
"template_id", "url");
|
||||
tplMessage.pushHead("head").pushTail("tail").pushItem("key1", "text1");
|
||||
JsonResult result = tmplApi.sendTmplMessage(tplMessage);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = tmplApi.sendTmplMessage(tplMessage);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.mp.api.UserApi;
|
||||
import com.foxinmy.weixin4j.mp.model.User;
|
||||
|
||||
@ -46,8 +46,8 @@ public class UserTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void remark() throws WeixinException {
|
||||
JsonResult result = userApi.remarkUserName(
|
||||
ApiResult result = userApi.remarkUserName(
|
||||
"owGBft_vbBbOaQOmpEUE4xDLeRSU", "foo");
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,7 +4,7 @@ import java.io.InputStream;
|
||||
import java.util.List;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.Button;
|
||||
import com.foxinmy.weixin4j.model.MediaCounter;
|
||||
import com.foxinmy.weixin4j.model.MediaDownloadResult;
|
||||
@ -259,7 +259,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.qy.message.CustomeMessage
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult sendCustomeMessage(CustomeMessage message)
|
||||
public ApiResult sendCustomeMessage(CustomeMessage message)
|
||||
throws WeixinException {
|
||||
return notifyApi.sendCustomeMessage(message);
|
||||
}
|
||||
@ -296,7 +296,7 @@ public class WeixinProxy {
|
||||
* 创建自定义菜单</a>
|
||||
* @see com.foxinmy.weixin4j.model.Button
|
||||
*/
|
||||
public JsonResult createMenu(int agentid, List<Button> buttons)
|
||||
public ApiResult createMenu(int agentid, List<Button> buttons)
|
||||
throws WeixinException {
|
||||
return menuApi.createMenu(agentid, buttons);
|
||||
}
|
||||
@ -330,7 +330,7 @@ public class WeixinProxy {
|
||||
* 删除菜单</a>
|
||||
* @return 处理结果
|
||||
*/
|
||||
public JsonResult deleteMenu(int agentid) throws WeixinException {
|
||||
public ApiResult deleteMenu(int agentid) throws WeixinException {
|
||||
return menuApi.deleteMenu(agentid);
|
||||
}
|
||||
|
||||
@ -444,7 +444,7 @@ public class WeixinProxy {
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E5%88%A0%E9%99%A4%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">
|
||||
* 删除永久媒体素材</a>
|
||||
*/
|
||||
public JsonResult deleteMaterialMedia(int agentid, String mediaId)
|
||||
public ApiResult deleteMaterialMedia(int agentid, String mediaId)
|
||||
throws WeixinException {
|
||||
return mediaApi.deleteMaterialMedia(agentid, mediaId);
|
||||
}
|
||||
@ -579,7 +579,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateParty(Party party) throws WeixinException {
|
||||
public ApiResult updateParty(Party party) throws WeixinException {
|
||||
return partyApi.updateParty(party);
|
||||
}
|
||||
|
||||
@ -612,7 +612,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteParty(int partyId) throws WeixinException {
|
||||
public ApiResult deleteParty(int partyId) throws WeixinException {
|
||||
return partyApi.deleteParty(partyId);
|
||||
}
|
||||
|
||||
@ -648,7 +648,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult createUser(User user) throws WeixinException {
|
||||
public ApiResult createUser(User user) throws WeixinException {
|
||||
return userApi.createUser(user);
|
||||
}
|
||||
|
||||
@ -667,7 +667,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult createUser(User user, InputStream avatar)
|
||||
public ApiResult createUser(User user, InputStream avatar)
|
||||
throws WeixinException {
|
||||
return userApi.createUser(user, avatar);
|
||||
}
|
||||
@ -685,7 +685,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateUser(User user) throws WeixinException {
|
||||
public ApiResult updateUser(User user) throws WeixinException {
|
||||
return userApi.updateUser(user);
|
||||
}
|
||||
|
||||
@ -704,7 +704,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateUser(User user, InputStream avatar)
|
||||
public ApiResult updateUser(User user, InputStream avatar)
|
||||
throws WeixinException {
|
||||
return userApi.updateUser(user, avatar);
|
||||
}
|
||||
@ -815,7 +815,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteUser(String userid) throws WeixinException {
|
||||
public ApiResult deleteUser(String userid) throws WeixinException {
|
||||
return userApi.deleteUser(userid);
|
||||
}
|
||||
|
||||
@ -831,7 +831,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult batchDeleteUser(List<String> userIds)
|
||||
public ApiResult batchDeleteUser(List<String> userIds)
|
||||
throws WeixinException {
|
||||
return userApi.batchDeleteUser(userIds);
|
||||
}
|
||||
@ -885,7 +885,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateTag(Tag tag) throws WeixinException {
|
||||
public ApiResult updateTag(Tag tag) throws WeixinException {
|
||||
return tagApi.updateTag(tag);
|
||||
}
|
||||
|
||||
@ -901,7 +901,7 @@ public class WeixinProxy {
|
||||
* @see com.foxinmy.weixin4j.qy.api.TagApi
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteTag(int tagId) throws WeixinException {
|
||||
public ApiResult deleteTag(int tagId) throws WeixinException {
|
||||
return tagApi.deleteTag(tagId);
|
||||
}
|
||||
|
||||
@ -1026,7 +1026,7 @@ public class WeixinProxy {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult setAgent(AgentSetter agentSet) throws WeixinException {
|
||||
public ApiResult setAgent(AgentSetter agentSet) throws WeixinException {
|
||||
return agentApi.setAgent(agentSet);
|
||||
}
|
||||
|
||||
@ -1270,7 +1270,7 @@ public class WeixinProxy {
|
||||
* 修改会话信息</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateChat(ChatInfo chatInfo, String operator,
|
||||
public ApiResult updateChat(ChatInfo chatInfo, String operator,
|
||||
List<String> addUsers, List<String> deleteUsers)
|
||||
throws WeixinException {
|
||||
return chatApi.updateChat(chatInfo, operator, addUsers, deleteUsers);
|
||||
@ -1290,7 +1290,7 @@ public class WeixinProxy {
|
||||
* 退出会话</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult quitChat(String chatId, String operator)
|
||||
public ApiResult quitChat(String chatId, String operator)
|
||||
throws WeixinException {
|
||||
return chatApi.quitChat(chatId, operator);
|
||||
}
|
||||
@ -1311,7 +1311,7 @@ public class WeixinProxy {
|
||||
* 清除会话未读状态</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult clearChatNotify(String targetId, String owner,
|
||||
public ApiResult clearChatNotify(String targetId, String owner,
|
||||
ChatType chatType) throws WeixinException {
|
||||
return chatApi.clearChatNotify(targetId, owner, chatType);
|
||||
}
|
||||
@ -1348,7 +1348,7 @@ public class WeixinProxy {
|
||||
* 发送消息</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult sendChatMessage(ChatMessage message)
|
||||
public ApiResult sendChatMessage(ChatMessage message)
|
||||
throws WeixinException {
|
||||
return chatApi.sendChatMessage(message);
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.serializer.ValueFilter;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.qy.model.AgentInfo;
|
||||
@ -72,13 +72,13 @@ public class AgentApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult setAgent(AgentSetter agentSet) throws WeixinException {
|
||||
public ApiResult setAgent(AgentSetter agentSet) throws WeixinException {
|
||||
String agent_set_uri = getRequestUri("agent_set_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(agent_set_uri, token.getAccessToken()),
|
||||
JSON.toJSONString(agentSet, typeFilter));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
public final static ValueFilter typeFilter;
|
||||
|
||||
@ -5,7 +5,7 @@ import java.util.List;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.qy.message.ChatMessage;
|
||||
@ -96,7 +96,7 @@ public class ChatApi extends QyApi {
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%BC%81%E4%B8%9A%E5%8F%B7%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E4.BF.AE.E6.94.B9.E4.BC.9A.E8.AF.9D.E4.BF.A1.E6.81.AF">修改会话信息</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateChat(ChatInfo chatInfo, String operator,
|
||||
public ApiResult updateChat(ChatInfo chatInfo, String operator,
|
||||
List<String> addUsers, List<String> deleteUsers)
|
||||
throws WeixinException {
|
||||
JSONObject obj = (JSONObject) JSON.toJSON(chatInfo);
|
||||
@ -109,7 +109,7 @@ public class ChatApi extends QyApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(message_chat_update_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -124,7 +124,7 @@ public class ChatApi extends QyApi {
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%BC%81%E4%B8%9A%E5%8F%B7%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E9.80.80.E5.87.BA.E4.BC.9A.E8.AF.9D">退出会话</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult quitChat(String chatId, String operator)
|
||||
public ApiResult quitChat(String chatId, String operator)
|
||||
throws WeixinException {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("chatid", chatId);
|
||||
@ -134,7 +134,7 @@ public class ChatApi extends QyApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(message_chat_quit_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -151,7 +151,7 @@ public class ChatApi extends QyApi {
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%BC%81%E4%B8%9A%E5%8F%B7%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E6.B8.85.E9.99.A4.E4.BC.9A.E8.AF.9D.E6.9C.AA.E8.AF.BB.E7.8A.B6.E6.80.81">清除会话未读状态</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult clearChatNotify(String targetId, String owner,
|
||||
public ApiResult clearChatNotify(String targetId, String owner,
|
||||
ChatType chatType) throws WeixinException {
|
||||
JSONObject chat = new JSONObject();
|
||||
chat.put("type", chatType.name());
|
||||
@ -163,7 +163,7 @@ public class ChatApi extends QyApi {
|
||||
token.getAccessToken()),
|
||||
String.format("{\"op_user\": \"%s\",\"chat\":%s", owner,
|
||||
chat.toJSONString()));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -203,7 +203,7 @@ public class ChatApi extends QyApi {
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%BC%81%E4%B8%9A%E5%8F%B7%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E5.8F.91.E6.B6.88.E6.81.AF">发送消息</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult sendChatMessage(ChatMessage message)
|
||||
public ApiResult sendChatMessage(ChatMessage message)
|
||||
throws WeixinException {
|
||||
ChatTuple tuple = message.getChatTuple();
|
||||
String msgtype = tuple.getMessageType();
|
||||
@ -220,6 +220,6 @@ public class ChatApi extends QyApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(message_chat_send_uri, token.getAccessToken()),
|
||||
msg.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -22,10 +22,12 @@ import com.foxinmy.weixin4j.http.HttpHeaders;
|
||||
import com.foxinmy.weixin4j.http.HttpMethod;
|
||||
import com.foxinmy.weixin4j.http.HttpRequest;
|
||||
import com.foxinmy.weixin4j.http.HttpResponse;
|
||||
import com.foxinmy.weixin4j.http.MimeType;
|
||||
import com.foxinmy.weixin4j.http.apache.ByteArrayBody;
|
||||
import com.foxinmy.weixin4j.http.apache.FormBodyPart;
|
||||
import com.foxinmy.weixin4j.http.apache.InputStreamBody;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.message.JsonMessageConverter;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Consts;
|
||||
import com.foxinmy.weixin4j.model.MediaCounter;
|
||||
@ -54,8 +56,8 @@ import com.foxinmy.weixin4j.util.StringUtil;
|
||||
* @author jinyu(foxinmy@gmail.com)
|
||||
* @date 2014年9月25日
|
||||
* @since JDK 1.6
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E7%B4%A0%E6%9D%90%E6%96%87%E4%BB%B6">管理素材文件</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E7%B4%A0%E6%9D%90%E6%96%87%E4%BB%B6">管理素材文件</a>
|
||||
* @see com.foxinmy.weixin4j.type.MediaType
|
||||
*/
|
||||
public class MediaApi extends QyApi {
|
||||
@ -74,13 +76,12 @@ public class MediaApi extends QyApi {
|
||||
* 图片数据
|
||||
* @param fileName
|
||||
* 文件名
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E5%9B%BE%E6%96%87%E6%B6%88%E6%81%AF%E5%86%85%E7%9A%84%E5%9B%BE%E7%89%87">上传图文消息内的图片</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E5%9B%BE%E6%96%87%E6%B6%88%E6%81%AF%E5%86%85%E7%9A%84%E5%9B%BE%E7%89%87">上传图文消息内的图片</a>
|
||||
* @return 图片url
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public String uploadImage(InputStream is, String fileName)
|
||||
throws WeixinException {
|
||||
public String uploadImage(InputStream is, String fileName) throws WeixinException {
|
||||
if (StringUtil.isBlank(fileName)) {
|
||||
fileName = ObjectId.get().toHexString();
|
||||
}
|
||||
@ -88,11 +89,10 @@ public class MediaApi extends QyApi {
|
||||
fileName = String.format("%s.jpg", fileName);
|
||||
}
|
||||
String media_uploadimg_uri = getRequestUri("media_uploadimg_uri");
|
||||
MimeType mimeType = new MimeType("image", FileUtil.getFileExtension(fileName));
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(String.format(
|
||||
media_uploadimg_uri, token.getAccessToken()),
|
||||
new FormBodyPart("media", new InputStreamBody(is,
|
||||
ContentType.IMAGE_JPG.getMimeType(), fileName)));
|
||||
WeixinResponse response = weixinExecutor.post(String.format(media_uploadimg_uri, token.getAccessToken()),
|
||||
new FormBodyPart("media", new InputStreamBody(is, mimeType.toString(), fileName)));
|
||||
return response.getAsJson().getString("url");
|
||||
}
|
||||
|
||||
@ -111,14 +111,13 @@ public class MediaApi extends QyApi {
|
||||
* 文件名
|
||||
* @return 上传到微信服务器返回的媒体标识
|
||||
* @see com.foxinmy.weixin4j.model.MediaUploadResult
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E4%B8%B4%E6%97%B6%E7%B4%A0%E6%9D%90%E6%96%87%E4%BB%B6">上传临时素材文件说明</a>
|
||||
* @see <a
|
||||
* href="http://http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">上传永久素材文件说明</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E4%B8%B4%E6%97%B6%E7%B4%A0%E6%9D%90%E6%96%87%E4%BB%B6">上传临时素材文件说明</a>
|
||||
* @see <a href=
|
||||
* "http://http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">上传永久素材文件说明</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public MediaUploadResult uploadMedia(int agentid, InputStream is,
|
||||
String fileName) throws WeixinException {
|
||||
public MediaUploadResult uploadMedia(int agentid, InputStream is, String fileName) throws WeixinException {
|
||||
byte[] content;
|
||||
try {
|
||||
content = IOUtil.toByteArray(is);
|
||||
@ -130,19 +129,15 @@ public class MediaApi extends QyApi {
|
||||
}
|
||||
String suffixName = FileUtil.getFileExtension(fileName);
|
||||
if (StringUtil.isBlank(suffixName)) {
|
||||
suffixName = FileUtil
|
||||
.getFileType(new ByteArrayInputStream(content));
|
||||
suffixName = FileUtil.getFileType(new ByteArrayInputStream(content));
|
||||
fileName = String.format("%s.%s", fileName, suffixName);
|
||||
}
|
||||
MediaType mediaType = MediaType.file;
|
||||
if (",bmp,png,jpeg,jpg,gif,"
|
||||
.contains(String.format(",%s,", suffixName))) {
|
||||
if (",bmp,png,jpeg,jpg,gif,".contains(String.format(",%s,", suffixName))) {
|
||||
mediaType = MediaType.image;
|
||||
} else if (",mp3,wma,wav,amr,".contains(String.format(",%s,",
|
||||
suffixName))) {
|
||||
} else if (",mp3,wma,wav,amr,".contains(String.format(",%s,", suffixName))) {
|
||||
mediaType = MediaType.voice;
|
||||
} else if (",rm,rmvb,wmv,avi,mpg,mpeg,mp4,".contains(String.format(
|
||||
",%s,", suffixName))) {
|
||||
} else if (",rm,rmvb,wmv,avi,mpg,mpeg,mp4,".contains(String.format(",%s,", suffixName))) {
|
||||
mediaType = MediaType.video;
|
||||
}
|
||||
Token token = tokenManager.getCache();
|
||||
@ -150,26 +145,20 @@ public class MediaApi extends QyApi {
|
||||
WeixinResponse response = null;
|
||||
if (agentid > 0) {
|
||||
String material_media_upload_uri = getRequestUri("material_media_upload_uri");
|
||||
response = weixinExecutor.post(String.format(
|
||||
material_media_upload_uri, token.getAccessToken(),
|
||||
mediaType.name(), agentid), new FormBodyPart("media",
|
||||
new ByteArrayBody(content, mediaType.getContentType()
|
||||
.getMimeType(), fileName)));
|
||||
response = weixinExecutor.post(
|
||||
String.format(material_media_upload_uri, token.getAccessToken(), mediaType.name(), agentid),
|
||||
new FormBodyPart("media",
|
||||
new ByteArrayBody(content, mediaType.getMimeType().toString(), fileName)));
|
||||
JSONObject obj = response.getAsJson();
|
||||
return new MediaUploadResult(obj.getString("media_id"),
|
||||
mediaType, new Date(), obj.getString("url"));
|
||||
return new MediaUploadResult(obj.getString("media_id"), mediaType, new Date(), obj.getString("url"));
|
||||
} else {
|
||||
String media_upload_uri = getRequestUri("media_upload_uri");
|
||||
response = weixinExecutor.post(String.format(media_upload_uri,
|
||||
token.getAccessToken(), mediaType.name()),
|
||||
new FormBodyPart("media", new ByteArrayBody(content,
|
||||
mediaType.getContentType().getMimeType(),
|
||||
fileName)));
|
||||
response = weixinExecutor.post(
|
||||
String.format(media_upload_uri, token.getAccessToken(), mediaType.name()), new FormBodyPart(
|
||||
"media", new ByteArrayBody(content, mediaType.getMimeType().toString(), fileName)));
|
||||
JSONObject obj = response.getAsJson();
|
||||
return new MediaUploadResult(obj.getString("media_id"),
|
||||
obj.getObject("type", MediaType.class), new Date(
|
||||
obj.getLong("created_at") * 1000l),
|
||||
obj.getString("url"));
|
||||
return new MediaUploadResult(obj.getString("media_id"), obj.getObject("type", MediaType.class),
|
||||
new Date(obj.getLong("created_at") * 1000l), obj.getString("url"));
|
||||
}
|
||||
} finally {
|
||||
if (is != null) {
|
||||
@ -191,60 +180,45 @@ public class MediaApi extends QyApi {
|
||||
* 媒体ID
|
||||
* @return 媒体下载结果
|
||||
* @see com.foxinmy.weixin4j.model.MediaDownloadResult
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E4%B8%B4%E6%97%B6%E7%B4%A0%E6%9D%90%E6%96%87%E4%BB%B6">获取临时媒体说明</a>
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">获取永久媒体说明</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E4%B8%B4%E6%97%B6%E7%B4%A0%E6%9D%90%E6%96%87%E4%BB%B6">获取临时媒体说明</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">获取永久媒体说明</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public MediaDownloadResult downloadMedia(int agentid, String mediaId)
|
||||
throws WeixinException {
|
||||
public MediaDownloadResult downloadMedia(int agentid, String mediaId) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
try {
|
||||
HttpRequest request = null;
|
||||
if (agentid > 0) {
|
||||
String material_media_download_uri = getRequestUri("material_media_download_uri");
|
||||
request = new HttpRequest(HttpMethod.GET, String.format(
|
||||
material_media_download_uri, token.getAccessToken(),
|
||||
mediaId, agentid));
|
||||
request = new HttpRequest(HttpMethod.GET,
|
||||
String.format(material_media_download_uri, token.getAccessToken(), mediaId, agentid));
|
||||
} else {
|
||||
String media_download_uri = getRequestUri("media_download_uri");
|
||||
request = new HttpRequest(HttpMethod.GET, String.format(
|
||||
media_download_uri, token.getAccessToken(), mediaId));
|
||||
request = new HttpRequest(HttpMethod.GET,
|
||||
String.format(media_download_uri, token.getAccessToken(), mediaId));
|
||||
}
|
||||
request.setParams(weixinExecutor.getExecuteParams());
|
||||
logger.info("weixin request >> " + request.getMethod() + " "
|
||||
+ request.getURI().toString());
|
||||
HttpResponse response = weixinExecutor.getExecuteClient().execute(
|
||||
request);
|
||||
logger.info("weixin request >> " + request.getMethod() + " " + request.getURI().toString());
|
||||
HttpResponse response = weixinExecutor.getExecuteClient().execute(request);
|
||||
byte[] content = IOUtil.toByteArray(response.getBody());
|
||||
HttpHeaders headers = response.getHeaders();
|
||||
String contentType = headers.getFirst(HttpHeaders.CONTENT_TYPE);
|
||||
String disposition = headers
|
||||
.getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||
logger.info("weixin response << " + response.getProtocol()
|
||||
+ response.getStatus().toString() + "[" + contentType
|
||||
+ "]->" + disposition);
|
||||
if (contentType.contains(ContentType.TEXT_PLAIN.getMimeType())
|
||||
|| contentType.contains(ContentType.APPLICATION_JSON
|
||||
.getMimeType())
|
||||
|| (disposition != null && disposition.indexOf(".json") > 0)) {
|
||||
JsonResult jsonResult = JSON.parseObject(content, 0,
|
||||
content.length, Consts.UTF_8.newDecoder(),
|
||||
JsonResult.class);
|
||||
if (jsonResult.getCode() != 0) {
|
||||
throw new WeixinException(Integer.toString(jsonResult
|
||||
.getCode()), jsonResult.getDesc());
|
||||
String disposition = headers.getFirst(HttpHeaders.CONTENT_DISPOSITION);
|
||||
logger.info("weixin response << " + response.getProtocol() + response.getStatus().toString() + "["
|
||||
+ contentType + "]->" + disposition);
|
||||
if (JsonMessageConverter.GLOBAL.canConvert(ApiResult.class, response)) {
|
||||
ApiResult result = JsonMessageConverter.GLOBAL.convert(ApiResult.class, response);
|
||||
if (!"0".equals(result.getReturnCode())) {
|
||||
throw new WeixinException(result.getReturnCode(), result.getReturnMsg());
|
||||
}
|
||||
}
|
||||
String fileName = RegexUtil
|
||||
.regexFileNameFromContentDispositionHeader(disposition);
|
||||
String fileName = RegexUtil.regexFileNameFromContentDispositionHeader(disposition);
|
||||
if (StringUtil.isBlank(fileName)) {
|
||||
fileName = String.format("%s.%s", mediaId,
|
||||
contentType.split("/")[1]);
|
||||
fileName = String.format("%s.%s", mediaId, contentType.split("/")[1]);
|
||||
}
|
||||
return new MediaDownloadResult(content,
|
||||
ContentType.create(contentType), fileName);
|
||||
return new MediaDownloadResult(content, ContentType.create(contentType), fileName);
|
||||
} catch (IOException e) {
|
||||
throw new WeixinException("I/O Error on getBody", e);
|
||||
} catch (HttpClientException e) {
|
||||
@ -265,12 +239,11 @@ public class MediaApi extends QyApi {
|
||||
* 图文列表
|
||||
* @return 上传到微信服务器返回的媒体标识
|
||||
* @throws WeixinException
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">上传永久媒体素材</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">上传永久媒体素材</a>
|
||||
* @see com.foxinmy.weixin4j.tuple.MpArticle
|
||||
*/
|
||||
public String uploadMaterialArticle(int agentid, List<MpArticle> articles)
|
||||
throws WeixinException {
|
||||
public String uploadMaterialArticle(int agentid, List<MpArticle> articles) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_article_upload_uri = getRequestUri("material_article_upload_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -278,9 +251,8 @@ public class MediaApi extends QyApi {
|
||||
JSONObject news = new JSONObject();
|
||||
news.put("articles", articles);
|
||||
obj.put("mpnews", news);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_article_upload_uri,
|
||||
token.getAccessToken()), obj.toJSONString());
|
||||
WeixinResponse response = weixinExecutor
|
||||
.post(String.format(material_article_upload_uri, token.getAccessToken()), obj.toJSONString());
|
||||
|
||||
return response.getAsJson().getString("media_id");
|
||||
}
|
||||
@ -294,17 +266,15 @@ public class MediaApi extends QyApi {
|
||||
* 媒体素材的media_id
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E5%88%A0%E9%99%A4%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">删除永久媒体素材</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E5%88%A0%E9%99%A4%E6%B0%B8%E4%B9%85%E7%B4%A0%E6%9D%90">删除永久媒体素材</a>
|
||||
*/
|
||||
public JsonResult deleteMaterialMedia(int agentid, String mediaId)
|
||||
throws WeixinException {
|
||||
public ApiResult deleteMaterialMedia(int agentid, String mediaId) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_media_del_uri = getRequestUri("material_media_del_uri");
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
material_media_del_uri, token.getAccessToken(), mediaId,
|
||||
agentid));
|
||||
return response.getAsJsonResult();
|
||||
WeixinResponse response = weixinExecutor
|
||||
.get(String.format(material_media_del_uri, token.getAccessToken(), mediaId, agentid));
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -319,14 +289,11 @@ public class MediaApi extends QyApi {
|
||||
* @see {@link #downloadMedia(int, String)}
|
||||
* @see com.foxinmy.weixin4j.tuple.MpArticle
|
||||
*/
|
||||
public List<MpArticle> downloadArticle(int agentid, String mediaId)
|
||||
throws WeixinException {
|
||||
public List<MpArticle> downloadArticle(int agentid, String mediaId) throws WeixinException {
|
||||
MediaDownloadResult result = downloadMedia(agentid, mediaId);
|
||||
byte[] content = result.getContent();
|
||||
JSONObject obj = JSON.parseObject(content, 0, content.length,
|
||||
Consts.UTF_8.newDecoder(), JSONObject.class);
|
||||
return JSON.parseArray(obj.getJSONObject("mpnews")
|
||||
.getString("articles"), MpArticle.class);
|
||||
JSONObject obj = JSON.parseObject(content, 0, content.length, Consts.UTF_8.newDecoder(), JSONObject.class);
|
||||
return JSON.parseArray(obj.getJSONObject("mpnews").getString("articles"), MpArticle.class);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -340,12 +307,11 @@ public class MediaApi extends QyApi {
|
||||
* 图文列表
|
||||
* @return 操作结果
|
||||
* @throws WeixinException
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E4%BF%AE%E6%94%B9%E6%B0%B8%E4%B9%85%E5%9B%BE%E6%96%87%E7%B4%A0%E6%9D%90">修改永久媒体素材</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E4%BF%AE%E6%94%B9%E6%B0%B8%E4%B9%85%E5%9B%BE%E6%96%87%E7%B4%A0%E6%9D%90">修改永久媒体素材</a>
|
||||
* @see com.foxinmy.weixin4j.tuple.MpArticle
|
||||
*/
|
||||
public String updateMaterialArticle(int agentid, String mediaId,
|
||||
List<MpArticle> articles) throws WeixinException {
|
||||
public String updateMaterialArticle(int agentid, String mediaId, List<MpArticle> articles) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_article_update_uri = getRequestUri("material_article_update_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -354,9 +320,8 @@ public class MediaApi extends QyApi {
|
||||
news.put("articles", articles);
|
||||
obj.put("mpnews", news);
|
||||
obj.put("media_id", mediaId);
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_article_update_uri,
|
||||
token.getAccessToken()), obj.toJSONString());
|
||||
WeixinResponse response = weixinExecutor
|
||||
.post(String.format(material_article_update_uri, token.getAccessToken()), obj.toJSONString());
|
||||
|
||||
return response.getAsJson().getString("media_id");
|
||||
}
|
||||
@ -369,14 +334,14 @@ public class MediaApi extends QyApi {
|
||||
* @return 总数对象
|
||||
* @throws WeixinException
|
||||
* @see com.foxinmy.weixin4j.model.MediaCounter
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E7%B4%A0%E6%9D%90%E6%80%BB%E6%95%B0">获取素材总数</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E7%B4%A0%E6%9D%90%E6%80%BB%E6%95%B0">获取素材总数</a>
|
||||
*/
|
||||
public MediaCounter countMaterialMedia(int agentid) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_media_count_uri = getRequestUri("material_media_count_uri");
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
material_media_count_uri, token.getAccessToken(), agentid));
|
||||
WeixinResponse response = weixinExecutor
|
||||
.get(String.format(material_media_count_uri, token.getAccessToken(), agentid));
|
||||
JSONObject result = response.getAsJson();
|
||||
MediaCounter counter = JSON.toJavaObject(result, MediaCounter.class);
|
||||
counter.setNewsCount(result.getIntValue("mpnews_count"));
|
||||
@ -399,21 +364,18 @@ public class MediaApi extends QyApi {
|
||||
* @see com.foxinmy.weixin4j.model.MediaItem
|
||||
* @see com.foxinmy.weixin4j.model.Pageable
|
||||
* @see com.foxinmy.weixin4j.model.Pagedata
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E7%B4%A0%E6%9D%90%E5%88%97%E8%A1%A8">获取素材列表</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E8%8E%B7%E5%8F%96%E7%B4%A0%E6%9D%90%E5%88%97%E8%A1%A8">获取素材列表</a>
|
||||
*/
|
||||
public MediaRecord listMaterialMedia(int agentid, MediaType mediaType,
|
||||
Pageable pageable) throws WeixinException {
|
||||
public MediaRecord listMaterialMedia(int agentid, MediaType mediaType, Pageable pageable) throws WeixinException {
|
||||
Token token = tokenManager.getCache();
|
||||
String material_media_list_uri = getRequestUri("material_media_list_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("agentid", agentid);
|
||||
obj.put("type",
|
||||
mediaType == MediaType.news ? "mpnews" : mediaType.name());
|
||||
obj.put("type", mediaType == MediaType.news ? "mpnews" : mediaType.name());
|
||||
obj.put("offset", pageable.getOffset());
|
||||
obj.put("count", pageable.getPageSize());
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(material_media_list_uri, token.getAccessToken()),
|
||||
WeixinResponse response = weixinExecutor.post(String.format(material_media_list_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
obj = response.getAsJson();
|
||||
|
||||
@ -435,15 +397,13 @@ public class MediaApi extends QyApi {
|
||||
* @see {@link #listMaterialMedia(int,MediaType, Pageable)}
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public List<MediaItem> listAllMaterialMedia(int agentid, MediaType mediaType)
|
||||
throws WeixinException {
|
||||
public List<MediaItem> listAllMaterialMedia(int agentid, MediaType mediaType) throws WeixinException {
|
||||
Pageable pageable = new Pageable(1, 20);
|
||||
List<MediaItem> mediaList = new ArrayList<MediaItem>();
|
||||
MediaRecord mediaRecord = null;
|
||||
for (;;) {
|
||||
mediaRecord = listMaterialMedia(agentid, mediaType, pageable);
|
||||
if (mediaRecord.getItems() == null
|
||||
|| mediaRecord.getItems().isEmpty()) {
|
||||
if (mediaRecord.getItems() == null || mediaRecord.getItems().isEmpty()) {
|
||||
break;
|
||||
}
|
||||
mediaList.addAll(mediaRecord.getItems());
|
||||
@ -462,8 +422,8 @@ public class MediaApi extends QyApi {
|
||||
* 成员列表
|
||||
* @see {@link BatchApi#syncUser(String,Callback)}
|
||||
* @see {@link BatchApi#replaceUser(String,Callback)}
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.80.9A.E8.AE.AF.E5.BD.95.E6.9B.B4.E6.96.B0">批量任务</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.80.9A.E8.AE.AF.E5.BD.95.E6.9B.B4.E6.96.B0">批量任务</a>
|
||||
* @return 上传后的mediaId
|
||||
* @throws WeixinException
|
||||
*/
|
||||
@ -477,22 +437,19 @@ public class MediaApi extends QyApi {
|
||||
* @param parties
|
||||
* 部门列表
|
||||
* @see {@link BatchApi#replaceParty(String,Callback)}
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.80.9A.E8.AE.AF.E5.BD.95.E6.9B.B4.E6.96.B0">批量任务</a>
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BC%82%E6%AD%A5%E4%BB%BB%E5%8A%A1%E6%8E%A5%E5%8F%A3#.E9.80.9A.E8.AE.AF.E5.BD.95.E6.9B.B4.E6.96.B0">批量任务</a>
|
||||
* @return 上传后的mediaId
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public String batchUploadParties(List<Party> parties)
|
||||
throws WeixinException {
|
||||
public String batchUploadParties(List<Party> parties) throws WeixinException {
|
||||
return batchUpload("batch_replaceparty.cvs", parties);
|
||||
}
|
||||
|
||||
private <T> String batchUpload(String batchName, List<T> models)
|
||||
throws WeixinException {
|
||||
private <T> String batchUpload(String batchName, List<T> models) throws WeixinException {
|
||||
StringWriter writer = new StringWriter();
|
||||
try {
|
||||
JSONObject csvObj = JSON.parseObject(weixinBundle().getString(
|
||||
batchName));
|
||||
JSONObject csvObj = JSON.parseObject(weixinBundle().getString(batchName));
|
||||
JSONArray columns = csvObj.getJSONArray("column");
|
||||
writer.write(csvObj.getString("header"));
|
||||
final Map<String, Object> column = new LinkedHashMap<String, Object>();
|
||||
@ -503,13 +460,10 @@ public class MediaApi extends QyApi {
|
||||
for (T model : models) {
|
||||
JSON.toJSONString(model, new PropertyFilter() {
|
||||
@Override
|
||||
public boolean apply(Object object, String name,
|
||||
Object value) {
|
||||
public boolean apply(Object object, String name, Object value) {
|
||||
if (column.containsKey(name)) {
|
||||
if (value instanceof Collection) {
|
||||
column.put(name,
|
||||
StringUtil.join(((Collection<?>) value)
|
||||
.iterator(), ';'));
|
||||
column.put(name, StringUtil.join(((Collection<?>) value).iterator(), ';'));
|
||||
} else {
|
||||
column.put(name, value);
|
||||
}
|
||||
@ -520,10 +474,8 @@ public class MediaApi extends QyApi {
|
||||
writer.write(StringUtil.join(column.values(), ','));
|
||||
writer.write("\r\n");
|
||||
}
|
||||
return uploadMedia(
|
||||
0,
|
||||
new ByteArrayInputStream(writer.getBuffer().toString()
|
||||
.getBytes(Consts.UTF_8)), batchName).getMediaId();
|
||||
return uploadMedia(0, new ByteArrayInputStream(writer.getBuffer().toString().getBytes(Consts.UTF_8)),
|
||||
batchName).getMediaId();
|
||||
} finally {
|
||||
try {
|
||||
writer.close();
|
||||
|
||||
@ -11,7 +11,7 @@ import com.alibaba.fastjson.parser.deserializer.ExtraProcessor;
|
||||
import com.alibaba.fastjson.parser.deserializer.ParseProcess;
|
||||
import com.alibaba.fastjson.serializer.NameFilter;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Button;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
@ -49,7 +49,7 @@ public class MenuApi extends QyApi {
|
||||
* 创建自定义菜单</a>
|
||||
* @see com.foxinmy.weixin4j.model.Button
|
||||
*/
|
||||
public JsonResult createMenu(int agentid, List<Button> buttons) throws WeixinException {
|
||||
public ApiResult createMenu(int agentid, List<Button> buttons) throws WeixinException {
|
||||
String menu_create_uri = getRequestUri("menu_create_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
JSONObject obj = new JSONObject();
|
||||
@ -74,7 +74,7 @@ public class MenuApi extends QyApi {
|
||||
}
|
||||
}));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -119,11 +119,11 @@ public class MenuApi extends QyApi {
|
||||
* 删除菜单</a>
|
||||
* @return 处理结果
|
||||
*/
|
||||
public JsonResult deleteMenu(int agentid) throws WeixinException {
|
||||
public ApiResult deleteMenu(int agentid) throws WeixinException {
|
||||
String menu_delete_uri = getRequestUri("menu_delete_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(menu_delete_uri, token.getAccessToken(), agentid));
|
||||
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import java.util.Map;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.qy.message.CustomeMessage;
|
||||
@ -138,7 +138,7 @@ public class NotifyApi extends QyApi {
|
||||
* @see com.foxinmy.weixin4j.qy.message.CustomeMessage
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult sendCustomeMessage(CustomeMessage message)
|
||||
public ApiResult sendCustomeMessage(CustomeMessage message)
|
||||
throws WeixinException {
|
||||
NotifyTuple tuple = message.getTuple();
|
||||
String msgtype = tuple.getMessageType();
|
||||
@ -150,7 +150,7 @@ public class NotifyApi extends QyApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(message_kf_send_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -5,7 +5,7 @@ import java.util.List;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.qy.model.Party;
|
||||
@ -67,7 +67,7 @@ public class PartyApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateParty(Party party) throws WeixinException {
|
||||
public ApiResult updateParty(Party party) throws WeixinException {
|
||||
if (party.getId() < 1) {
|
||||
throw new WeixinException("department id must gt 1");
|
||||
}
|
||||
@ -83,7 +83,7 @@ public class PartyApi extends QyApi {
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(department_update_uri, token.getAccessToken()),
|
||||
obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -119,11 +119,11 @@ public class PartyApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteParty(int partId) throws WeixinException {
|
||||
public ApiResult deleteParty(int partId) throws WeixinException {
|
||||
String department_delete_uri = getRequestUri("department_delete_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(String.format(
|
||||
department_delete_uri, token.getAccessToken(), partId));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@ package com.foxinmy.weixin4j.qy.api;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.qy.model.AgentInfo;
|
||||
@ -117,7 +117,7 @@ public class SuiteApi extends QyApi {
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E8.AE.BE.E7.BD.AE.E6.8E.88.E6.9D.83.E9.85.8D.E7.BD.AE"
|
||||
* >设置套件授权配置</a>
|
||||
*/
|
||||
public JsonResult setSuiteSession(int... appids) throws WeixinException {
|
||||
public ApiResult setSuiteSession(int... appids) throws WeixinException {
|
||||
String suite_set_session_uri = getRequestUri("suite_set_session_uri");
|
||||
JSONObject para = new JSONObject();
|
||||
para.put("pre_auth_code", preCodeManager.getAccessToken());
|
||||
@ -126,7 +126,7 @@ public class SuiteApi extends QyApi {
|
||||
para.put("session_info", appid);
|
||||
WeixinResponse response = weixinExecutor
|
||||
.post(String.format(suite_set_session_uri, tokenManager.getAccessToken()), para.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -232,7 +232,7 @@ public class SuiteApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult setAgent(String authCorpId, AgentSetter agentSet) throws WeixinException {
|
||||
public ApiResult setAgent(String authCorpId, AgentSetter agentSet) throws WeixinException {
|
||||
String suite_set_agent_uri = getRequestUri("suite_set_agent_uri");
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("suite_id", ticketManager.getThirdId());
|
||||
@ -241,6 +241,6 @@ public class SuiteApi extends QyApi {
|
||||
obj.put("agent", agentSet);
|
||||
WeixinResponse response = weixinExecutor.post(String.format(suite_set_agent_uri, tokenManager.getAccessToken()),
|
||||
JSON.toJSONString(obj, AgentApi.typeFilter));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@ import java.util.List;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.qy.model.Contacts;
|
||||
@ -70,13 +70,13 @@ public class TagApi extends QyApi {
|
||||
* @see com.foxinmy.weixin4j.qy.model.Tag
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateTag(Tag tag) throws WeixinException {
|
||||
public ApiResult updateTag(Tag tag) throws WeixinException {
|
||||
String tag_update_uri = getRequestUri("tag_update_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(tag_update_uri, token.getAccessToken()),
|
||||
JSON.toJSONString(tag));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -90,12 +90,12 @@ public class TagApi extends QyApi {
|
||||
* 删除标签说明</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteTag(int tagId) throws WeixinException {
|
||||
public ApiResult deleteTag(int tagId) throws WeixinException {
|
||||
String tag_delete_uri = getRequestUri("tag_delete_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
tag_delete_uri, token.getAccessToken(), tagId));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -8,7 +8,7 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.http.weixin.WeixinResponse;
|
||||
import com.foxinmy.weixin4j.model.Token;
|
||||
import com.foxinmy.weixin4j.qy.model.OUserInfo;
|
||||
@ -52,7 +52,7 @@ public class UserApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult createUser(User user) throws WeixinException {
|
||||
public ApiResult createUser(User user) throws WeixinException {
|
||||
String user_create_uri = getRequestUri("user_create_uri");
|
||||
return excute(user_create_uri, user, null);
|
||||
}
|
||||
@ -71,7 +71,7 @@ public class UserApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult createUser(User user, InputStream avatar)
|
||||
public ApiResult createUser(User user, InputStream avatar)
|
||||
throws WeixinException {
|
||||
String user_create_uri = getRequestUri("user_create_uri");
|
||||
return excute(user_create_uri, user, avatar);
|
||||
@ -89,7 +89,7 @@ public class UserApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateUser(User user) throws WeixinException {
|
||||
public ApiResult updateUser(User user) throws WeixinException {
|
||||
String user_update_uri = getRequestUri("user_update_uri");
|
||||
return excute(user_update_uri, user, null);
|
||||
}
|
||||
@ -108,13 +108,13 @@ public class UserApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult updateUser(User user, InputStream avatar)
|
||||
public ApiResult updateUser(User user, InputStream avatar)
|
||||
throws WeixinException {
|
||||
String user_update_uri = getRequestUri("user_update_uri");
|
||||
return excute(user_update_uri, user, avatar);
|
||||
}
|
||||
|
||||
private JsonResult excute(String uri, User user, InputStream avatar)
|
||||
private ApiResult excute(String uri, User user, InputStream avatar)
|
||||
throws WeixinException {
|
||||
JSONObject obj = (JSONObject) JSON.toJSON(user);
|
||||
Object val = obj.remove("extattr");
|
||||
@ -135,7 +135,7 @@ public class UserApi extends QyApi {
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(
|
||||
String.format(uri, token.getAccessToken()), obj.toJSONString());
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -314,12 +314,12 @@ public class UserApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult deleteUser(String userid) throws WeixinException {
|
||||
public ApiResult deleteUser(String userid) throws WeixinException {
|
||||
String user_delete_uri = getRequestUri("user_delete_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
user_delete_uri, token.getAccessToken(), userid));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -333,7 +333,7 @@ public class UserApi extends QyApi {
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult batchDeleteUser(List<String> userIds)
|
||||
public ApiResult batchDeleteUser(List<String> userIds)
|
||||
throws WeixinException {
|
||||
JSONObject obj = new JSONObject();
|
||||
obj.put("useridlist", userIds);
|
||||
@ -341,7 +341,7 @@ public class UserApi extends QyApi {
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.post(String.format(
|
||||
user_delete_uri, token.getAccessToken(), obj.toJSONString()));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -355,12 +355,12 @@ public class UserApi extends QyApi {
|
||||
* 二次验证说明</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult authsucc(String userId) throws WeixinException {
|
||||
public ApiResult authsucc(String userId) throws WeixinException {
|
||||
String user_authsucc_uri = getRequestUri("user_authsucc_uri");
|
||||
Token token = tokenManager.getCache();
|
||||
WeixinResponse response = weixinExecutor.get(String.format(
|
||||
user_authsucc_uri, token.getAccessToken(), userId));
|
||||
return response.getAsJsonResult();
|
||||
return response.getAsResult();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -2,7 +2,7 @@ package com.foxinmy.weixin4j.qy.model;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.qy.type.BatchStatus;
|
||||
import com.foxinmy.weixin4j.qy.type.BatchType;
|
||||
|
||||
@ -15,7 +15,7 @@ import com.foxinmy.weixin4j.qy.type.BatchType;
|
||||
* @since JDK 1.6
|
||||
* @see
|
||||
*/
|
||||
public class BatchResult extends JsonResult {
|
||||
public class BatchResult extends ApiResult {
|
||||
|
||||
private static final long serialVersionUID = 4985338631992208903L;
|
||||
/**
|
||||
@ -107,8 +107,7 @@ public class BatchResult extends JsonResult {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "BatchResult [status=" + status + ", type=" + type + ", total="
|
||||
+ total + ", percentAge=" + percentAge + ", remainTime="
|
||||
+ remainTime + ", result=" + result + "]";
|
||||
return "BatchResult [" + super.toString() + ", status=" + status + ", type=" + type + ", total=" + total
|
||||
+ ", percentAge=" + percentAge + ", remainTime=" + remainTime + ", result=" + result + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.qy.api.AgentApi;
|
||||
import com.foxinmy.weixin4j.qy.model.AgentInfo;
|
||||
import com.foxinmy.weixin4j.qy.model.AgentOverview;
|
||||
@ -44,8 +44,8 @@ public class AgentTest extends TokenTest {
|
||||
agentSet.setDescription("test");
|
||||
agentSet.setRedirectDomain("test.com");
|
||||
agentSet.setReportLocationType(ReportLocationType.DIALOG);
|
||||
JsonResult result = agentApi.setAgent(agentSet);
|
||||
Assert.assertTrue(result.getCode() == 0);
|
||||
ApiResult result = agentApi.setAgent(agentSet);
|
||||
Assert.assertEquals("0",result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -8,7 +8,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.model.Button;
|
||||
import com.foxinmy.weixin4j.qy.api.MenuApi;
|
||||
import com.foxinmy.weixin4j.type.ButtonType;
|
||||
@ -42,8 +42,8 @@ public class MenuTest extends TokenTest {
|
||||
btnList.add(b);
|
||||
b = new Button("photo", "photo", ButtonType.pic_photo_or_album);
|
||||
btnList.add(b);
|
||||
JsonResult result = menuApi.createMenu(1, btnList);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = menuApi.createMenu(1, btnList);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -57,7 +57,7 @@ public class MenuTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void delete() throws WeixinException {
|
||||
JsonResult result = menuApi.deleteMenu(1);
|
||||
Assert.assertEquals(0, result.getCode());
|
||||
ApiResult result = menuApi.deleteMenu(1);
|
||||
Assert.assertEquals(0, result.getReturnCode());
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.qy.api.PartyApi;
|
||||
import com.foxinmy.weixin4j.qy.model.Party;
|
||||
|
||||
@ -38,8 +38,8 @@ public class PartyTest extends TokenTest {
|
||||
@Test
|
||||
public void update() throws WeixinException {
|
||||
Party Party = new Party(2, "苦逼组111", 1);
|
||||
JsonResult result = partyApi.updateParty(Party);
|
||||
Assert.assertEquals("updated", result.getDesc());
|
||||
ApiResult result = partyApi.updateParty(Party);
|
||||
Assert.assertEquals("updated", result.getReturnMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -51,7 +51,7 @@ public class PartyTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void delete() throws WeixinException {
|
||||
JsonResult result = partyApi.deleteParty(2);
|
||||
Assert.assertEquals("deleted", result.getDesc());
|
||||
ApiResult result = partyApi.deleteParty(2);
|
||||
Assert.assertEquals("deleted", result.getReturnMsg());
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.qy.api.TagApi;
|
||||
import com.foxinmy.weixin4j.qy.model.Contacts;
|
||||
import com.foxinmy.weixin4j.qy.model.IdParameter;
|
||||
@ -39,8 +39,8 @@ public class TagTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void update() throws WeixinException {
|
||||
JsonResult result = tagApi.updateTag(new Tag(1, "coder456"));
|
||||
Assert.assertEquals("updated", result.getDesc());
|
||||
ApiResult result = tagApi.updateTag(new Tag(1, "coder456"));
|
||||
Assert.assertEquals("updated", result.getReturnMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -73,7 +73,7 @@ public class TagTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void delete() throws WeixinException {
|
||||
JsonResult result = tagApi.deleteTag(3);
|
||||
Assert.assertEquals("deleted", result.getDesc());
|
||||
ApiResult result = tagApi.deleteTag(3);
|
||||
Assert.assertEquals("deleted", result.getReturnMsg());
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.http.message.ApiResult;
|
||||
import com.foxinmy.weixin4j.qy.api.MediaApi;
|
||||
import com.foxinmy.weixin4j.qy.api.UserApi;
|
||||
import com.foxinmy.weixin4j.qy.model.User;
|
||||
@ -38,8 +38,8 @@ public class UserTest extends TokenTest {
|
||||
User user = new User("id", "name");
|
||||
user.setPartyIds(1);
|
||||
user.pushExattr("爱好", "code");
|
||||
JsonResult result = userApi.createUser(user);
|
||||
Assert.assertEquals("created", result.getDesc());
|
||||
ApiResult result = userApi.createUser(user);
|
||||
Assert.assertEquals("created", result.getReturnMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -55,8 +55,8 @@ public class UserTest extends TokenTest {
|
||||
User user = new User("id", "name");
|
||||
user.setPartyIds(1);
|
||||
user.pushExattr("爱好", "code");
|
||||
JsonResult result = userApi.updateUser(user);
|
||||
Assert.assertEquals("updated", result.getDesc());
|
||||
ApiResult result = userApi.updateUser(user);
|
||||
Assert.assertEquals("updated", result.getReturnMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -75,8 +75,8 @@ public class UserTest extends TokenTest {
|
||||
|
||||
@Test
|
||||
public void delete() throws WeixinException {
|
||||
JsonResult result = userApi.deleteUser("u001");
|
||||
Assert.assertEquals("deleted", result.getDesc());
|
||||
ApiResult result = userApi.deleteUser("u001");
|
||||
Assert.assertEquals("deleted", result.getReturnMsg());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user