错误提示:
{"errcode":41005,errms":'media data missing hint: kBriFa09133954) rid: 64f59081-119072e1-158174b61'}
接口说明:
2.3.1 上传图片接口 (上传永久素材接口)
开发者需调用该接口上传商户图标至微信服务器,获取相应logo_url/icon_list/image_url,用于卡券创建。
接口调用请求说明
HTTP请求方式: POST/FROMURL:https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
参数说明
参数 | 是否必须 | 说明 |
---|---|---|
buffer | 是 | 文件的数据流 |
access_token | 是 | 调用接口凭证 |
请求数据
调用示例(使用curl命令,用FORM表单方式上传一个图片):curl –Fbuffer=@test.jpg
问题解决:
请求数据接口示例过于简单,有点摸不着头绪,试了多次,终于找到正确的接口传参方式,记录如下:
function uploadImg()
{
$app_id = @$_REQUEST['app_id'] ?? '';
$img_url = @$_REQUEST['img_url'] ?? 'image/logo_all.jpg';
if (!$app_id) {
return $this->renderError('缺少参数');
}
$app = getMiniProgram($app_id);
$api = $app->getClient();
$pre_url = '/www/wwwroot/web/public/';
$buffer = $pre_url. $img_url;
$response = $api->httpUpload('cgi-bin/media/uploadimg', ['buffer' => $buffer]);
return $this->renderSuccess('',$response);
}
public function getClient () {
return new BaseClient($this);
}
use EasyWeChat\Kernel\BaseClient;
public function httpUpload(string $url, array $files = [], array $form = [], array $query = [])
{
$multipart = [];
foreach ($files as $name => $path) {
$multipart[] = [
'name' => $name,
'contents' => fopen($path, 'r'),
];
}
foreach ($form as $name => $contents) {
$multipart[] = compact('name', 'contents');
}
return $this->request($url, 'POST', ['query' => $query, 'multipart' => $multipart, 'connect_timeout' => 30, 'timeout' => 30, 'read_timeout' => 30]);
}
用 EasyWeChat 库自带的 httpUpload 方法 进行图片文件流的参数设置,方便快捷。
附:
POST的四种传参方式:四种常见的 POST 提交数据方式 | JerryQu 的小站
1)application/x-www-form-urlencoded
2)multipart/form-data
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/pngPNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
3)application/json
4)text/xml
本接口调用使用的是第二种 2)multipart/form-data 传参方式。