无法通过 zoho api 上传文档

Can not upload document via zoho api

使用来自 Laravel 的 curl 请求。

    $path =  storage_path('app/letters/letter.pdf');
    $post = '@' . $path;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, 'https://sign.zoho.com/api/v1/requests');
    $authorization = 'Authorization: Bearer ' . $zohoAccessToken;
    curl_setopt($ch, CURLOPT_HTTPHEADER, [$authorization]);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
    $entriesData = ['data' => [
        'requests' => [
            'request_name' => "NDA ",
            'actions' => [
                'recipient_name' => 'test',
                'recipient_email' => $mail,
                'action_type' => 'sign',
                'verify_recipient' => false,
            ],
            'is_sequential' => false,
        ]
    ]];
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($entriesData));
    $output = curl_exec($ch)

并得到错误响应:“消息”:“找到额外的密钥”,“状态”:“失败”,“代码”:9015,

我正在使用此代码获取访问令牌并且效果很好

        $data = [
            'refresh_token' => $refreshToken,
            'client_id' => $clientId,
            'client_secret' => $secret,
            'grant_type' => 'refresh_token'
        ];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://accounts.zoho.com/oauth/v2/token');
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $output = curl_exec($ch);

基于 API documentation and this post,我认为这应该类似于:

$path =  storage_path('app/letters/letter.pdf');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://sign.zoho.com/api/v1/requests');
$authorization = 'Authorization: Bearer ' . $zohoAccessToken;
curl_setopt($ch, CURLOPT_HTTPHEADER, [$authorization]);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
  'data' => json_encode([
    'requests' => [
      'request_name' => "NDA ",
      'actions' => [
        'recipient_name' => 'test',
        'recipient_email' => $mail,
        'action_type' => 'sign',
        'verify_recipient' => false,
      ],  
      'is_sequential' => false,
    ]   
  ]), 
  'file' => curl_file_create($path)
];
$output = curl_exec($ch);

因此,根据 API 文档,它似乎产生与 CURL 命令行调用大致相同的有效负载。

让我感到困惑的主要来源是 data 是该字段的键,而相应的值是 JSON 编码的。