微信网页端录音功能,尝试了其他方法,发现都不行,微信网页端只能依靠微信JSSDK实现录音功能。

安装微信JSSDK

 npm install weixin-js-sdk

通过config接口注入权限验证配置

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});

signature获取

1.获取 access_token(其中 grant_type 值为 client_credential

微信JSSDK录音功能_微信

2.用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):

https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

微信JSSDK录音功能_回调函数_02

3.获取签名

微信JSSDK录音功能_回调函数_03

 jsApiList填写

接口列表中选取所需要用的接口以逗号隔开填写在[]里面,例如,

 jsApiList: ['startRecord', 'stopRecord', 'playVoice', 'stopVoice', 'uploadVoice', "translateVoice"]

验证

通过ready接口处理成功验证

wx.ready(function(){
  // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

通过error接口处理失败验证

wx.error(function(res){
  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
});
接口调用说明

所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:

  1. success:接口调用成功时执行的回调函数。
  2. fail:接口调用失败时执行的回调函数。
  3. complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。
  4. cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。
  5. trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。

备注:不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回。

以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:

调用成功时:"xxx:ok" ,其中xxx为调用的接口名

用户取消时:"xxx:cancel",其中xxx为调用的接口名

调用失败时:其值为具体错误信息

开始录音
wx.startRecord();
停止录音
wx.stopRecord({
  success: function (res) {
    var localId = res.localId;//音频的本地ID
  }
});


播放语音
wx.playVoice({
  localId: '' // 需要播放的音频的本地ID,由stopRecord接口获得
});


暂停播放
wx.pauseVoice({
  localId: '' // 需要暂停的音频的本地ID,由stopRecord接口获得
});


停止播放
wx.stopVoice({
  localId: '' // 需要停止的音频的本地ID,由stopRecord接口获得
});


上传语音
wx.uploadVoice({
  localId: '', // 需要上传的音频的本地ID,由stopRecord接口获得
  isShowProgressTips: 1, // 默认为1,显示进度提示
  success: function (res) {
    var serverId = res.serverId; // 返回音频的服务器端ID
 
  }
});


下载语音
wx.downloadVoice({
  serverId: '', // 需要下载的音频的服务器端ID,由uploadVoice接口获得
  isShowProgressTips: 1, // 默认为1,显示进度提示
  success: function (res) {
    var localId = res.localId; // 返回音频的本地ID
  }
});


识别音频并返回识别结果
wx.translateVoice({
  localId: '', // 需要识别的音频的本地Id,由录音相关接口获得
  isShowProgressTips: 1, // 默认为1,显示进度提示
  success: function (res) {
    alert(res.translateResult); // 语音识别的结果
  }
});