微信開發 - 微信錄音臨時轉永久儲存
阿新 • • 發佈:2018-11-30
標題
最近做開發的時候碰到了這個問題,甲方希望使用者在微信端的錄音能夠一直有效。就是隨時開啟好友的分享就能聽到好友的錄音。可在微信官方開發手冊上查到微信錄音檔案上傳後只能在微信端保留3天時間,3天后就失效了。怎麼辦呢?
1、通過呼叫微信媒體資源下載介面將微信錄音下載到本地
@params String access_token 微信公眾號access_token String serverId 通過錄音上傳介面獲取到的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.php extension 是隨意 起的名字
/**
* @param
* String $filepa 本地amr檔案路徑
* @return
* String 解析後儲存在七牛儲存空間中的mp3遠端地址
*/
function upchange($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) {
return false;
} else {
return $httpUrl.$rand_name;
}
}
function getRandChar__($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 就是 php curl 機制 不懂的可以看下我下面文章機制
$open = fopen('demo.mp3','w');
fwrite($open,$res);
fclose($open);