在使用curl接口将文档上传到现有工单时,我收到了一个错误,我认为问题出在我执行ConnectWise请求的方式上。
我试着根据我在Google上找到的内容来调整卷曲选项,但似乎都不起作用。
以下是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);
}
下面是我是如何构建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的响应:“无法路由。Codebase/公司无效。”
发布于 2019-09-02 10:40:53
我刚刚遇到了这个问题,因为我忘记将用户名和密码添加到基本授权中。看起来你正在添加它,但是我看不到它包含什么,所以,为了澄清,用户名是company+publickey,密码是私钥,而在base64中编码。
从the official documentation (您可能需要登录才能看到它)
建议创建接口成员,而不是使用绑定到特定成员的接口密钥。授权:基本base64(companyid+publickey:privatekey) (授权:基本Y29tcGFueWlkK3B1YmxpY2tleTpwcml2YXRla2V5)
一旦您正确地添加了该信息,API将能够检查您的用户是否正确以及您是否属于该公司。
发布于 2020-12-13 05:28:16
对不起,没有完整的答案(我还不能评论),当我试图通过标识符查找公司时,我得到了同样的错误。结果是我没有使用正确的URI。尝试使用fiddler或其他工具来检查你所张贴的内容,看看是否有不完全正确的地方。
我的问题是这里有一个正斜杠:company/companies/?conditions
它应该是company/companies?conditions
一开始我没有注意到,因为我使用变量来构建URI,所以它不是很清楚。
我还发现使用这个https://github.com/christaylorcodes/ConnectWiseManageAPI很有帮助,因为我可以看到请求应该如何格式化(通过观察我发布时的fiddler )。然后,您可以确保您的帖子的行为是相同的。
https://stackoverflow.com/questions/56193502
复制相似问题