使用微信jssdk录音、图片上传及应用笔记

李鹏11 15,850 次浏览

思路:

1、使用jssdk录制声音后上传到腾讯服务器(有效期为三天,只能传到自己的服务器,但是我们的资源是使用的七牛云存储,只能移到七牛云存储)。

2、使用微信上传下载多媒体文件接口将文件下载到我们自己的服务器。

3、使用curl将文件上传到七牛云存储。

步骤1:忽略,详见 微信JS-SDK开发文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

步骤2:

//处理方法,

//media_id为微信jssdk接口上传后返回的媒体id

    public function upload(){
        $media_id = $_POST[‘media_id’];
        $access_token = $this->getAccessToken();

       //微信上传下载媒体文件
        $url = "http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$media_id}";
        $fileInfo = $this->downloadWeixinFile($url);
        $type = $this->header_byte($fileInfo[‘header’][‘content_type’]);
        $filename = "wxupload_".time().rand(1111,9999).".".$type;
        $this->saveWeixinFile("./Runtime/Wxupload/".$filename, $fileInfo[“body”]);

 

//如果只需上传到自己服务器,这一步不需执行。
        $qnfile = $this->uploadfile($filename);

 

        $data[‘error’] = 200;
        $data[‘img’] = $filename;
        $data[‘qnfile’] = $qnfile;
        $data[‘msg’] = "提交成功";

        echo json_encode($data);
    }
    public function getAccessToken() {
        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
        $data = json_decode(file_get_contents("./Main/Lib/Jssdk/access_token.json"));
        if ($data->expire_time < time()) {
            $appid = C('API');
            $appsecret = C('AppSecret');
            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
            $res = json_decode($this->httpGet($url));
            $access_token = $res->access_token;
            if ($access_token) {
                $data->expire_time = time() + 7000;
                $data->access_token = $access_token;
                $fp = fopen("./Main/Lib/JSSDK/access_token.json", "w");
                fwrite($fp, json_encode($data));
                fclose($fp);
            }
        } else {
            $access_token = $data->access_token;
        }
        return $access_token;
    }
    public 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;
    }

    function downloadWeixinFile($url){
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_NOBODY, 0);    //只取body头
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $package = curl_exec($ch);
        $httpinfo = curl_getinfo($ch);
        curl_close($ch);
        $imageAll = array_merge(array('header' => $httpinfo), array('body' => $package));
        return $imageAll;
    }

    function saveWeixinFile($filename, $filecontent){
        $local_file = fopen($filename, 'w');
        if (false !== $local_file){
            if (false !== fwrite($local_file, $filecontent)) {
                fclose($local_file);
            }
        }
    }

    //文件格式
    function header_byte($type){
        switch ($type){
            case 'audio/x-speex-with-header-byte; rate=16000':
                $tp = "speex";
                break;

//其他文件格式自行添加

            default:
                $tp = "notype";
                break;

        }
        return $tp;
    }

//由服务器上传到七牛,这里可以根据需要进行具体修改
    function uploadfile($file){

        $url = "/Wap/Qiniu/uploadqiniu";
        $urlfile = "@".dirname(__FILE__)."/../../../../Runtime/Wxupload/".$file;
        $data = array('file'=>$urlfile);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        $output = curl_exec($ch);
        curl_close($ch);
        return $output;
    }

步骤3:忽略,自行开发。

 

 
 
 
 

11 thoughts on “ 使用微信jssdk录音、图片上传及应用笔记 ”

  1. 香港虚拟主机

    嗯挺不错的,支持支持!

  2. soda水舞

    你好~请教一个上传到七牛的问题:上传到七牛后,是否需要将保存自己服务器的文件删除?我用的BAE,不知道是否有这个必要,感觉BAE应该是有空间限制的。

    1. 许式伟

      可以删除

    2. 站长:蜗牛

      不好意思,我刚看到你的留言,关于你的问题,文件上传到七牛后,保存在自己服务器上的文件类似于一个备份文件,是可以删除的,你可以对相关的机制设计一下。

      1. soda水舞

        多谢,已经搞定删除了。

        1. 站长:蜗牛

          ok

  3. 热度分享

    微信jssdk 上传的语音media_id 跟我的控制器不在同一个目录中,我想请问下 这样我 $_POST 是获取不到 语音的media id

  4. 电缆桥架

    分享了

  5. 电缆支架

    谢谢分享

  6. 希腊签证

    自行开发[可爱]

  7. well-sheng

    请问怎么下载呢

     

发表评论

? razz sad evil ! smile oops grin eek shock ??? cool lol mad twisted roll wink idea arrow neutral cry mrgreen