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


Posted in PHP onJanuary 26, 2018

最近做开发的时候碰到了这个问题,甲方希望用户在微信端的录音能够一直有效。就是随时打开好友的分享就能听到好友的录音。可在微信官方开发手册上查到微信录音文件上传后只能在微信端保留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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
一个取得文件扩展名的函数
Oct 09 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
Nov 24 PHP
php数组使用规则分析
Feb 27 PHP
CodeIgniter辅助之第三方类库third_party用法分析
Jan 20 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
Oct 29 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
May 28 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
Laravel服务容器绑定的几种方法总结
Jun 14 PHP
PHP CURL与java http使用方法详解
Jan 26 #PHP
php实现mysql连接池效果实现代码
Jan 25 #PHP
php使用imagecopymerge()函数创建半透明水印
Jan 25 #PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 #PHP
PHP开发之用微信远程遥控服务器
Jan 25 #PHP
php实现统计二进制中1的个数算法示例
Jan 23 #PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 #PHP
You might like
PHP自动更新新闻DIY
2006/10/09 PHP
支持oicq头像的留言簿(二)
2006/10/09 PHP
PHP 替换模板变量实现步骤
2009/08/24 PHP
php中利用explode函数分割字符串到数组
2014/02/08 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
基于PHP实现堆排序原理及实例详解
2020/06/19 PHP
js调用flash的效果代码
2008/04/26 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
深入理解JavaScript系列(39):设计模式之适配器模式详解
2015/03/04 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
node.js从数据库获取数据
2016/05/08 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
除Console.log()外更多的Javascript调试命令
2018/01/24 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
如何使用three.js 制作一个三维的推箱子游戏
2020/07/29 Javascript
Python利用itchat对微信中好友数据实现简单分析的方法
2017/11/21 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Python Django框架url反向解析实现动态生成对应的url链接示例
2019/10/18 Python
Python如何实现邮件功能
2020/05/27 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
领导证婚人证婚词
2014/01/13 职场文书
中等生评语大全
2014/05/04 职场文书
国庆节演讲稿
2014/05/27 职场文书
住房租房协议书
2014/08/20 职场文书
学校运动会通讯稿
2015/07/18 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书