• 【微信JSSDK】PHP版微信录音文件下载


    微信的录音文件上传到微信服务器上,只能保存三天。 因此需要做一个转存到自己服务器,或者七牛云的操作。

    转存到自己服务器

    1. 调用微信JSSDK API 录音, 录音结束,上传到微信服务器,获取录音文件的 media_id
    2. 根据 media_id 下载录音文件(amr)格式
    3. 转存到自己服务器(amr需要转码成mp3) 或者 七牛云(有转码功能)

    步骤1代码

         ...
          /**
           * 开始录音[省略了一部分代码]
           */
          startRecord: function() {
            var that = this;
            if (!that._startRecordFlag) {
              typeof wx !== "undefined" && wx.startRecord({
                success: function(res) {
                  Logger.log("res", res)
                  if (res.errMsg == 'startRecord:ok') {
                    Logger.log("正在开始录音....")
                    that._startTime = new Date().getTime();
                  }
                }
              });
            }
          },
    
          /**
           * 结束录音,并上传
           */
          stopRecord: function() {
            that._startRecordFlag = false;
            typeof wx !== "undefined" && wx.stopRecord({
              
              success: function(res) {
                //上传录音
                wx.uploadVoice({
                  localId: res.localId,
                  isShowProgressTips: 1,
                  success: function(resUpload) {
                    //下载录音文件到服务器,转存起来
                    Model.downloadRecordAudio(resUpload.serverId, function(result) {
                      console.log(resUpload.serverId, result.path)
                      that.attachment = result.path;
                      // that.attachment = resUpload.serverId;
                      that.stopRecordCallback && that.stopRecordCallback();
                    })
                  }
                });
              }
            });
          },
    ...
    

    步骤2代码

    <?php
    //处理方法,
    upload();
    
    //media_id为微信jssdk接口上传后返回的媒体id
    function upload(){
        $media_id = $_POST["media_id"];
        $access_token = getAccessToken();
        
        $path = "./weixinrecord/";   //保存路径,相对当前文件的路径
        $outPath = "./php/weixinrecord/";  //输出路径,给show.php 文件用,上一级
        
        if(!is_dir($path)){
            mkdir($path);
        }
        
        //微	信上传下载媒体文件
        $url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}";
        
        $filename = "wxupload_".time().rand(1111,9999).".amr";
        downAndSaveFile($url,$path."/".$filename);
        
        $data["path"] = $outPath.$filename;
        $data["msg"] = "download record audio success!";
        // $data["url"] = $url;
        
        echo json_encode($data);
    }
    
    //获取Token
    function getAccessToken() {
        // 	access_token 应该全局存储与更新,以下代码以写入到文件中做示例
        $data = json_decode(file_get_contents("./access_token.json"));
        if ($data->expire_time < time()) {
            $appid = "youappid";  //自己的appid
            $appsecret = "youappsecret";  //自己的appsecret
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
            $res = json_decode(httpGet($url));
            $access_token = $res->access_token;
            if ($access_token) {
                $data->expire_time = time() + 7000;
                $data->access_token = $access_token;
                $fp = fopen("./access_token.json", "w");
                fwrite($fp, json_encode($data));
                fclose($fp);
            }
        }
        else {
            $access_token = $data->access_token;
        }
        return $access_token;
    }
    
    //HTTP get 请求
    function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        curl_setopt($curl, CURLOPT_URL, $url);
        
        $res = curl_exec($curl);
        curl_close($curl);
        
        return $res;
    }
    
    //根据URL地址,下载文件
    function downAndSaveFile($url,$savePath){
        ob_start();
        readfile($url);
        $img  = ob_get_contents();
        ob_end_clean();
        $size = strlen($img);
        $fp = fopen($savePath, 'a');
        fwrite($fp, $img);
        fclose($fp);
    }
    ?>
    

    步骤3代码【略】

    目前没有使用七牛云,因此该部分代码,参考七牛云官网

  • 相关阅读:
    拍皮球 (Java实现)
    余弦 (java实现)
    循环输出
    从1输出n位数字
    数值的整数次方
    旋转数组的最小数字
    简单使用栈实现队列
    重建二叉树
    链表逆序输出
    替代空格
  • 原文地址:https://www.cnblogs.com/zhongxia/p/5917163.html
Copyright © 2020-2023  润新知