dede5.7免登录发布接口怎么用?

99ANYc3cd6
预计阅读时长 27 分钟
位置: 首页 DEDE建站 正文

核心原理

这个接口的实现主要依赖于 DedeCMS 的后台文件 dede/article_add.php,该文件原本用于处理后台表单提交的文章数据,我们的思路是:

dede5.7文章免登陆发布接口
(图片来源网络,侵删)
  1. 创建一个独立的接口文件api_post_article.php,这个文件将作为外部调用的入口。
  2. 模拟后台请求:在这个接口文件中,我们模拟 article_add.php 所需的表单数据和运行环境。
  3. 安全验证:这是最关键的一步,为了避免任何人都能调用此接口发布文章,我们必须设置一个安全验证机制,
    • Token 验证:在调用接口时,需要提供一个正确的、难以猜测的 Token。
    • IP 白名单:只允许来自特定 IP 地址的请求调用此接口。
  4. 数据传递:通过 POST 请求,将要发布的文章标题、内容、栏目ID等信息传递给接口文件。
  5. 处理并返回结果:接口文件调用 article_add.php 的核心逻辑,处理文章发布,并返回成功或失败的信息。

详细实现步骤

第一步:创建接口文件 api_post_article.php

在您的网站根目录(与 dede 文件夹同级)创建一个新文件 api_post_article.php,将以下代码复制到该文件中。

<?php
/**
 * DedeCMS 5.7 免登录文章发布接口
 * 
 * 调用方法:
 * POST /api_post_article.php
 * 
 * 请求头:
 * Content-Type: application/x-www-form-urlencoded
 * 
 * POST 数据:
 * - token: [您的安全令牌] 文章标题
 * - typeid: 栏目ID (必需)
 * - body: 文章内容 (支持HTML)
 * - description: 
 * - author: 作者
 * - source: 来源
 * - flag: 特性 (如 'c' 推荐, 'h' 头条, 'p' 图片)
 * - litpic: 缩略图URL
 * - keywords: 关键词 (用逗号分隔)
 * - ishtml: 是否生成HTML (0或1)
 * - userip: 发布者IP
 * - dtime: 发布时间 (时间戳,留空则为当前时间)
 * 
 * 返回:
 * JSON格式的成功或失败信息
 */
// ===================================================================
// 1. 安全配置 - 请务必修改这些值
// ===================================================================
define('API_TOKEN', 'YourSuperSecretAndLongRandomToken123!'); // 替换成您自己的复杂Token
define('ALLOWED_IPS', ['127.0.0.1', '192.168.1.100']); // 替换成允许调用此接口的IP地址
// ===================================================================
// 2. 安全验证
// ===================================================================
// IP白名单验证
$client_ip = $_SERVER['REMOTE_ADDR'];
if (!in_array($client_ip, ALLOWED_IPS)) {
    http_response_code(403);
    die(json_encode(['code' => 403, 'msg' => 'Forbidden: Your IP is not allowed.']));
}
// Token验证
if (!isset($_POST['token']) || $_POST['token'] !== API_TOKEN) {
    http_response_code(401);
    die(json_encode(['code' => 401, 'msg' => 'Unauthorized: Invalid token.']));
}
// ===================================================================
// 3. 数据准备
// ===================================================================
// 引入DedeCMS核心文件
require_once (dirname(__FILE__) . "/include/common.inc.php");
require_once (dirname(__FILE__) . "/dede/config.php");
require_once DEDEINC."/arc.archives.class.php";
// 检查必要的POST数据是否存在
if (empty($_POST['title']) || empty($_POST['typeid']) || empty($_POST['body'])) {
    die(json_encode(['code' => 400, 'msg' => 'Bad Request: Title, typeid, and body are required.']));
}
// 准备文章数据
$arc = new Archives();
// 从POST数据中获取并赋值
$arc->title = cn_substrR($_POST['title'], 100);
$arc->typeid = intval($_POST['typeid']);
$arc->description = cn_substrR($_POST['description'], 250);
$arc->writer = empty($_POST['author']) ? $cfg_adminuser : cn_substrR($_POST['author'], 20);
$arc->source = empty($_POST['source']) ? '未知' : cn_substrR($_POST['source'], 50);
$arc->keywords = empty($_POST['keywords']) ? '' : cn_substrR($_POST['keywords'], 30);
$arc->litpic = empty($_POST['litpic']) ? '' : $_POST['litpic'];
$arc->userip = empty($_POST['userip']) ? $_SERVER['REMOTE_ADDR'] : $_POST['userip'];
$arc->dtime = empty($_POST['dtime']) ? time() : $_POST['dtime'];
// 处理文章内容
// 注意:这里直接使用了body内容,确保您传递的内容是安全的
$arc->body = $_POST['body'];
// 设置发布状态
$arc->arcrank = 0; // 0: 已审核, -1: 待审核 (根据需要修改)
// 设置特性 (flag)
$arc->flag = empty($_POST['flag']) ? '' : $_POST['flag'];
// 设置是否为HTML模型
$arc->ishtml = isset($_POST['ishtml']) ? intval($_POST['ishtml']) : 1;
// ===================================================================
// 4. 发布文章
// ===================================================================
$channelid = 1; // 频道ID,1代表普通文章,根据您的网站情况修改
$senddate = time();
$mid = 1; // 管理员ID,1为超级管理员
// 调用发布方法
$arc->SendArchives($typeid, $channelid, $senddate, $mid);
// ===================================================================
// 5. 返回结果
// ===================================================================
if ($arc->arcID > 0) {
    // 发布成功
    echo json_encode([
        'code' => 200,
        'msg' => 'Article published successfully!',
        'article_id' => $arc->arcID,
        'article_url' => $arc->ArcUrl
    ]);
} else {
    // 发布失败
    $errorMsg = empty($arc->ErrorMsg) ? 'Unknown error occurred.' : $arc->ErrorMsg;
    echo json_encode([
        'code' => 500,
        'msg' => 'Failed to publish article.',
        'error' => $errorMsg
    ]);
}
?>

第二步:修改和配置

  1. 修改安全配置

    • define('API_TOKEN', 'YourSuperSecretAndLongRandomToken123!');这是最重要的安全设置,请将 'YourSuperSecretAndLongRandomToken123!' 替换成您自己生成的、非常复杂的、难以猜测的字符串。
    • define('ALLOWED_IPS', ['127.0.0.1', '192.168.1.100']);:将IP地址列表修改为您的服务器IP或允许调用此接口的客户端IP。
  2. 确保目录权限

    • 确保您的 uploads 目录(存放附件)和 data 目录有写入权限。
    • 确保 dede/templets 目录有写入权限,因为 article_add.php 会在这里生成一些临时文件。

第三步:如何调用接口

您可以通过任何支持HTTP请求的语言或工具来调用这个接口。

dede5.7文章免登陆发布接口
(图片来源网络,侵删)

请求方式POST URLhttp://您的网站域名/api_post_article.php

请求头Content-Type: application/x-www-form-urlencoded

POST 数据 (示例)

token=YourSuperSecretAndLongRandomToken123!这是通过API发布的文章
&typeid=1
&body=<p>这是文章的<strong>正文内容</strong>,支持<b>HTML标签</b>。</p><p>这是第二段。</p>
&description=这是一段通过API自动发布的文章摘要。
&author=API用户
&keywords=API,DedeCMS,自动发布
&litpic=http://您的网站.com/uploads/thumb.jpg
&flag=c

成功响应示例 (JSON)

dede5.7文章免登陆发布接口
(图片来源网络,侵删)
{
    "code": 200,
    "msg": "Article published successfully!",
    "article_id": "123",
    "article_url": "http://您的网站.com/123.html"
}

失败响应示例 (JSON)

// Token错误
{
    "code": 401,
    "msg": "Unauthorized: Invalid token."
}
// IP不在白名单
{
    "code": 403,
    "msg": "Forbidden: Your IP is not allowed."
}
// 缺少必要参数
{
    "code": 400,
    "msg": "Bad Request: Title, typeid, and body are required."
}

重要注意事项

  1. 安全第一

    • Token:务必使用一个足够复杂的、唯一的Token,并妥善保管,不要将其硬编码在前端JavaScript中。
    • IP白名单:如果可能,尽量使用IP白名单,这是最直接有效的安全措施。
    • 输入过滤:虽然代码中使用了 cn_substrR 等DedeCMS自带的函数进行长度限制,但对于来自外部的所有数据,都应保持警惕,在实际生产环境中,您可能需要增加更严格的HTML标签过滤、XSS攻击防御等。
  2. 栏目ID (typeid)

    • 调用接口前,您需要知道目标栏目在数据库中的 ID,您可以在后台“核心”->“栏目管理”中查看每个栏目的ID。
  3. 文章状态 (arcrank)

    • 代码中 $arc->arcrank = 0; 表示文章发布后直接通过审核,如果您希望文章发布后需要手动审核,请将其修改为 $arc->arcrank = -1;
  4. 附件处理

    • 此接口不处理附件上传,如果您的文章内容中包含 [upfile]...[/upfile] 这样的标签,并且需要上传附件,您需要更复杂的逻辑来处理文件上传,或者确保附件已经上传到指定目录,并在 body 中直接使用附件的URL。
  5. 错误排查

    • 如果发布失败,请检查接口返回的 error 字段,并查看服务器的 php_error.log 文件,通常会有更详细的错误信息。
    • 确保DedeCMS的数据库连接信息 (include/common.inc.phpdede/config.php) 正确无误。

这个接口为您提供了一个强大而灵活的自动化发布文章的解决方案,请根据您的实际需求进行调整和使用。

-- 展开阅读全文 --
头像
C语言warning C4305是什么原因?
« 上一篇 2025-12-19
Python与C语言的核心区别是什么?
下一篇 » 2025-12-19

相关文章

取消
微信二维码
支付宝二维码

目录[+]