diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java index 686c86f20d..998939ca84 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpMaterialService.java @@ -88,6 +88,22 @@ public interface WxMpMaterialService { */ File mediaDownload(String mediaId) throws WxErrorException; + /** + *
+ * 获取高清语音素材 + * 公众号可以使用本接口获取从JSSDK的uploadVoice接口上传的临时语音素材,格式为speex,16K采样率。 + * 该音频比上文的临时素材获取接口(格式为amr,8K采样率)更加清晰,适合用作语音识别等对音质要求较高的业务。 + * 详情请见: + * 获取高清语音素材 + * 接口url格式:https://api.weixin.qq.com/cgi-bin/media/get/jssdk?access_token=ACCESS_TOKEN&media_id=MEDIA_ID + *+ * + * @param mediaId 媒体文件Id + * @return 保存到本地的临时文件 + * @throws WxErrorException + */ + File jssdkMediaDownload(String mediaId) throws WxErrorException; + /** *
* 上传图文消息内的图片获取URL diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java index 2ceec219f7..4b852c03fe 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImpl.java @@ -65,6 +65,14 @@ public File mediaDownload(String mediaId) throws WxErrorException { "media_id=" + mediaId); } + @Override + public File jssdkMediaDownload(String mediaId) throws WxErrorException { + return this.wxMpService.execute( + BaseMediaDownloadRequestExecutor.create(this.wxMpService.getRequestHttp(), this.wxMpService.getWxMpConfigStorage().getTmpDirFile()), + JSSDK_MEDIA_GET_URL, + "media_id=" + mediaId); + } + @Override public WxMediaImgUploadResult mediaImgUpload(File file) throws WxErrorException { return this.wxMpService.execute(MediaImgUploadRequestExecutor.create(this.wxMpService.getRequestHttp()), IMG_UPLOAD_URL, file); diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java index 442f0305ff..5963af929d 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/enums/WxMpApiUrl.java @@ -819,6 +819,10 @@ enum Material implements WxMpApiUrl { * get. */ MEDIA_GET_URL(API_DEFAULT_HOST_URL, "/cgi-bin/media/get"), + /** + * jssdk media get. + */ + JSSDK_MEDIA_GET_URL(API_DEFAULT_HOST_URL, "/cgi-bin/media/get/jssdk"), /** * upload. */ diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImplTest.java index 024697cb70..6d14b336f5 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpMaterialServiceImplTest.java @@ -44,6 +44,8 @@ public class WxMpMaterialServiceImplTest { private WxMpMaterialCountResult wxMaterialCountResultBeforeTest; // 以下为media接口的测试 private ListmediaIdsToDownload = new ArrayList<>(); + // 以下为高清语音接口的测试 + private List voiceMediaIdsToDownload = new ArrayList<>(); @DataProvider public Object[][] mediaFiles() { @@ -289,6 +291,11 @@ public void testUploadMedia(String mediaType, String fileType, String fileName) if (res.getMediaId() != null && !mediaType.equals(WxConsts.MediaFileType.VIDEO)) { //video 不支持下载,所以不加入 this.mediaIdsToDownload.add(res.getMediaId()); + + // 音频media, 用于测试下载高清语音接口 + if (mediaType.equals(WxConsts.MediaFileType.VOICE)) { + this.voiceMediaIdsToDownload.add(res.getMediaId()); + } } if (res.getThumbMediaId() != null) { @@ -308,10 +315,26 @@ public Object[][] downloadMedia() { return params; } + @DataProvider + public Object[][] downloadJssdkMedia() { + Object[][] params = new Object[this.voiceMediaIdsToDownload.size()][]; + for (int i = 0; i < this.voiceMediaIdsToDownload.size(); i++) { + params[i] = new Object[]{this.voiceMediaIdsToDownload.get(i)}; + } + return params; + } + @Test(dependsOnMethods = {"testUploadMedia"}, dataProvider = "downloadMedia") public void testDownloadMedia(String mediaId) throws WxErrorException { File file = this.wxService.getMaterialService().mediaDownload(mediaId); assertNotNull(file); System.out.println(file.getAbsolutePath()); } + + @Test(dependsOnMethods = {"testUploadMedia"}, dataProvider = "downloadJssdkMedia") + public void testDownloadJssdkMedia(String mediaId) throws WxErrorException { + File file = this.wxService.getMaterialService().jssdkMediaDownload(mediaId); + assertNotNull(file); + System.out.println(file.getAbsolutePath()); + } }