當前位置:
首頁 > 知識 > 一篇文章教會你用 Java微信語音開發

一篇文章教會你用 Java微信語音開發

-環境、框架

1、伺服器:tomcat8.0.32

2、後台框架:jfinal2.2

3、資料庫:無

4、前端:wechat JS SDK

5、第三方jar:wechat4j、sauronsoftware

一、引入wechat JS SDK

這一步比較簡單,按照微信給的開發文檔一步一步配置就就行,但是步驟比較繁多,利用第三方依賴庫wechat4j,只需幾行代碼即可實現JS JDK的導入。

1、首先是後台Action

public void authWeJs() { String url = getPara("url", null); long timestamp = System.currentTimeMillis() / 1000; String nonceStr = UUID.randomUUID().toString(); String ticket = TokenProxy.jsApiTicket(); String token = TokenProxy.accessToken(); String appid = Config.instance().getAppid(); String sortStr = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "×tamp=" + timestamp + "&url=" + url; String signature = DigestUtils.sha1Hex(sortStr); setAttr("timestamp", timestamp); setAttr("signature", signature); setAttr("token", token); setAttr("appid", appid); setAttr("nonceStr", nonceStr); System.out.println(signature); System.out.println(sortStr); System.out.println(ticket); renderJson(); }

2、前端JS請求Action獲取接入SDK所需的appid、timestamp、nonceStr、signature

wx.config({ debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來, 若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會列印。 appId: json.appid, // 必填,公眾號的唯一標識 timestamp:json.timestamp , // 必填,生成簽名的時間戳 nonceStr: json.nonceStr, // 必填,生成簽名的隨機串 signature:json.signature,// 必填,簽名,見附錄1 jsApiList: [ "checkJsApi", "onMenuShareTimeline", "onMenuShareAppMessage", "onMenuShareQQ", "onMenuShareWeibo", "hideMenuItems", "showMenuItems", "hideAllNonBaseMenuItem", "showAllNonBaseMenuItem", "translateVoice", "startRecord", "stopRecord", "onRecordEnd", "playVoice", "pauseVoice", "stopVoice", "uploadVoice", "downloadVoice", "chooseImage", "previewImage", "uploadImage", "downloadImage", "getNetworkType", "openLocation", "getLocation", "hideOptionMenu", "showOptionMenu", "closeWindow", "scanQRCode", "chooseWXPay", "openProductSpecificView", "addCard", "chooseCard", "openCard" ] // 必填,需要使用的JS介面列表,所有JS介面 });

三、錄製語言

// 1、開始錄製 wx.startRecord(); //2、停止錄製 wx.stopRecord({ success: function (res) { var localId = res.localId; } }); //3、上傳錄製好的音頻文件,注意這裡是上傳的微信伺服器,有效期只有三天,到目前位置一 直都是使用的微信SDK的API,接下來我們需要上傳到自己的伺服器 wx.uploadVoice({ localId: "", // 需要上傳的音頻的本地ID,由stopRecord介面獲得 isShowProgressTips: 1, // 默認為1,顯示進度提示 success: function (res) { var serverId = res.serverId; // 返迴音頻的伺服器端ID } }); // 4、然而JS JDK文檔裡面並沒有告知如何下載多媒體資源(微信文檔的坑),不過沒有關係第三方依賴庫wechat4j提供了 獲取持久化素材的方案,幾行代碼就可以將多媒體資源上傳到自己伺服器,引入wechat4j,只需兩行代碼 MediaFile mediaFile = new MediaFile(); byte[] download = mediaFile.download(media_id); //media_id 就是第三步驟中的serverId // 講byte轉為file public static void byte2File(byte[] buf, String filePath, String fileName) { BufferedOutputStream bos = null; FileOutputStream fos = null; File file = null; try { File dir = new File(filePath); if (!dir.exists() && dir.isDirectory()) { dir.mkdirs(); } file = new File(filePath + File.separator + fileName); fos = new FileOutputStream(file); bos = new BufferedOutputStream(fos); bos.write(buf); } catch (Exception e) { e.printStackTrace(); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } // 第二個坑來了,從微信伺服器下載的音頻文件是amr格式,然而html的audio標籤並不支持amr的播放,這裡我們需要用到 第二個三方依賴庫sauronsoftware把amr轉為MP3格式 public static void changeToMp3(String sourcePath, String targetPath) { File source = new File(sourcePath); File target = new File(targetPath); AudioAttributes audio = new AudioAttributes(); Encoder encoder = new Encoder(); audio.setCodec("libmp3lame"); EncodingAttributes attrs = new EncodingAttributes(); attrs.setFormat("mp3"); attrs.setAudioAttributes(audio); try { encoder.encode(source, target, attrs); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InputFormatException e) { e.printStackTrace(); } catch (EncoderException e) { e.printStackTrace(); } }

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

Java常犯5個錯!
學了Java開發 能給大家多少崗位從事
Java的設計模式-備忘錄模式
JAVA初學者必須掌握的30個基本概念
程序員是如何被外行給逼瘋的……

TAG:java學習吧 |

您可能感興趣

Github開發者簽署公開信,喊話微軟「不作惡」
微軟發布新一代Kinect攝像頭 共AI開發人員使用
傳微軟開發「屏幕充電」Surface手寫筆
舅舅黨爆料稱《JoJo》遊戲正在開發 將登陸Switc
開發者:谷歌為Material材料設計語言發布重大更新並開源組件
微軟為macOS開發大型Git倉庫虛擬文件系統
滲透基礎——使用Go語言開發socks代理工具
Facebook開發用戶信譽評分功能 解決虛假新聞問題
Go Cloud項目開源發布:Go語言將成為雲端應用開發的首選語言?
Telltale開發《怪奇物語》遊戲
純前端開發案例:用 SpreadJS 搭建信息系統軟體開發平台
微軟允許開發者在Microsoft Store中向私人發布應用或遊戲
微軟第一方工作室《極限競速:地平線》開發團隊Playground Games大規模擴招 《神鬼寓言4》開發提速中
微軟第一方工作室《極限競速:地平線》開發團隊Playground Games大規模擴招《神鬼寓言4》開發提速中
Google為開發者推出改進後的語音轉文本服務
使用 aws lambda 開發無伺服器程序
Google 宣布重啟 Dart 編程語言,應對程序開發挑戰
蘋果公司開發新ClassKit框架推出教育程序助力課堂教學
微軟收購GitHub震驚業界:引發開發者信任問題
開發者的福音!英國晶元設計商Imagination公布了一種神經網路軟體開發包