微信的录音文件上传到微信服务器上,只能保存三天。 因此需要做一个转存到自己服务器,或者七牛云的操作。

转存到自己服务器

  1. 调用微信JSSDK API 录音, 录音结束,上传到微信服务器,获取录音文件的 media_id
  2. 根据 media_id 下载录音文件(amr)格式
  3. 转存到自己服务器(amr需要转码成mp3) 或者 七牛云(有转码功能)

步骤1代码

     ...
/**
* 开始录音[省略了一部分代码]
*/
startRecord: function() {
var that = this;
if (!that._startRecordFlag) {
typeof wx !== "undefined" && wx.startRecord({
success: function(res) {
Logger.log("res", res)
if (res.errMsg == 'startRecord:ok') {
Logger.log("正在开始录音....")
that._startTime = new Date().getTime();
}
}
});
}
}, /**
* 结束录音,并上传
*/
stopRecord: function() {
that._startRecordFlag = false;
typeof wx !== "undefined" && wx.stopRecord({ success: function(res) {
//上传录音
wx.uploadVoice({
localId: res.localId,
isShowProgressTips: 1,
success: function(resUpload) {
//下载录音文件到服务器,转存起来
Model.downloadRecordAudio(resUpload.serverId, function(result) {
console.log(resUpload.serverId, result.path)
that.attachment = result.path;
// that.attachment = resUpload.serverId;
that.stopRecordCallback && that.stopRecordCallback();
})
}
});
}
});
},
...

步骤2代码

<?php
//处理方法,
upload(); //media_id为微信jssdk接口上传后返回的媒体id
function upload(){
$media_id = $_POST["media_id"];
$access_token = getAccessToken(); $path = "./weixinrecord/"; //保存路径,相对当前文件的路径
$outPath = "./php/weixinrecord/"; //输出路径,给show.php 文件用,上一级 if(!is_dir($path)){
mkdir($path);
} //微 信上传下载媒体文件
$url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}"; $filename = "wxupload_".time().rand(1111,9999).".amr";
downAndSaveFile($url,$path."/".$filename); $data["path"] = $outPath.$filename;
$data["msg"] = "download record audio success!";
// $data["url"] = $url; echo json_encode($data);
} //获取Token
function getAccessToken() {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents("./access_token.json"));
if ($data->expire_time < time()) {
$appid = "youappid"; //自己的appid
$appsecret = "youappsecret"; //自己的appsecret
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
$res = json_decode(httpGet($url));
$access_token = $res->access_token;
if ($access_token) {
$data->expire_time = time() + 7000;
$data->access_token = $access_token;
$fp = fopen("./access_token.json", "w");
fwrite($fp, json_encode($data));
fclose($fp);
}
}
else {
$access_token = $data->access_token;
}
return $access_token;
} //HTTP get 请求
function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_URL, $url); $res = curl_exec($curl);
curl_close($curl); return $res;
} //根据URL地址,下载文件
function downAndSaveFile($url,$savePath){
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$fp = fopen($savePath, 'a');
fwrite($fp, $img);
fclose($fp);
}
?>

步骤3代码【略】

目前没有使用七牛云,因此该部分代码,参考七牛云官网

【微信JSSDK】PHP版微信录音文件下载的更多相关文章

  1. 微信 JSSDK .NET版

    /*因为官方 微信 JSSDK 只有PHP java版本的 我自己照着PHP的翻译过来的,可供参考.欢迎指正*/ [csharp] view plaincopy在CODE上查看代码片派生到我的代码片 ...

  2. 读取PC版微信数据库(电脑版微信数据库)内容

    原始网址   https://www.cnblogs.com/Charltsing/p/WeChatPCdb.html 1.PC版微信的密钥是32位byte,不同于安卓版(7位字符串) 2.通过OD或 ...

  3. 微信JSSDK与录音相关的坑

    欢迎各位转载, 以让微信团队重视这些恼人的BUG. 请注明出处微信JSSDK与录音相关的坑 by lzl124631x 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷 ...

  4. 微信公众平台开发 微信JSSDK开发

    根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过) 2.引 ...

  5. 微信JS-SDK

    <div class="lbox_close wxapi_form"> <h3 id="menu-basic">基础接口</h3& ...

  6. 微信JS-SDK 接口调用与 php 遇到的坑

    问题:config:invalid signature一直爆这个错误 解决: 看我把这些坑都总结了一下:要命的invalid signature. https://segmentfault.com/q ...

  7. 微信js-sdk调用

    之前在做微信的时候,在微信支付还有调起微信扫一扫的时候,用过js-sdk.最近,被几个做前端的同学问到了具体的流程,想想,还是写下来好点.     微信js-sdk,是微信提供给网页开发设计者使用的, ...

  8. 微信jssdk分享功能开发

    先理解下分享: 在app端 ,经常能看见 分享按钮的功能,(分享给朋友,分享到朋友圈,分享到QQ空间等等): https://open.weixin.qq.com/(微信开发平台),这需要到开放平台注 ...

  9. 微信JS-SDK官方示例程序

    示例地址:http://203.195.235.76/jssdk/ /* * 注意: * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能 ...

  10. 【转】微信jssdk录音功能开发记录

    转自:http://www.cnblogs.com/liujunyang/p/4962423.html#undefined 0.需求描述 在微信浏览器内打开的页面,制作一个按钮,用户按住按钮后开始录音 ...

随机推荐

  1. NGINX 加载动态模块(NGINX 1.9.11开始增加加载动态模块支持)

    NGINX 1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展.目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块. tinywan@tinyw ...

  2. Ribbon使用Hystrix

    1.导入依赖spring-cloud-starter-hystrix <dependency> <groupId>org.springframework.cloud</g ...

  3. 当Elasticsearch遇见Kafka

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由michelmu发表于云+社区专栏 Elasticsearch作为当前主流的全文检索引擎,除了强大的全文检索能力和高扩展性之外,对多种 ...

  4. N最短路径分词

    N最短路径算法是一种基于词典的分词算法. 每个句子将生成一个有向无环图, 每个字作为图的一个定点, 边代表可能的分词. 在上图中, 边的起点为词的第一个字, 边的终点为词尾的下一个字. 边1表示&qu ...

  5. Scala面向对象编程与类型系统

    Scala支持面向对象编程, 其面向对象特性与Java有共同之处并添加了很多新的特性. 类定义 scala使用class关键字定义类: class MyComplex(real0:Double, im ...

  6. MONGODB(四)——DBObject与JavaBean转换

    一.DBObject 转为 JavaBean /** * 将实体Bean对象转换成DBObject * */ public static <T> DBObject beanToDBObje ...

  7. 使用 Immutable Subject 来驱动 Angular 应用

    现状 最近在重构手上的一个 Angular 项目,之前是用的自己写的一个仿 Elm 架构的库来进行的状态管理,期间遇到了这些痛点: 样板代码太多 异步处理太过繁琐 需要单独维护一个 npm 包 其中, ...

  8. SQL Server 数据类型映射(转载)

    SQL Server 数据类型映射 SQL Server 和 .NET Framework 基于不同的类型系统. 例如,.NET Framework Decimal 结构的最大小数位数为 28,而 S ...

  9. java根据年月显示每周

    一.页面效果 1.展示7月份的所有周. 2.当前时间2018.08.02  ,  显示到本周. 二.前端代码 1.显示层的代码 <span id="weekyear"> ...

  10. html页面背景设定相关

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...