前言

在微信公众号开发中,经常需要上传视频素材到微信服务器。本文将介绍如何使用PHP实现微信永久素材视频上传功能。

一、a.php - 微信消息回复(视频消息示例)

以下代码处理微信消息回调,当收到视频消息时回复一个视频:

$msg=$GLOBALS['HTTP_RAW_POST_DATA'];
$msgstr=(array)simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA);
$com=com($msgstr);
if($msgstr['MsgType']=='video'){ //回复视频
    echo "<xml>
    $com
    <![CDATA[video]]>
    <Video>
        <![CDATA[1VkhJyhTjbIz9ZL-7EPCMsLgS05FlGX86iOFgI_Bm7tTmGUqOpqQAXdn5VEUedAy]]>
        <Title><![CDATA[不容易阿]]></Title>
        <![CDATA[总算出来了]]>
    </Video>
    </xml>";
    exit;
}

//公共头部
function com($msgstr){
    $str="
        <![CDATA[{$msgstr['FromUserName']}]]>
        <![CDATA[{$msgstr['ToUserName']}]]>
        ".time()."";
    return $str;
}

二、b.php - 上传视频到微信永久素材

以下是上传视频文件到微信服务器的核心代码:

$sucai="https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$token['access_token']}&type=video";

//视频地址
$img='1.mp4';
$res=curla($sucai,$img);
var_dump($res);
die;

function curla($sucai,$img){
    $ch = curl_init();
    //判断curl类的扩展是否存在可用
    if(class_exists('CURLFile')){
        //存在就new
        curl_setopt($ch,CURLOPT_SAFE_UPLOAD,true);
        $data=array('media'=>new \CURLFile(realpath($img)));//必须加上realpath()否则读取不到文件的路径
    }else{
        //不存在
        if(defined('CURLOPT_SAFE_UPLOAD')){
            curl_setopt($ch,CURLOPT_SAFE_UPLOAD,false);
        }
        //realpath读取文件的所在的地址
        $data=array('media'=>"@".realpath($img));
    }
    curl_setopt($ch, CURLOPT_URL, $sucai);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //请求https协议时必须加上ssl安全验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

    // post数据
    curl_setopt($ch, CURLOPT_POST, 1);
    // post的变量
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

三、关键要点说明

  • 接口地址差异:临时素材使用 /cgi-bin/media/upload,永久素材使用 /cgi-bin/material/add_material
  • CURLFile类:PHP 5.5+ 推荐使用 CURLFile 类上传文件,旧版本使用 @ 前缀
  • realpath():必须使用 realpath() 获取文件绝对路径,否则会读取不到文件
  • SSL验证:调用微信API时需要关闭SSL证书验证
  • 参数type:上传视频时 type=video

四、返回结果说明

上传成功后会返回JSON格式数据,包含 media_idurl

{
    "media_id": "IhdaUC-Ucn7D2pYiPe0beQ-7MgocGh4WzWBoikLG8L7KvmL0NfY4cobl686N1yYe",
    "url": "http://mmbiz.vip.qq.com/...
}

获取到 media_id 后就可以在公众号消息回复、自定义菜单等功能中使用该视频素材了。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部