很长一段时间没有更新博客了,是因为最近比较忙,
接了2个项目实在抽不开身,这2天终于将项目交接了,
终于可以更新2篇文章,还是往常的套路,我们还是以
实战为主,分享实际案例,希望能够帮助到你们!
当然了你们可以更好的建议我分享一些什么内容给你们!
说正题,相信大家有用过微信公众号的语音录制功能,
我们要做的是,如何将录制的语音上传至微信平台,然后
再将语音本地持久化。
1、首先使用微信语音录制接口,获取signPackage在PHP里以前在微信地理定位有讲到,还是老方法将获取到的值返回,必要的!
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script> //语音 wx.config({ debug: false, appId: '<?php echo $signPackage["appId"];?>', timestamp: '<?php echo $signPackage["timestamp"];?>', nonceStr: '<?php echo $signPackage["nonceStr"];?>', signature: '<?php echo $signPackage["signature"];?>', jsApiList: [ 'startRecord', 'stopRecord', 'onVoiceRecordEnd', 'playVoice', 'stopVoice', 'uploadVoice', ] });
2、开始录制语音
wx.startRecord();
3、获取localId
wx.onVoiceRecordEnd({ // 录音时间超过一分钟没有停止的时候会执行 complete 回调 complete: function (res) { var localId = res.localId; } });
4、上传语音
wx.uploadVoice({ localId: '', // 需要上传的音频的本地ID,由stopRecord接口获得 isShowProgressTips: 1, // 默认为1,显示进度提示 success: function (res) { var serverId = res.serverId; // 返回音频的服务器端ID } });
上述这几点大家看下文档其实都会做,很简单,重点是语音上传之后,我们如何将文件本地化。
5、文件本地化接口地址
//token和serverID不用多说,获取token的方法不必多介绍,serverid在上传之后会返回。 $url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$token}&media_id={$post['serverId']}";
6、http get方法
function httpGet($url){ $ch = curl_init($url); curl_setopt($ch,CURLOPT_HEADER,0); curl_setopt($ch,CURLOPT_NOBODY,0); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $package = curl_exec($ch); $http_info = curl_getinfo($ch); curl_close($ch); $res = array_merge(array_merge(array('header' => $http_info)),array('body' => $package)); return $res; }
7、保存下载的文件的方法
function saveWeixinFile($file_name,$file_content){ $local_file = fopen($file_name,'w'); if(false !== $local_file){ if(false !== fwrite($local_file,$file_content)){ fclose($local_file); }else{ return false; } }else{ return false; } }
8、调用下载和保存的方法
$res = httpGet($url); //文件保存路径 $file_name = ROOT_PATH . 'public/uploads/audio/'.$post['serverId'].'.mp3'; $save = saveWeixinFile($file_name,$res['body']); if(false === $save){ exit('音频文件本地化失败'); }
9、保存下来的音频文件为amr格式的,大家懂得audio是播放不了的,我们需要进行转码,而利用程序转码我们可以使用七牛云提供的转码存储,资源o s s化是必须的嘛。
七牛云这里就不做介绍了吧,直接帖代码,七牛云封装的上传转码类
<?php namespace app\extra; use Qiniu\Auth; use Qiniu\Storage\BucketManager; use Qiniu\Storage\UploadManager; class Qiniu{ private $accessKey = ''; private $secretKey = ''; private $bucket = ''; public function uploads($media_id,$file_path){ $auth = new Auth($this->accessKey,$this->secretKey); $bucket = trim($this->bucket); $savekey = \Qiniu\base64_urlSafeEncode($bucket.':'.$media_id.'.mp3'); //设置转码参数 $fops = "avthumb/mp3/ab/320k/ar/44100/acodec/libmp3lame"; $fops = $fops.'|saveas/'.$savekey; $policy = array( 'persistentOps' => $fops ); $up_token = $auth->uploadToken($bucket, null, 3600, $policy); $key = $media_id.'.mp3'; //七牛云中保存的amr文件名 $uploadMgr = new UploadManager(); list($ret, $err) = $uploadMgr->putFile($up_token, $key, $file_path); if ($err !== null) { return false; }else { //此时七牛云中同一段音频文件有amr和MP3两个格式的两个文件同时存在 $bucketMgr = new BucketManager($auth); //为节省空间,删除amr格式文件 $bucketMgr->delete($bucket, $key); return $ret['key']; } } }
10、调用
$up_audio = $qiniu->uploads($post['serverId'],$file_name);
11、处理商户业务逻辑
整理下业务逻辑
1、首先调用微信语音录制接口录制语音,
2、然后上传录制好的语音文件
3、a ja x将serverId传入后台使用http get方式下载语音文件,使文件本地化
4、本地化文件不能使用,我们使用七牛云存储将文件上传至云空间并转码返回能够播放的mp3文件地址。
问题:为何要将文件上传至七牛,犹豫http get下载的语音文件格式在h5中不能播放我们需要转码,第二是为了节约服务器资源。
未经允许不得转载:任鹏个人博客 » 微信开发之录制语音本地化上传至七牛云并将amr转码为mp3
最新评论
Forex wiki. https://lt.forex-stock-bitcoin-brokers.com
Magnificent items from you, man. I have take note your stuff
Following on from the 3rd March Meetings held by economic de
It is remarkable, rather valuable message dfgdlfg2131.32
一般都会有一个沙盒期的,过了沙盒期就会慢慢放出来
百度不收录是应为是新站的原因吗?
The spike in consumer prices that left inflation at a four-d