在getMessagesUploadServer返回v2/bulk_upload URL之后,VK API的 photos.saveMessagesPhoto会因为 "photo is undefined" 而失败

后端开发 2026-07-08

当使用社区(组)令牌调用photos.getMessagesUploadServer时,VK现在返回一个新的上传URL,而不是旧的upload.php:

https://pu.vk.com/gu/photo/v2/bulk_upload?token=...

这在API版本无关的情况下都会发生(测试覆盖5.81至 5.199)。

向这个URL上传字段名为file1的文件会成功并返回:

{
  "files": {
    "file1": {
      "sha": "7e3f064a...",
      "secret": "-179972...",
      "meta": {"height": "1006", "width": "1778"}
    }
  },
  "hash": "bd59a78b...",
  "server": "999999",
  "request_id": "..."
}

响应中没有photo字段。

调用photos.saveMessagesPhoto以这些值在我尝试的所有组合中都失败:

[100] 指定的参数之一缺失或无效:photo未定义 vk.photos.saveMessagesPhoto(server="999999", photo=???, hash="bd59a78b...")

[121] 无效哈希 vk.photos.saveMessagesPhoto(server="999999", photo=json.dumps(resp['files']), hash="bd59a78b...")

[100] 指定的参数之一缺失或无效:photos_list无效 vk.photos.saveMessagesPhoto(server="999999", photo=resp['request_id'], hash="bd59a78b...")

我尝试过的办法:

  • 字段名file1在上传时可用(file0与 photo返回错误码:4606 “Cannot get file from request”)
  • API版本5.81到 5.199 —— 对组令牌总是返回v2/bulk_upload
  • photos.save和 photos.getUploadServer —— 对组令牌不可用([27] 方法在组认证下不可用)
  • docs.getMessagesUploadServer仅接受doc、audio_message、graffiti —— 不支持photos

问题: 是否有任何方法可以使用社区令牌,将通过新的v2/bulk_upload端点上传的照片保存下来?或者是否有一个当前可用的替代方法,用组访问令牌将照片上传到消息?

解决方案

这是VK那边的一个小故障。现在一切又恢复正常,照片按以前的方式上传,upload.php链接也回来了。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章