Php 使用多部分/表单数据POST请求时从ConnectWise API获取无效响应

Php 使用多部分/表单数据POST请求时从ConnectWise API获取无效响应,php,curl,Php,Curl,在使用ConnectWiseAPI将文档上载到现有票证时,我遇到了一个错误,我认为问题在于如何执行curl请求 我试着根据我在谷歌上找到的卷曲选项来胡闹,但似乎什么都不管用 这是邮寄申请 function post_ticket_attachment ( $ticket_id, $file_attachment ) { $url = "https://api-na.myconnectwise.net/v4_6_release/apis/3.0/system/documents";

在使用ConnectWiseAPI将文档上载到现有票证时,我遇到了一个错误,我认为问题在于如何执行curl请求

我试着根据我在谷歌上找到的卷曲选项来胡闹,但似乎什么都不管用

这是邮寄申请

 function post_ticket_attachment ( $ticket_id, $file_attachment ) {
     $url = "https://api-na.myconnectwise.net/v4_6_release/apis/3.0/system/documents";
     $filename = $file_attachment['name'];
     $filedata = $file_attachment['tmp_name'];
     $filesize = $file_attachment['size'];


     $fields = array ( 
        "recordId" => $ticket_id, 
        "recordType" => "Ticket",
        "title" => $file_attachment['name']
     );

     $filenames = array($filedata);
     $files = array();
     foreach( $filenames as $f ){
         $files[$f] = file_get_contents($f);
     }

     $ch = curl_init();
     $boundary = uniqid();
     $delimiter = '-------------' . $boundary;

     $post_data = build_data_files($boundary, $fields, $files);

     curl_setopt_array($ch, array(
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POST => 1,
      CURLOPT_POSTFIELDS => $post_data,
      CURLOPT_HTTPHEADER => array(
        "Authorization: basic " . $connect_wise_auth,
        "Content-Type: multipart/form-data; boundary=" . $delimiter,
        "Content-Length: " . strlen($post_data)
      ),
     ));

     $response = curl_exec($ch);
     console_log ($response);
}
以下是我如何构建post数据:

function build_data_files($boundary, $fields, $files){
    $data = '';
    $eol = "\r\n";

    $delimiter = '-------------' . $boundary;

    foreach ($fields as $name => $content) {
        $data .= "--" . $delimiter . $eol
            . 'Content-Disposition: form-data; name="' . $name . "\"".$eol.$eol
            . $content . $eol;
    }


    foreach ($files as $name => $content) {
        $data .= "--" . $delimiter . $eol
            . 'Content-Disposition: form-data; name="' . $name . '"; filename="' . $name . '"' . $eol
            . 'Content-Transfer-Encoding: binary'.$eol
            ;

        $data .= $eol;
        $data .= $content . $eol;
    }
    $data .= "--" . $delimiter . "--".$eol;


    return $data;
}

我希望请求能够正确发布,但我收到的却是ConnectWise的响应,声明“无法路由。代码库/公司无效。”

我刚刚遇到了这个问题,因为我忘记了将用户名和密码添加到基本授权中。看起来您正在添加它,但我看不到其中包含的内容。因此,请澄清,用户名是公司+公钥,密码是私钥,而编码为base64

从(您可能需要登录才能看到它)

建议创建API成员,而不是使用绑定到 特定成员。授权:基本 base64(公司ID+公钥:私钥)(授权:基本 Y29tcGFueWlkK3B1YmxpY2tleTpwcml2YXRla2V5)

一旦您正确添加了这些信息,API将能够检查您的用户是否正确以及您是否属于该公司

请注意,这是一个非常特定的API的非常特定的问题,因此,如果您将来发现更多问题,您可能会更幸运地直接在他们的论坛上提问。

抱歉,没有完整的答案(我还不能评论) 当我试图根据公司的标识符查找公司时,也遇到了同样的错误。结果证明我没有使用正确的URI。 尝试使用fiddler或其他工具来检查你发布的内容,看看是否有不完全正确的内容

我的问题是这里有一个斜杠:
company/companys/?conditions

它应该是
公司/公司?条件

起初我没有注意到,因为我使用变量来构建URI,所以不太清楚

我还发现使用它很有帮助,因为我可以看到请求应该如何格式化(通过在发布时用fiddler查看)。然后,您可以确保您的帖子的行为是相同的