解决微信上传临时素材

版权声明:本文由版主林子懿亲自编写,请勿转载!php讨论群-511807472 https://blog.csdn.net/ldTrueLove/article/details/53422940

一、简单的写一个html页面用来提交文件


<html>
<form action="add_media.php" method="post" enctype="multipart/form-data">
    <input type="file" name="media"/>
    <input type="submit" value="上传"/>
</form>
</html>

二、处理上传的文件

<?php
/**
 * Created by PhpStorm.
 * User: dudongjiang
 * Date: 2016/12/1
 * Time: 10:10
 * effort: 微信素材上传
 */
/**
 * @param $file_info
 * @return bool|mixed
 * @effort 处理
 */
function add_material($file_info){
    $path = $file_info['media']['name'];
    $type = 'image';
    $access_token=get_access_token();
    $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=$access_token&type=$type";
    $ch1 = curl_init ();
    curl_setopt ( $ch1, CURLOPT_SAFE_UPLOAD, false);
    $filepath = dirname(__FILE__)."\/$path";
    $data= array('media'=>"@".$filepath);
    curl_setopt($ch1, CURLOPT_URL, $url);
    curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
        curl_setopt($ch1, CURLOPT_POST, 1);
        curl_setopt($ch1, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec ( $ch1 );
    curl_close ( $ch1 );
    return $result;
}

/**
 * @return mixed
 * @effort 将微信自带的验证缓存起来 防止超限
 */
function get_access_token() {
    $tokenFile = "./access_token.txt";//缓存文件名
    $data = json_decode(file_get_contents($tokenFile));
    if ($data->expire_time < time() or !$data->expire_time) {
        $appid = "自己的appid";
        $appsecret = "自己的appsecret";
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
        $res = getJson($url);
        $access_token = $res['access_token'];
        if($access_token) {
            $newdata['expire_time'] = time() + 7000;
            $newdata['access_token'] = $access_token;
            $fp = fopen($tokenFile, "w");
            fwrite($fp, json_encode($newdata));
            fclose($fp);
        }
    } else {
        $access_token = $data->access_token;
    }
    return $access_token;
}

//取得微信返回的JSON数据
function getJson($url){
    $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);
    return json_decode($output, true);
}

$result = add_material($_FILES);
var_dump($result);

三、执行的结果

{"type":"image","media_id":"iR9397zl0j-Jr6wQpGhjc4rM-Nq4GaepLXhxiCd_8N2gBBoAk-J1nkk2l33Em94L","created_at":1480575046}

四、注意

1.php的版本

扫描二维码关注公众号,回复: 2966584 查看本文章

php5.5.0中添加 默认值FALSE php5.6.0中默认值为TRUE

CURLOPT_SAVE_UPLOAD的值为TRUE禁用@前缀CURLOPT_POSTFIELDS中发送邮件。意味着@可以在字段中安全的使用了

PHP 5.5.0 中添加,默认值 FALSE。 PHP 5.6.0 改默认值为 TRUE
2.路径
一定要使用绝对路劲
在windows下为@D:\www\apache\images\dudj.jpg
在linux下@home/apache/picture/lkk.jpg


一定要注意红色部分和注意点

猜你喜欢

转载自blog.csdn.net/ldTrueLove/article/details/53422940