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

时间:2019-05-17 20:59:12

标签: php curl

使用ConnectWise API将文档上传到现有票证时出现错误,我认为问题在于我如何执行curl请求。

我尝试根据我在Google上发现的内容来弄乱curl选项,但是似乎没有任何效果。

这是POST请求

 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 = "\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的回复,内容为“无法路由。代码库/公司无效。”

2 个答案:

答案 0 :(得分:0)

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

the official documentation(您可能要登录才能看到它)

  

建议创建API成员,而不是使用绑定到的API密钥   一个特定的成员。授权:基本   base64(companyid + publickey:privatekey)(授权:基本   Y29tcGFueWlkK3B1YmxpY2tleTpwcml2YXRla2V5)

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

请注意,这是使用特定API的特定问题,因此,如果将来您发现更多问题,可能会有更多运气直接在他们的论坛上提问。

答案 1 :(得分:0)

对不起,我没有完整的答案(我无法发表评论) 尝试通过其标识符查找公司时遇到了同样的错误。原来,我没有使用正确的URI。 尝试使用提琴手或其他工具来准确检查您要发布的内容,以查看是否有100%不正确的内容。

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

应该是company/companies?conditions

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

我还发现使用此https://github.com/christaylorcodes/ConnectWiseManageAPI很有帮助,因为我可以看到请求的格式(通过在发帖时看着提琴手)。然后,您可以确保您的帖子具有相同的行为。