Php 使用多部分/表单数据POST请求时从ConnectWise API获取无效响应
在使用ConnectWiseAPI将文档上载到现有票证时,我遇到了一个错误,我认为问题在于如何执行curl请求 我试着根据我在谷歌上找到的卷曲选项来胡闹,但似乎什么都不管用 这是邮寄申请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";
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查看)。然后,您可以确保您的帖子的行为是相同的