使用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的回复,内容为“无法路由。代码库/公司无效。”
答案 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很有帮助,因为我可以看到请求的格式(通过在发帖时看着提琴手)。然后,您可以确保您的帖子具有相同的行为。