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

Discord.js Slash Command调用PHP接口无响应求助

问题排查与解决方案

1. 解决Discord交互超时问题

Discord要求Slash Command必须在3秒内给出响应,如果远程PHP请求耗时超过3秒,就会触发“The application did not respond”提示。可以通过先发送临时响应再编辑结果的方式规避超时:

client.on('interactionCreate', async (interaction) => {
    if (!interaction.isCommand()) return;

    const { commandName } = interaction;

    if (commandName === 'work') {
        // 先发送临时响应,避免超时
        await interaction.deferReply({ ephemeral: true });
        
        try {
            const userid = interaction.user.id;
            const response = await fetch('https://example.com/script.php', {
                method: 'POST',
                headers: { 'Content-Type': 'application/json' },
                body: JSON.stringify({ userid }),
            });

            if (!response.ok) {
                throw new Error(`HTTP错误!状态码: ${response.status}`);
            }

            const result = await response.json();
            if (result.success === true) {
                // 编辑临时响应为最终结果
                await interaction.editReply({ content: `${result.message}` });
            } else {
                await interaction.editReply('操作失败');
            }
        } catch (error) {
            // 捕获所有错误并反馈给用户
            console.error('请求出错:', error);
            await interaction.editReply(`请求出错: ${error.message}`);
        }
    }
});

2. 捕获请求过程中的异常

原代码未处理fetch或response.json()可能抛出的错误(比如网络故障、JSON解析失败),一旦出错会直接终止代码,导致无任何响应。添加try/catch可确保无论是否出错,都能给用户反馈。

3. 完善PHP脚本的POST请求处理

浏览器访问是GET请求,而你的代码用的是POST请求,需确保PHP能正确处理POST的JSON数据:

  • 增加JSON解析的错误检查,避免因数据格式问题导致脚本异常:
<?php
header('Content-Type: application/json');
$data = json_decode(file_get_contents("php://input"));

// 检查JSON解析是否成功、userid是否存在
if ($data === null || !isset($data->userid)) {
    echo json_encode(['success' => false, 'message' => '无效的请求数据']);
    exit;
}

$userid = $data->userid;
// 后续原有代码不变...
?>
  • 确认服务器PHP配置允许file_get_contents("php://input")读取POST数据(默认允许,部分主机可能限制)。

4. 调试建议

  • 在NodeJS代码中添加日志,打印response.status、response.headers和result,确认请求是否成功到达PHP脚本,以及返回数据是否符合预期。
  • 用curl模拟POST请求,验证PHP脚本的POST响应:
curl -X POST -H "Content-Type: application/json" -d '{"userid": "123456"}' https://example.com/script.php

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:38:09