diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java index d20e5c5f..ebe500bf 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java @@ -86,6 +86,7 @@ public class WxMpServiceImpl implements WxMpService { protected WxSessionManager sessionManager = new StandardSessionManager(); + @Override public boolean checkSignature(String timestamp, String nonce, String signature) { try { return SHA1.gen(wxMpConfigStorage.getToken(), timestamp, nonce).equals(signature); @@ -94,10 +95,12 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public String getAccessToken() throws WxErrorException { return getAccessToken(false); } + @Override public String getAccessToken(boolean forceRefresh) throws WxErrorException { if (forceRefresh) { wxMpConfigStorage.expireAccessToken(); @@ -137,10 +140,12 @@ public class WxMpServiceImpl implements WxMpService { return wxMpConfigStorage.getAccessToken(); } + @Override public String getJsapiTicket() throws WxErrorException { return getJsapiTicket(false); } + @Override public String getJsapiTicket(boolean forceRefresh) throws WxErrorException { if (forceRefresh) { wxMpConfigStorage.expireJsapiTicket(); @@ -161,6 +166,7 @@ public class WxMpServiceImpl implements WxMpService { return wxMpConfigStorage.getJsapiTicket(); } + @Override public WxJsapiSignature createJsapiSignature(String url) throws WxErrorException { long timestamp = System.currentTimeMillis() / 1000; String noncestr = RandomUtils.getRandomStr(); @@ -184,11 +190,13 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public void customMessageSend(WxMpCustomMessage message) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/message/custom/send"; execute(new SimplePostRequestExecutor(), url, message.toJson()); } + @Override public void menuCreate(WxMenu menu) throws WxErrorException { if (menu.getMatchRule() != null) { String url = "https://api.weixin.qq.com/cgi-bin/menu/addconditional"; @@ -199,16 +207,19 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public void menuDelete() throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/menu/delete"; execute(new SimpleGetRequestExecutor(), url, null); } + @Override public void menuDelete(String menuid) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/menu/delconditional"; execute(new SimpleGetRequestExecutor(), url, "menuid=" + menuid); } + @Override public WxMenu menuGet() throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/menu/get"; try { @@ -223,6 +234,7 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public WxMenu menuTryMatch(String userid) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/menu/trymatch"; try { @@ -237,25 +249,30 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public WxMediaUploadResult mediaUpload(String mediaType, String fileType, InputStream inputStream) throws WxErrorException, IOException { return mediaUpload(mediaType, FileUtils.createTmpFile(inputStream, UUID.randomUUID().toString(), fileType)); } + @Override public WxMediaUploadResult mediaUpload(String mediaType, File file) throws WxErrorException { String url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?type=" + mediaType; return execute(new MediaUploadRequestExecutor(), url, file); } + @Override public File mediaDownload(String media_id) throws WxErrorException { String url = "http://file.api.weixin.qq.com/cgi-bin/media/get"; return execute(new MediaDownloadRequestExecutor(wxMpConfigStorage.getTmpDirFile()), url, "media_id=" + media_id); } + @Override public WxMpMaterialUploadResult materialFileUpload(String mediaType, WxMpMaterial material) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/add_material?type=" + mediaType; return execute(new MaterialUploadRequestExecutor(), url, material); } + @Override public WxMpMaterialUploadResult materialNewsUpload(WxMpMaterialNews news) throws WxErrorException { if (news == null || news.isEmpty()) { throw new IllegalArgumentException("news is empty!"); @@ -265,21 +282,25 @@ public class WxMpServiceImpl implements WxMpService { return WxMpMaterialUploadResult.fromJson(responseContent); } + @Override public InputStream materialImageOrVoiceDownload(String media_id) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/get_material"; return execute(new MaterialVoiceAndImageDownloadRequestExecutor(wxMpConfigStorage.getTmpDirFile()), url, media_id); } + @Override public WxMpMaterialVideoInfoResult materialVideoInfo(String media_id) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/get_material"; return execute(new MaterialVideoInfoRequestExecutor(), url, media_id); } + @Override public WxMpMaterialNews materialNewsInfo(String media_id) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/get_material"; return execute(new MaterialNewsInfoRequestExecutor(), url, media_id); } + @Override public boolean materialNewsUpdate(WxMpMaterialArticleUpdate wxMpMaterialArticleUpdate) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/update_news"; String responseText = post(url, wxMpMaterialArticleUpdate.toJson()); @@ -291,11 +312,13 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public boolean materialDelete(String media_id) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/del_material"; return execute(new MaterialDeleteRequestExecutor(), url, media_id); } + @Override public WxMpMaterialCountResult materialCount() throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/get_materialcount"; String responseText = get(url, null); @@ -307,6 +330,7 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public WxMpMaterialNewsBatchGetResult materialNewsBatchGet(int offset, int count) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material"; Map params = new HashMap<>(); @@ -322,6 +346,7 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public WxMpMaterialFileBatchGetResult materialFileBatchGet(String type, int offset, int count) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material"; Map params = new HashMap<>(); @@ -337,30 +362,35 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public WxMpMassUploadResult massNewsUpload(WxMpMassNews news) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; String responseContent = execute(new SimplePostRequestExecutor(), url, news.toJson()); return WxMpMassUploadResult.fromJson(responseContent); } + @Override public WxMpMassUploadResult massVideoUpload(WxMpMassVideo video) throws WxErrorException { String url = "http://file.api.weixin.qq.com/cgi-bin/media/uploadvideo"; String responseContent = execute(new SimplePostRequestExecutor(), url, video.toJson()); return WxMpMassUploadResult.fromJson(responseContent); } + @Override public WxMpMassSendResult massGroupMessageSend(WxMpMassGroupMessage message) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall"; String responseContent = execute(new SimplePostRequestExecutor(), url, message.toJson()); return WxMpMassSendResult.fromJson(responseContent); } + @Override public WxMpMassSendResult massOpenIdsMessageSend(WxMpMassOpenIdsMessage message) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/message/mass/send"; String responseContent = execute(new SimplePostRequestExecutor(), url, message.toJson()); return WxMpMassSendResult.fromJson(responseContent); } + @Override public WxMpGroup groupCreate(String name) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/groups/create"; JsonObject json = new JsonObject(); @@ -375,6 +405,7 @@ public class WxMpServiceImpl implements WxMpService { return WxMpGroup.fromJson(responseContent); } + @Override public List groupGet() throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/groups/get"; String responseContent = execute(new SimpleGetRequestExecutor(), url, null); @@ -388,6 +419,7 @@ public class WxMpServiceImpl implements WxMpService { }.getType()); } + @Override public long userGetGroup(String openid) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/groups/getid"; JsonObject o = new JsonObject(); @@ -397,11 +429,13 @@ public class WxMpServiceImpl implements WxMpService { return GsonHelper.getAsLong(tmpJsonElement.getAsJsonObject().get("groupid")); } + @Override public void groupUpdate(WxMpGroup group) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/groups/update"; execute(new SimplePostRequestExecutor(), url, group.toJson()); } + @Override public void userUpdateGroup(String openid, long to_groupid) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/groups/members/update"; JsonObject json = new JsonObject(); @@ -410,6 +444,7 @@ public class WxMpServiceImpl implements WxMpService { execute(new SimplePostRequestExecutor(), url, json.toString()); } + @Override public void userUpdateRemark(String openid, String remark) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/user/info/updateremark"; JsonObject json = new JsonObject(); @@ -418,6 +453,7 @@ public class WxMpServiceImpl implements WxMpService { execute(new SimplePostRequestExecutor(), url, json.toString()); } + @Override public WxMpUser userInfo(String openid, String lang) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/user/info"; lang = lang == null ? "zh_CN" : lang; @@ -425,12 +461,14 @@ public class WxMpServiceImpl implements WxMpService { return WxMpUser.fromJson(responseContent); } + @Override public WxMpUserList userList(String next_openid) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/user/get"; String responseContent = execute(new SimpleGetRequestExecutor(), url, next_openid == null ? null : "next_openid=" + next_openid); return WxMpUserList.fromJson(responseContent); } + @Override public WxMpQrCodeTicket qrCodeCreateTmpTicket(int scene_id, Integer expire_seconds) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create"; JsonObject json = new JsonObject(); @@ -447,6 +485,7 @@ public class WxMpServiceImpl implements WxMpService { return WxMpQrCodeTicket.fromJson(responseContent); } + @Override public WxMpQrCodeTicket qrCodeCreateLastTicket(int scene_id) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create"; JsonObject json = new JsonObject(); @@ -460,6 +499,7 @@ public class WxMpServiceImpl implements WxMpService { return WxMpQrCodeTicket.fromJson(responseContent); } + @Override public WxMpQrCodeTicket qrCodeCreateLastTicket(String scene_str) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/qrcode/create"; JsonObject json = new JsonObject(); @@ -473,6 +513,7 @@ public class WxMpServiceImpl implements WxMpService { return WxMpQrCodeTicket.fromJson(responseContent); } + @Override public File qrCodePicture(WxMpQrCodeTicket ticket) throws WxErrorException { String url = "https://mp.weixin.qq.com/cgi-bin/showqrcode"; return execute(new QrCodeRequestExecutor(), url, ticket); @@ -490,6 +531,7 @@ public class WxMpServiceImpl implements WxMpService { } } + @Override public String shortUrl(String long_url) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/shorturl"; JsonObject o = new JsonObject(); @@ -500,6 +542,7 @@ public class WxMpServiceImpl implements WxMpService { return tmpJsonElement.getAsJsonObject().get("short_url").getAsString(); } + @Override public String templateSend(WxMpTemplateMessage templateMessage) throws WxErrorException { String url = "https://api.weixin.qq.com/cgi-bin/message/template/send"; String responseContent = execute(new SimplePostRequestExecutor(), url, templateMessage.toJson()); @@ -510,6 +553,7 @@ public class WxMpServiceImpl implements WxMpService { throw new WxErrorException(WxError.fromJson(responseContent)); } + @Override public WxMpSemanticQueryResult semanticQuery(WxMpSemanticQuery semanticQuery) throws WxErrorException { String url = "https://api.weixin.qq.com/semantic/semproxy/search"; String responseContent = execute(new SimplePostRequestExecutor(), url, semanticQuery.toJson()); @@ -658,10 +702,12 @@ public class WxMpServiceImpl implements WxMpService { }.getType()); } + @Override public String get(String url, String queryParam) throws WxErrorException { return execute(new SimpleGetRequestExecutor(), url, queryParam); } + @Override public String post(String url, String postData) throws WxErrorException { return execute(new SimplePostRequestExecutor(), url, postData); } @@ -675,6 +721,7 @@ public class WxMpServiceImpl implements WxMpService { * @return * @throws WxErrorException */ + @Override public T execute(RequestExecutor executor, String uri, E data) throws WxErrorException { int retryTimes = 0; do { @@ -740,6 +787,7 @@ public class WxMpServiceImpl implements WxMpService { return httpClient; } + @Override public void setWxMpConfigStorage(WxMpConfigStorage wxConfigProvider) { this.wxMpConfigStorage = wxConfigProvider; @@ -791,6 +839,7 @@ public class WxMpServiceImpl implements WxMpService { return getPrepayId(packageParams); } + @Override public WxMpPrepayIdResult getPrepayId(final Map parameters) { String nonce_str = System.currentTimeMillis() + "";