关于微信公众号开发上传永久素材时,提示40015

本文介绍了一种解决PHP5.6及以上版本中使用CURL上传文件遇到40015错误的方法。通过使用newCURLFILE替代@符号来上传文件,避免了错误的发生,并提供了一个具体的代码实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、关于上传永久素材时,提示40015.

    问题在于php 5.6之后CURL不允许使用 @上传问题,可以使用 new CURLFILE('文件代替')或者 curl_create_file代替

   下面附上一段代码

 

   

<?php
 
 
header('content-type:text/html;charset=utf-8');
error_reporting( E_ALL ^ E_NOTICE);
function CurlPost($url, $param = [], $is_Post = 1 ,$timeout = 10)
{
 
 
    //初始化curl
    $curl = curl_init();
 
 
    curl_setopt($curl, CURLOPT_URL, $url); // 设置请求的路径
 
 
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
 
 
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
    if( $is_Post  ){
 
 
        curl_setopt($curl, CURLOPT_POST, 1); //设置POST提交
 
 
        curl_setopt($curl,CURLOPT_SAFE_UPLOAD , true );
 
 
        //提交数据
        if (is_array($param)) {
#不能使用http_bulid_query
            curl_setopt($curl, CURLOPT_POSTFIELDS, ($param));
//            @curl_setopt($curl, CURLOPT_POSTFIELDS, ($param));
        } else {
            curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
        }
    }
 
 
 
 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //显示输出结果
 
 
    curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
 
 
 
 
    //执行请求
    $data = $data_str = curl_exec($curl);
 
 
    //处理错误
    if ($error = curl_error($curl)) {
        $logdata = array(
            'url' => $url,
            'param' => $param,
            'error' => '<span style="color:red;font-weight: bold">' . $error . '</span>',
        );
 
 
        var_dump($logdata);
        exit;
    }
 
 
 
 
    curl_close($curl);
 
 
    //json数据转换为数组
    $data = json_decode($data, true);
 
 
    if (!is_array($data)) {
        $data = $data_str;
    }
 
 
    return $data;
 
 
}
 
$token = 'L3VWbz5oaUc5LS-3pTmso5Sa3GW4BqPZ3bMiz4Zy0poixY4OYrlF-S_V4jmQ5EYNaJzYXTUuc3fS8KLtPIYfAKplq4AtrAwKFCxlGSwlq2gOVZhAAAJQU';
 
 
# 临时素材的接口
$upload_url = 'https://api.weixin.qq.com/cgi-bin/media/upload?access_token='.$token.'&type=image';
 
 
$cfile = curl_file_create('C:\wamp\www\weixin\a.jpg');
 
 
$data = array(
//    'media'=>$cfile,
//    'media'=>'@'.realpath('a.jpg'),
    'media'=> new CURLFile('C:\wamp\www\weixin\a.jpg'),
    'form-data' => [
        'filename' =>'a.jpg',
        'filelength'=>1839,
        'content-type'=>'image/jpeg'
    ]
 
 
);
 
$result = CurlPost( $upload_url , $data );
 
 
var_dump($result);

### 实现微信公众号上传视频功能 在微信公众号开发过程中,上传视频是一个常见的需求。为了实现这一目标,开发者可以利用微信公众平台提供的多媒体文件接口来完成操作。 #### 接口调用说明 当用户向公众账号发送消息,如果涉及媒体文件(如图片、语音、视频等),则可以通过获取临素材的方式来进行处理。对于永久素材,则需使用相应的API进行管理[^1]。具体来说,在上传视频方面: - **URL**: `http(s)://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE` - **请求方式**: POST - **参数列表** - access_token (必填): 调用接口凭证 - type (必填): 媒体文件类型,分别有图片(image)、语音(voice)、视频(video) 需要注意的是,这里提到的`type`应设置为`video`以指明要上传的内容是视频文件[^4]。 #### Python代码示例 下面给出一段简单的Python脚本用于演示如何通过API上传视频至微信服务器: ```python import requests from urllib.parse import urlencode def upload_video(file_path, token): url = f"https://api.weixin.qq.com/cgi-bin/material/add_material?{urlencode({'access_token': token,'type':'video'})}" files = { 'media': open(file_path, 'rb') } response = requests.post(url=url, files=files).json() return response['media_id'] if "media_id" in response else None if __name__ == "__main__": ACCESS_TOKEN = "<Your Access Token Here>" VIDEO_PATH = "/path/to/your/video.mp4" media_id = upload_video(VIDEO_PATH, ACCESS_TOKEN) print(f"The uploaded video's Media ID is {media_id}") ``` 此段程序实现了读取本地路径下的视频文件并将其作为二进制流提交给指定的HTTP端点。成功后返回该视频对应的Media_ID以便后续引用或分享[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值