You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WordPress插件调用VK API发布社区墙帖时遇Error 15与100:图片上传失败问题求助

WordPress插件调用VK API发布社区墙帖时遇Error 15与100:图片上传失败问题求助

兄弟我之前踩过VK API的不少坑,尤其是群组token和参数格式这块,看了你的问题描述和日志,发现几个关键的问题点,给你梳理下解决方案:


1. 先解决Group ID格式错误(这是Error15的核心原因!)

看你的日志里有这么一行:CPA VK Construct: group_id #0000000,这说明你在插件设置里填写的群组ID带了#前缀(比如从VK社区URL复制了#123456),但代码里用intval($this->group_id)转换时,带#的字符串会被转成0——你想想,用无效的群组ID=0去调用VK API,肯定会触发Error15(权限不足),因为根本不存在这个群组!

解决办法

  • 要么在插件设置里直接填纯数字的群组ID(比如从社区URL的club123456里提取123456);
  • 要么在代码里自动去掉#前缀,修改__construct里的group_id赋值:
$this->group_id = ltrim($options['vk_group_id'] ?? '', '#'); // 先去掉#
$this->group_id = intval($this->group_id); // 再转成整数

2. 验证群组Token的实际有效性

虽然你说生成token时勾选了photoswall权限,但VK有时候会出现权限延迟、或者token与群组绑定错误的情况,建议你直接用VK官方的API调试器(在VK开发者后台里找)做个测试:

  • 用你的group_token调用photos.getWallUploadServer接口,参数只传group_id(纯数字,比如123456);
  • 如果调试器返回正常的upload_url,说明token本身没问题;如果还是报错Error15,那你需要重新生成群组token:
    1. 进入VK社区后台的「设置 -> API使用」;
    2. 确认绑定的应用是你开发用的那个;
    3. 重新勾选photoswall权限,生成新的token后替换到插件设置里。

3. 修正附件参数格式(解决Error100)

你的代码里,当图片上传失败时,直接把文章链接赋值给attachments参数:

$params['attachments'] = get_permalink($post);

这完全不符合VK API的要求!VK的attachments参数如果要传链接,格式必须是link=你的文章链接,直接传URL会被识别为无效附件,触发Error100(参数无效),也就是日志里的Violated: link_photo_sizing_rule. No photo given

解决办法
修改这段代码,改成正确的链接附件格式:

if (!empty($attachments)) {
    $params['attachments'] = implode(',', $attachments);
} else {
    // 正确的链接附件格式:前缀link= + 编码后的URL
    $params['attachments'] = 'link=' . urlencode(get_permalink($post));
    // 或者,如果你不需要传链接附件,干脆注释掉这行,只传message即可,避免触发错误
    // unset($params['attachments']);
}

4. 关于用户Token的必要性

根据VK官方文档,公开/封闭群组用群组Token完全可以完成图片上传到墙的操作,不需要用户Token——只要群组Token有photoswall权限、group_id正确就行。只有当你的群组是私密类型时,才需要用拥有群组编辑权限的用户Token来上传图片。所以你现在的问题根本不需要切换到用户Token,先把前面的问题解决再说。


5. 其他细节检查

  • 确认download_image方法能正确下载文章的特色图,临时文件没有损坏、且PHP有读取权限;
  • 检查upload_file_to_vk方法返回的photoserverhash三个参数是否完整,这三个是调用photos.saveWallPhoto必须的,少一个都会导致上传失败;
  • 调用wall.post时,owner_id必须是-群组ID(负号+纯数字),你的代码里-intval($this->group_id)是对的,这个没问题。

建议你先按顺序解决前3个问题,尤其是Group ID的格式错误,这是最核心的。解决后再测试插件,应该能解决Error15和Error100的问题。要是还有问题,把VK API调试器的测试结果或者更详细的日志贴出来,再进一步排查!

火山引擎 最新活动