diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java index 19e6de44..31ce6b59 100644 --- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java +++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpMediaService.java @@ -19,6 +19,7 @@ public interface WxCpMediaService { String MEDIA_GET_URL = "https://qyapi.weixin.qq.com/cgi-bin/media/get"; String MEDIA_UPLOAD_URL = "https://qyapi.weixin.qq.com/cgi-bin/media/upload?type="; String IMG_UPLOAD_URL = "https://qyapi.weixin.qq.com/cgi-bin/media/uploadimg"; + String JSSDK_MEDIA_GET_URL = "https://qyapi.weixin.qq.com/cgi-bin/media/get/jssdk"; /** *
@@ -59,6 +60,21 @@ public interface WxCpMediaService {
*/
File download(String mediaId) throws WxErrorException;
+ /**
+ *
+ * 获取高清语音素材.
+ * 可以使用本接口获取从JSSDK的uploadVoice接口上传的临时语音素材,格式为speex,16K采样率。该音频比上文的临时素材获取接口(格式为amr,8K采样率)更加清晰,适合用作语音识别等对音质要求较高的业务。
+ * 请求方式:GET(HTTPS)
+ * 请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/get/jssdk?access_token=ACCESS_TOKEN&media_id=MEDIA_ID
+ * 仅企业微信2.4及以上版本支持。
+ * 文档地址:https://work.weixin.qq.com/api/doc#90000/90135/90255
+ *
+ *
+ * @param mediaId 媒体id
+ * @return 保存到本地的临时文件
+ */
+ File getJssdkFile(String mediaId) throws WxErrorException;
+
/**
*
* 上传图片.
@@ -69,7 +85,7 @@ public interface WxCpMediaService {
*
*
* @param file 上传的文件对象
- * @return 返回图片url
+ * @return 返回图片url
*/
String uploadImg(File file) throws WxErrorException;
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java
index c3dc4774..7a3dc444 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImpl.java
@@ -48,6 +48,14 @@ public class WxCpMediaServiceImpl implements WxCpMediaService {
MEDIA_GET_URL, "media_id=" + mediaId);
}
+ @Override
+ public File getJssdkFile(String mediaId) throws WxErrorException {
+ return this.mainService.execute(
+ BaseMediaDownloadRequestExecutor.create(this.mainService.getRequestHttp(),
+ this.mainService.getWxCpConfigStorage().getTmpDirFile()),
+ JSSDK_MEDIA_GET_URL, "media_id=" + mediaId);
+ }
+
@Override
public String uploadImg(File file) throws WxErrorException {
final WxMediaUploadResult result = this.mainService
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java
index d7242a77..70873c49 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/api/impl/WxCpMediaServiceImplTest.java
@@ -36,7 +36,8 @@ public class WxCpMediaServiceImplTest {
public Object[][] mediaData() {
return new Object[][]{
new Object[]{WxConsts.MediaFileType.IMAGE, TestConstants.FILE_JPG, "mm.jpeg"},
- new Object[]{WxConsts.MediaFileType.VOICE, TestConstants.FILE_MP3, "mm.mp3"},//{"errcode":301017,"errmsg":"voice file only support amr like myvoice.amr"}
+ //new Object[]{WxConsts.MediaFileType.VOICE, TestConstants.FILE_MP3, "mm.mp3"},
+ // {"errcode":301017,"errmsg":"voice file only support amr like myvoice.amr"}
new Object[]{WxConsts.MediaFileType.VOICE, TestConstants.FILE_AMR, "mm.amr"},
new Object[]{WxConsts.MediaFileType.VIDEO, TestConstants.FILE_MP4, "mm.mp4"},
new Object[]{WxConsts.MediaFileType.FILE, TestConstants.FILE_JPG, "mm.jpeg"}
@@ -47,8 +48,9 @@ public class WxCpMediaServiceImplTest {
public void testUploadMedia(String mediaType, String fileType, String fileName) throws WxErrorException, IOException {
try (InputStream inputStream = ClassLoader.getSystemResourceAsStream(fileName)) {
WxMediaUploadResult res = this.wxService.getMediaService().upload(mediaType, fileType, inputStream);
- assertNotNull(res.getType());
- assertNotNull(res.getCreatedAt());
+ assertThat(res).isNotNull();
+ assertThat(res.getType()).isNotEmpty();
+ assertThat(res.getCreatedAt()).isGreaterThan(0);
assertTrue(res.getMediaId() != null || res.getThumbMediaId() != null);
if (res.getMediaId() != null) {
@@ -70,9 +72,9 @@ public class WxCpMediaServiceImplTest {
}
@Test(dependsOnMethods = {"testUploadMedia"}, dataProvider = "downloadMedia")
- public void testDownloadMedia(String media_id) throws WxErrorException {
- File file = this.wxService.getMediaService().download(media_id);
- assertNotNull(file);
+ public void testDownload(String mediaId) throws WxErrorException {
+ File file = this.wxService.getMediaService().download(mediaId);
+ assertThat(file).isNotNull();
System.out.println(file);
}
@@ -82,4 +84,11 @@ public class WxCpMediaServiceImplTest {
String res = this.wxService.getMediaService().uploadImg(new File(url.getFile()));
assertThat(res).isNotEmpty();
}
+
+ @Test
+ public void testGetJssdkFile() throws WxErrorException {
+ File file = this.wxService.getMediaService().getJssdkFile("....");
+ assertThat(file).isNotNull();
+ System.out.println(file);
+ }
}