PHP微信上传素材

  • Post author:
  • Post category:php


data format error hint

这段时间一直再调微信得各种接口,没想象中那么坑,主要是太久没更新了。

真正坑的是网上那些全都一样得博客,简直害人不浅

今天对接微信素材上传就碰到了一个坑,整整搞了一个晚上,马上就要睡着了,想起看看php手册 果然解决了!

微信得官方文档接口是这样得

http请求方式:POST/FORM,使用https

https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE

调用示例(使用curl命令,用FORM表单方式上传一个多媒体文件):

curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE"

这里采用得是curl 得方式模拟表单提交,并且要求

media   是   form-data中媒体文件标识,有filename、filelength、content-type等信息

如果你是PHP 5.6以前得版本 你可以直接用curl @path 得方式上传,肯定是可以成功得,但是如果5.6或着以上点的版本这里就会出现一下错误

media data missing hint

翻译过来就是 没有媒体数据

也就是说curl 模拟post得时候并没有提交媒体文件

因为5.6后版本得curl 是不一样得

详细看官方文档

http://www.php.net/manual/en/book.curl.php

所以你之前提交过去得只是字符串而已


那么怎么提交一个文件呢??


5.6以后得curl post得时候如果$data是一个数组就会被当成一个form-data

这里写图片描述

 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

问题到这里就已经浮出水面了

$data是一个数组且使用curlfile来上传

 public function uploadImg($file){

        if (!file_exists($file) || !is_readable($file)) {
            throw new Exception("File does not exist, or the file is unreadable: '$file'");
        }

        //永久素材上传
        $url = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token={$this->accessToken}&type=image";
        //临时素材上传
//        $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={$this->accessToken}&type=image";

        $data = json_decode($this->https_request($url,[ 'media'=> new \CURLFile(realpath($file))]),true);
        return $data;
    }

ok搞定···············



版权声明:本文为qq_25504271原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。