【微信JSSDK】PHP版微信录音文件下载
微信的录音文件上传到微信服务器上,只能保存三天。 因此需要做一个转存到自己服务器,或者七牛云的操作。
转存到自己服务器
- 调用微信JSSDK API 录音, 录音结束,上传到微信服务器,获取录音文件的 media_id
- 根据 media_id 下载录音文件(amr)格式
- 转存到自己服务器(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版微信录音文件下载的更多相关文章
- 微信 JSSDK .NET版
/*因为官方 微信 JSSDK 只有PHP java版本的 我自己照着PHP的翻译过来的,可供参考.欢迎指正*/ [csharp] view plaincopy在CODE上查看代码片派生到我的代码片 ...
- 读取PC版微信数据库(电脑版微信数据库)内容
原始网址 https://www.cnblogs.com/Charltsing/p/WeChatPCdb.html 1.PC版微信的密钥是32位byte,不同于安卓版(7位字符串) 2.通过OD或 ...
- 微信JSSDK与录音相关的坑
欢迎各位转载, 以让微信团队重视这些恼人的BUG. 请注明出处微信JSSDK与录音相关的坑 by lzl124631x 最近一直在做微信JSSDK与录音相关的功能开发, 遇到了各种奇尺大坑, 时不时冷 ...
- 微信公众平台开发 微信JSSDK开发
根据微信开发文档步骤如下: 1.先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. JS接口安全域名设置 mi.com(前面不用带www/http,域名必须备案过) 2.引 ...
- 微信JS-SDK
<div class="lbox_close wxapi_form"> <h3 id="menu-basic">基础接口</h3& ...
- 微信JS-SDK 接口调用与 php 遇到的坑
问题:config:invalid signature一直爆这个错误 解决: 看我把这些坑都总结了一下:要命的invalid signature. https://segmentfault.com/q ...
- 微信js-sdk调用
之前在做微信的时候,在微信支付还有调起微信扫一扫的时候,用过js-sdk.最近,被几个做前端的同学问到了具体的流程,想想,还是写下来好点. 微信js-sdk,是微信提供给网页开发设计者使用的, ...
- 微信jssdk分享功能开发
先理解下分享: 在app端 ,经常能看见 分享按钮的功能,(分享给朋友,分享到朋友圈,分享到QQ空间等等): https://open.weixin.qq.com/(微信开发平台),这需要到开放平台注 ...
- 微信JS-SDK官方示例程序
示例地址:http://203.195.235.76/jssdk/ /* * 注意: * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能 ...
- 【转】微信jssdk录音功能开发记录
转自:http://www.cnblogs.com/liujunyang/p/4962423.html#undefined 0.需求描述 在微信浏览器内打开的页面,制作一个按钮,用户按住按钮后开始录音 ...
随机推荐
- openshift pod对外访问网络解析
openshift封装了k8s,在网络上结合ovs实现了多租户隔离,对外提供服务时报文需要经过ovs的tun0接口.下面就如何通过tun0访问pod(172.30.0.0/16)进行解析(下图来自理解 ...
- Spring Boot + Spring Cloud 构建微服务系统(六):熔断监控集群(Turbine)
Spring Cloud Turbine 上一章我们集成了Hystrix Dashboard,使用Hystrix Dashboard可以看到单个应用内的服务信息,显然这是不够的,我们还需要一个工具能让 ...
- spring AOP 之二:@AspectJ注解的3种配置
@AspectJ相关文章 <spring AOP 之二:@AspectJ注解的3种配置> <spring AOP 之三:使用@AspectJ定义切入点> <spring ...
- Filebeat+Kafka+Logstash+ElasticSearch+Kibana 日志采集方案
前言 Elastic Stack 提供 Beats 和 Logstash 套件来采集任何来源.任何格式的数据.其实Beats 和 Logstash的功能差不多,都能够与 Elasticsearch 产 ...
- 整合Spring和SpringMVC
1.Spring容器和SpringMVC容器的关系 Spring容器是一个父容器,SpringMVC容器是一个子容器,它继承自Spring容器.因此,在SpringMVC容器中,可以访问到Spring ...
- Hive基础之Hive与关系型数据库的比较
Hive与关系型数据库的比较 使用Hive的CTL(命令行接口)时,你会感觉它很像是在操作关系型数据库,但是实际上,Hive和关系型数据库有很大的不同. 1)Hive和关系型数据库 ...
- 【转】 Apk文件及其编译过程
Apk文件概述 Android系统中的应用程序安装包都是以apk为后缀名,其实apk是Android Package的缩写,即android安装包. 注:apk包文件其实就是标准的zip文件,可以直接 ...
- layui 文字滚动
将消息标题滚动 上面是效果 <li class="layui-nav-item"> <div class="layui-carousel" i ...
- Java基础——Oracle(四)
一.Sql * plus 常用命令 1.关于登录,连接的几个命令 1) conn[nect] //例 conn system/manager 用法 conn 用户名/密码 @网络服务名 (as sy ...
- Java中变量之局部变量、本类成员变量、父类成员变量的访问方法
变量:局部变量.本类成员变量.父类成员变量 如何访问:如果变量名相同,则采用就近原则,哪个变量离所要调用的访问最近,那就么就输出,优先顺序为:局部变量 > 本类成员变量 > 父类成员变量 ...