使用Multipart/form-data Post请求时,从ConnectWise API中获取无效的响应



我在使用ConnectWise API将文档上传到现有票证时会遇到错误,我相信问题是我如何执行Curl请求。

我尝试根据我在Google上发现的内容来处理卷曲选项,但似乎没有用。

这是邮政请求

 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);
}

这就是我如何构建帖子数据:

function build_data_files($boundary, $fields, $files){
    $data = '';
    $eol = "rn";
    $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表示:"无法路由。Codebase/Company无效。"

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

从官方文档中(您可能要登录才能看到它(

建议创建API成员,而不是使用绑定的API键 特定成员。授权:基本 BASE64(CompanyId PublicKey:PrivateKey((授权:基本 Y29TCGFUEWLKK3B1MXPY2TLETPWCML2YXRLA2V5(

正确添加信息后,API将能够检查您的用户是否正确并且您属于该公司。

请注意,这是一个非常具体的API的非常具体的问题,因此,如果您将来发现更多问题,您将在他们的论坛上直接询问更多的运气。

对不起,不是一个完整的答案(我还不能评论(试图通过其标识符查找公司时,我遇到了同样的错误。事实证明,我没有使用正确的URI。尝试使用提琴手或其他内容确切检查您要发布的内容,以查看是否有100%正确的东西。

我的问题是我在这里有一个前斜线: company/companies/?conditions

应该是company/companies?conditions

我一开始没有注意到,因为我使用变量来构建URI,所以这不是很清楚。

我还发现,使用此https://github.com/christaylorcodes/connectwisemanageapi很有帮助,因为我可以看到应该如何格式化请求(在我发布时与Fiddler一起观看(。然后,您可以确保您的帖子行为相同。

最新更新