首页 > 解决方案 > 在 PHP 中使用 webhook 将文件上传到 Discord

问题描述

这就是我所拥有的

<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: x-user-id");
header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');

if (!isset(getallheaders()["X-User-ID"]) || !isset($_FILES["audio"])) {
    return;
}

$webhookurl = "discord url";
//$webhookurl = "https://8f13d44091009d558421159246966183.m.pipedream.net";

$json_data = [
    "content" => "<@".getallheaders()["X-User-ID"].">",
    "tts" => false,
    "file" => curl_file_create($_FILES["audio"]["tmp_name"], "audio/mpeg", "sound.mp3") // "@".realpath($_FILES["audio"]["tmp_name"])
];

if (isset(getallheaders()["X-User-ID"])) {
    $curl = curl_init( $webhookurl );
    curl_setopt($curl, CURLOPT_TIMEOUT, 5); // 5 seconds
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5); // 5 seconds
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($json_data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ));
    
    curl_exec( $curl );
    curl_close( $curl );
}

我得到的只是一条带有该"content"字段的消息(在本例中提及),但没有文件。嵌入也可以正常工作。

这是我发现的:

我还尝试了什么:

关于我所缺少的任何想法?我想我的主要问题是我不确定Discord 期望什么格式......

标签: phpcurldiscordwebhooks

解决方案


Figured it out. I shouldn't have been using json_encode() on the body, and I was supposed to use multipart/form-data. I also had to adjust some fields.


推荐阅读