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 686c86f20..998939ca8 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 2ceec219f..4b852c03f 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 class WxMpMaterialServiceImpl implements WxMpMaterialService {
"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 442f0305f..5963af929 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 @@ public interface 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 024697cb7..6d14b336f 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 List mediaIdsToDownload = new ArrayList<>();
+ // 以下为高清语音接口的测试
+ private List voiceMediaIdsToDownload = new ArrayList<>();
@DataProvider
public Object[][] mediaFiles() {
@@ -289,6 +291,11 @@ public class WxMpMaterialServiceImplTest {
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 class WxMpMaterialServiceImplTest {
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());
+ }
}