You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP CURL请求Discord Webhook报错请求体包含无效JSON

问题成因

你收到{"code": 50109, "message": "The request body contains invalid JSON."}错误的核心原因有两点:

  • 上传文件场景下错误使用了JSON请求格式:Discord Webhook上传附件时不支持纯JSON请求体,二进制文件无法直接被JSON序列化,你手动设置Content-Type:application/json并将读取到的二进制图片内容做json_encode处理,必然会生成不符合规范的非法JSON结构。
  • PHP CURL文件上传方式错误:直接读取文件二进制内容塞进POST字段的写法不符合multipart/form-data上传规范,PHP CURL要求本地文件上传必须通过CURLFile类实例声明文件路径,才能自动组装符合规范的请求体。
修正后的代码
<?php 
// 替换为你自己的Discord Webhook地址
$ch = curl_init("https://discord.com/api/webhooks/xx/xx");

$payload = [
    // 可选:随图片发送的文字消息,不需要可以删除该字段
    'content' => '这是上传的猫咪图片',
    // 声明要上传的本地文件,realpath()会自动解析文件绝对路径避免路径错误
    'files[0]' => new CURLFile(realpath("cat.png"))
];

// 直接传组装好的数组,不要做json_encode处理
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 禁止手动设置Content-Type请求头,CURL会自动生成带正确boundary标识的multipart/form-data头

$result = curl_exec($ch);
// 可选:添加CURL错误排查逻辑
if (curl_errno($ch)) {
    echo 'CURL请求错误: ' . curl_error($ch);
}
curl_close($ch);
var_dump($result);
?>
注意事项
  • 确认cat.png路径正确,如果文件不在脚本同级目录,直接传入文件的完整绝对路径即可。
  • 多文件上传时依次添加files[1]、files[2]字段,对应不同的CURLFile实例即可。
  • Discord Webhook单次请求上传的所有附件总大小不得超过25MB,超出会触发其他接口错误。

内容的提问来源于stack exchange,提问作者Umut Santur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:21:09