|
@@ -21,6 +21,7 @@ import org.apache.http.HttpHost; |
|
|
import org.apache.http.client.config.RequestConfig; |
|
|
import org.apache.http.client.config.RequestConfig; |
|
|
import org.apache.http.client.methods.CloseableHttpResponse; |
|
|
import org.apache.http.client.methods.CloseableHttpResponse; |
|
|
import org.apache.http.client.methods.HttpGet; |
|
|
import org.apache.http.client.methods.HttpGet; |
|
|
|
|
|
import org.apache.http.conn.ssl.DefaultHostnameVerifier; |
|
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
|
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory; |
|
|
import org.apache.http.impl.client.BasicResponseHandler; |
|
|
import org.apache.http.impl.client.BasicResponseHandler; |
|
|
import org.apache.http.impl.client.CloseableHttpClient; |
|
|
import org.apache.http.impl.client.CloseableHttpClient; |
|
@@ -209,6 +210,13 @@ public class WxMpServiceImpl implements WxMpService { |
|
|
return WxMpMassSendResult.fromJson(responseContent); |
|
|
return WxMpMassSendResult.fromJson(responseContent); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public WxMpMassSendResult massMessagePreview(WxMpMassPreviewMessage wxMpMassPreviewMessage) throws Exception { |
|
|
|
|
|
String url = "https://api.weixin.qq.com/cgi-bin/message/mass/preview"; |
|
|
|
|
|
String responseContent = execute(new SimplePostRequestExecutor(), url, wxMpMassPreviewMessage.toJson()); |
|
|
|
|
|
return WxMpMassSendResult.fromJson(responseContent); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public String shortUrl(String long_url) throws WxErrorException { |
|
|
public String shortUrl(String long_url) throws WxErrorException { |
|
|
String url = "https://api.weixin.qq.com/cgi-bin/shorturl"; |
|
|
String url = "https://api.weixin.qq.com/cgi-bin/shorturl"; |
|
@@ -226,11 +234,30 @@ public class WxMpServiceImpl implements WxMpService { |
|
|
String responseContent = execute(new SimplePostRequestExecutor(), url, templateMessage.toJson()); |
|
|
String responseContent = execute(new SimplePostRequestExecutor(), url, templateMessage.toJson()); |
|
|
JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); |
|
|
JsonElement tmpJsonElement = Streams.parse(new JsonReader(new StringReader(responseContent))); |
|
|
final JsonObject jsonObject = tmpJsonElement.getAsJsonObject(); |
|
|
final JsonObject jsonObject = tmpJsonElement.getAsJsonObject(); |
|
|
if (jsonObject.get("errcode").getAsInt() == 0) |
|
|
|
|
|
|
|
|
if (jsonObject.get("errcode").getAsInt() == 0){ |
|
|
return jsonObject.get("msgid").getAsString(); |
|
|
return jsonObject.get("msgid").getAsString(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
throw new WxErrorException(WxError.fromJson(responseContent)); |
|
|
throw new WxErrorException(WxError.fromJson(responseContent)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public String setIndustry(WxMpIndustry wxMpIndustry) throws WxErrorException { |
|
|
|
|
|
if (null == wxMpIndustry.getPrimaryIndustry() || null == wxMpIndustry.getPrimaryIndustry().getId() |
|
|
|
|
|
|| null == wxMpIndustry.getSecondIndustry() || null == wxMpIndustry.getSecondIndustry().getId()) { |
|
|
|
|
|
throw new IllegalArgumentException("industry id is empty"); |
|
|
|
|
|
} |
|
|
|
|
|
String url = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry"; |
|
|
|
|
|
return execute(new SimplePostRequestExecutor(), url, wxMpIndustry.toJson()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public WxMpIndustry getIndustry() throws WxErrorException { |
|
|
|
|
|
String url = "https://api.weixin.qq.com/cgi-bin/template/get_industry"; |
|
|
|
|
|
String responseContent = execute(new SimpleGetRequestExecutor(), url, null); |
|
|
|
|
|
return WxMpIndustry.fromJson(responseContent); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public WxMpSemanticQueryResult semanticQuery(WxMpSemanticQuery semanticQuery) throws WxErrorException { |
|
|
public WxMpSemanticQueryResult semanticQuery(WxMpSemanticQuery semanticQuery) throws WxErrorException { |
|
|
String url = "https://api.weixin.qq.com/semantic/semproxy/search"; |
|
|
String url = "https://api.weixin.qq.com/semantic/semproxy/search"; |
|
@@ -253,6 +280,16 @@ public class WxMpServiceImpl implements WxMpService { |
|
|
return url.toString(); |
|
|
return url.toString(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private WxMpOAuth2AccessToken getOAuth2AccessToken(StringBuilder url) throws WxErrorException { |
|
|
|
|
|
try { |
|
|
|
|
|
RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); |
|
|
|
|
|
String responseText = executor.execute(this.getHttpclient(), this.httpProxy, url.toString(), null); |
|
|
|
|
|
return WxMpOAuth2AccessToken.fromJson(responseText); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public WxMpOAuth2AccessToken oauth2getAccessToken(String code) throws WxErrorException { |
|
|
public WxMpOAuth2AccessToken oauth2getAccessToken(String code) throws WxErrorException { |
|
|
StringBuilder url = new StringBuilder(); |
|
|
StringBuilder url = new StringBuilder(); |
|
@@ -262,13 +299,7 @@ public class WxMpServiceImpl implements WxMpService { |
|
|
url.append("&code=").append(code); |
|
|
url.append("&code=").append(code); |
|
|
url.append("&grant_type=authorization_code"); |
|
|
url.append("&grant_type=authorization_code"); |
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); |
|
|
|
|
|
String responseText = executor.execute(getHttpclient(), this.httpProxy, url.toString(), null); |
|
|
|
|
|
return WxMpOAuth2AccessToken.fromJson(responseText); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return this.getOAuth2AccessToken(url); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
@@ -279,13 +310,7 @@ public class WxMpServiceImpl implements WxMpService { |
|
|
url.append("&grant_type=refresh_token"); |
|
|
url.append("&grant_type=refresh_token"); |
|
|
url.append("&refresh_token=").append(refreshToken); |
|
|
url.append("&refresh_token=").append(refreshToken); |
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
RequestExecutor<String, String> executor = new SimpleGetRequestExecutor(); |
|
|
|
|
|
String responseText = executor.execute(getHttpclient(), this.httpProxy, url.toString(), null); |
|
|
|
|
|
return WxMpOAuth2AccessToken.fromJson(responseText); |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
throw new RuntimeException(e); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return this.getOAuth2AccessToken(url); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
@@ -440,10 +465,7 @@ public class WxMpServiceImpl implements WxMpService { |
|
|
|
|
|
|
|
|
if (this.wxMpConfigStorage.getSSLContext() != null){ |
|
|
if (this.wxMpConfigStorage.getSSLContext() != null){ |
|
|
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( |
|
|
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( |
|
|
this.wxMpConfigStorage.getSSLContext(), |
|
|
|
|
|
new String[] { "TLSv1" }, |
|
|
|
|
|
null, |
|
|
|
|
|
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); |
|
|
|
|
|
|
|
|
this.wxMpConfigStorage.getSSLContext(), new String[] { "TLSv1" }, null, new DefaultHostnameVerifier()); |
|
|
apacheHttpClientBuilder.sslConnectionSocketFactory(sslsf); |
|
|
apacheHttpClientBuilder.sslConnectionSocketFactory(sslsf); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@@ -460,36 +482,11 @@ public class WxMpServiceImpl implements WxMpService { |
|
|
this.retrySleepMillis = retrySleepMillis; |
|
|
this.retrySleepMillis = retrySleepMillis; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void setMaxRetryTimes(int maxRetryTimes) { |
|
|
public void setMaxRetryTimes(int maxRetryTimes) { |
|
|
this.maxRetryTimes = maxRetryTimes; |
|
|
this.maxRetryTimes = maxRetryTimes; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public WxMpMassSendResult massMessagePreview(WxMpMassPreviewMessage wxMpMassPreviewMessage) throws Exception { |
|
|
|
|
|
String url = "https://api.weixin.qq.com/cgi-bin/message/mass/preview"; |
|
|
|
|
|
String responseContent = execute(new SimplePostRequestExecutor(), url, wxMpMassPreviewMessage.toJson()); |
|
|
|
|
|
return WxMpMassSendResult.fromJson(responseContent); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public String setIndustry(WxMpIndustry wxMpIndustry) throws WxErrorException { |
|
|
|
|
|
if (null == wxMpIndustry.getPrimaryIndustry() || null == wxMpIndustry.getPrimaryIndustry().getId() |
|
|
|
|
|
|| null == wxMpIndustry.getSecondIndustry() || null == wxMpIndustry.getSecondIndustry().getId()) { |
|
|
|
|
|
throw new IllegalArgumentException("industry id is empty"); |
|
|
|
|
|
} |
|
|
|
|
|
String url = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry"; |
|
|
|
|
|
return execute(new SimplePostRequestExecutor(), url, wxMpIndustry.toJson()); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public WxMpIndustry getIndustry() throws WxErrorException { |
|
|
|
|
|
String url = "https://api.weixin.qq.com/cgi-bin/template/get_industry"; |
|
|
|
|
|
String responseContent = execute(new SimpleGetRequestExecutor(), url, null); |
|
|
|
|
|
return WxMpIndustry.fromJson(responseContent); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public WxMpKefuService getKefuService() { |
|
|
public WxMpKefuService getKefuService() { |
|
|
return this.kefuService; |
|
|
return this.kefuService; |
|
|