PHP微信开发之微信录音临时转永久存储

最近做开发的时候碰到了这个问题,甲方希望用户在微信端的录音能够一直有效。就是随时打开好友的分享就能听到好友的录音。可在微信官方开发手册上查到微信录音文件上传后只能在微信端保留3天时间,3天后就失效了。怎么办呢?

1、通过调用微信媒体资源下载接口将微信录音下载到本地

rush:PHP;"> @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

/**

  • @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);

PHP curlHttp

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用