PHP微信开发之微信录音临时转永久存储
最近做开发的时候碰到了这个问题,甲方希望用户在微信端的录音能够一直有效。就是随时打开好友的分享就能听到好友的录音。可在微信官方开发手册上查到微信录音文件上传后只能在微信端保留3天时间,3天后就失效了。怎么办呢?
1、通过调用微信媒体资源下载接口将微信录音下载到本地
@params Stringaccess_token微信公众号access_token StringserverId通过录音上传接口获取到的serverId http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$serverId}
2、从微信方下载到本地的录音文件格式是amr,而微信网页浏览器并不支持amr文件的音频文件播放。所以我们需要将amr转换成
网页能够识别的mp3格式。
怎么转换呢?我找到了一个平台可以支持这种转换,七牛云存储平台.通过七牛云存储我们可以将amr转换成mp3
require("./extension/autoload.php");//官方开发包可在官方下载php版本载入其中的autoload.phpextension是随意起的名字 /** *@param *String$filepa本地amr文件路径 *@return *String解析后存储在七牛存储空间中的mp3远程地址 */ functionupchange($filepa){ $accessKey="七牛accessKey在七牛后台获取"; $secretKey="七牛secretKey在七牛后台获取"; $httpUrl="七牛分配的访问地址在七牛后台获取"; $bucket="存储空间对象bucket在七牛后台创建"; //转码时使用的队列名称 $pipeline='转码队列名称在七牛后台创建'; $auth=new\Qiniu\Auth($accessKey,$secretKey); $rand_name=getRandChar__(6).time().'.mp3'; //要进行转码的转码操作 $fops="avthumb/mp3/ab/64k/ar/22050"; //$fops="mp3"; //可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间 $savekey=Qiniu\base64_urlSafeEncode('kepei:'.$rand_name); $fops=$fops.'|saveas/'.$savekey; $policy=array( 'persistentOps'=>$fops, 'persistentNotifyUrl'=>'http://', ); $uptoken=$auth->uploadToken($bucket,null,3600,$policy); //上传文件的本地路径 $filePath=$filepa; $key=$rand_name; //$key=''; $uploadMgr=new\Qiniu\Storage\UploadManager(); list($ret,$err)=$uploadMgr->putFile($uptoken,$key,$filePath); if($err!==null){ returnfalse; }else{ return$httpUrl.$rand_name; } } functiongetRandChar__($length){ $str=null; $strPol="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"; $max=strlen($strPol)-1; for($i=0;$i<$length;$i++){ $str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数 } return$str; } $amrToMp3=upchange('本地amr文件路径'); //mp3在七牛上的访问地址 var_dump($amrToMp3); /** *如果你希望将这个mp3存储在本地而不是在七牛上,那么你需要在程序上等待几秒,因为这时七牛在转换改amr的格式 */ sleep(10); $res=curlHttp($amrToMp3);//curlHttp就是phpcurl机制不懂的可以看下我下面文章机制 $open=fopen('demo.mp3','w'); fwrite($open,$res); fclose($open);
phpcurlHttp
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。