zoukankan      html  css  js  c++  java
  • 夺命雷公狗---微信开发20----编写程序进行上传多媒体文件

    我们在这个测试的时候要注意下php版本的问题,php版本要5.4以上才可以,亲测5.3失败

    第一步获取token,创建一个get_token.php的文件,代码如下:

    <?php
        //原理,就是使用curl 函数,发出http请求,获取access_token
        $appid = 'wxed89d8f74fa6fc51';
        $appsecret = 'd4624c36b6795d1d99dcf0547af5443d';
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
    
        //这里我们将使用PHP的curl函数
        //初识化
        $ch = curl_init();
        //设置变量
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        //执行
        $output = curl_exec($ch);
        curl_close($ch);
        //对返回的结果进行json解码
        $jsoninfo = json_decode($output, true);
        $access_token = $jsoninfo['access_token'];

    然后写一个方法将请求的内容放进函数中,创建一个common.php的模版文件进行统一管理

    <?php
        $tmp_arr = array(
        'text' => <<<XML
    <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[%s]]></Content>
    <FuncFlag>0</FuncFlag>
    </xml>
    XML
    ,
        'image'=> <<<XML
    <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[image]]></MsgType>
    <Image>
    <MediaId><![CDATA[%s]]></MediaId>
    </Image>
    </xml>
    XML
    ,
        'voice'=> <<<XML
    <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[voice]]></MsgType>
    <Voice>
    <MediaId><![CDATA[%s]]></MediaId>
    </Voice>
    </xml>
    XML
    ,
        'music'=> <<<XML
    <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[music]]></MsgType>
    <Music>
    <Title><![CDATA[%s]]></Title>
    <Description><![CDATA[%s]]></Description>
    <MusicUrl><![CDATA[%s]]></MusicUrl>
    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
    </Music>
    </xml>
    XML
    ,
        'singlenews'=> <<<XML
    <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
    <ArticleCount>1</ArticleCount>
    <Articles>
    <item>
    <Title><![CDATA[%s]]></Title> 
    <Description><![CDATA[%s]]></Description>
    <PicUrl><![CDATA[%s]]></PicUrl>
    <Url><![CDATA[%s]]></Url>
    </item>
    </Articles>
    </xml> 
    XML
    ,
        'newses'=> <<<XML
    <xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
    <ArticleCount>4</ArticleCount>
    <Articles>
    <item>
    <Title><![CDATA[%s]]></Title> 
    <Description><![CDATA[%s]]></Description>
    <PicUrl><![CDATA[%s]]></PicUrl>
    <Url><![CDATA[%s]]></Url>
    </item>
    <item>
    <Title><![CDATA[%s]]></Title> 
    <Description><![CDATA[%s]]></Description>
    <PicUrl><![CDATA[%s]]></PicUrl>
    <Url><![CDATA[%s]]></Url>
    </item>
    <item>
    <Title><![CDATA[%s]]></Title> 
    <Description><![CDATA[%s]]></Description>
    <PicUrl><![CDATA[%s]]></PicUrl>
    <Url><![CDATA[%s]]></Url>
    </item>
    <item>
    <Title><![CDATA[%s]]></Title> 
    <Description><![CDATA[%s]]></Description>
    <PicUrl><![CDATA[%s]]></PicUrl>
    <Url><![CDATA[%s]]></Url>
    </item>
    </Articles>
    </xml> 
    XML
    );
        
        
        //我把请求内容封装到函数中
        function http_request($url, $data=null){
            //我们使用curl函数
            //初始化
            $ch = curl_init();
            //设置变量
            curl_setopt($ch, CURLOPT_URL,$url); //这意思是,设置好发送的url地址发送到那
            //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,$url); 这样的意思是对方要不要验证,如果不用则按照下面的即可
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); //如果不用验证,这样即可
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); //如果不用验证HOST主机这样即可
            if(!empty($data)){
                curl_setopt($ch,CURLOPT_POST,1);//启用时会发送一个常规的POST请求,就像表单提交的一样。
                curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//全部数据使用HTTP协议中的"POST"操作来
            }
            curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
            //执行
            $output = curl_exec($ch); //返回来的值是一个json格式的值
            //关闭句柄
            curl_close($ch);
            return $output;
        }

    最后一步就是创建一个upload_media.php的文件这里就开始我们的重头戏文件上传的核心代码了,代码如下

    <?php
        header('content-type:text/html;charset=utf-8');
        require_once 'get_token.php';
        require_once 'common.php';
        //我们要上传的文件
        $post = array('file' => '@hero.amr'); //hero.amr 是一个语音素材
        //请求的地址
        //媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
        $url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token={$access_token}&type=voice";
        $res = http_request($url, $post);
        //var_dump($res);
        
        //我们输出一下上传的文件的media_id
        $res_json = json_decode($res);
        $media_id = $res_json->media_id;
        echo "恭喜您文件已上传成功,media_id = {$media_id}";
        
        

    然后进行访问http://weixin.showtp.com/upload_media.php,如果显示如下,恭喜您已经成功了

    如果不知道是不是真的上传成功了,我们可以对她进行测试一下的,我们打开手册里的下载

    然后我们写一个程序获取token值,创建一个get_token2.php的文件来进行获取,代码如下所示:

    <?php
        //原理,就是使用curl函数,发出http请求,获取access_token
        $appid = 'wxed89d8f74fa6fc51';
        $appsecret = 'd4624c36b6795d1d99dcf0547af5443d';
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";
        
        //我们使用curl函数
        //初始化
        $ch = curl_init();
        //设置变量
        curl_setopt($ch, CURLOPT_URL,$url); //这意思是,设置好发送的url地址发送到那
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,$url); 这样的意思是对方要不要验证,如果不用则按照下面的即可
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); //如果不用验证,这样即可
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); //如果不用验证HOST主机这样即可
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出
        //执行
        $output = curl_exec($ch); //返回来的值是一个json格式的值
        //关闭句柄
        curl_close($ch);
        //对返回的json结果要将他转为一个数组
        $jsoninfo = json_decode($output,true);
        //测试以下,看下是否拿到返的回数组
        //var_dump($jsoninfo); 
        
        $access_token = $jsoninfo['access_token'];
        echo $access_token;

    然后访问http://weixin.showtp.com/get_token2.php,如果返回的结果是这样,那么恭喜您已经获取到token值了

    我们在回到刚才的那里

    如果效验通过,那么下面就会和如下这样显示:

    如果见到这样的界面恭喜您,您已经绝对是成功完成文件的上传了

  • 相关阅读:
    Hadoop-HA配置详细步骤
    Oracle 事务
    2 Oracle用户和表空间
    oracle 客户端监听文件配置
    Django 关联管理器
    第2讲 | 网络分层的真实含义是什么?
    hihoCoder #1151 : 骨牌覆盖问题·二 (矩阵快速幂,DP)
    poj 2411 Mondriaan's Dream (轮廓线DP)
    SPOJ COT2 Count on a tree II (树上莫队,倍增算法求LCA)
    HYSBZ 1086 王室联邦 (树的分块)
  • 原文地址:https://www.cnblogs.com/leigood/p/5182640.html
Copyright © 2011-2022 走看看