我只是写信给你,因为我正在努力让这段代码工作.我能够调用API的要求从命令行.只要我尝试调用它从一个php函数后,转换为PHP可读的curl它似乎发送,但我只是得到一个空数组作为响应。这是相当混乱,因为我得到了有效的错误消息,在响应从API以前。我将列出php和html表单的代码。
<?php
$name = $_POST['testName'];
$email = $_POST['testEmail'];
$file = $_FILES['testFile'];
$url = $_POST['testURL'];
runSend($file, $name, $email);
function runSend($file, $name, $email){
echo "Success, message sent";
echo $file;
echo $name;
echo $email;
echo $url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.boldsign.com/v1/document/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$post = array(
'Title' => 'Commercial Agreement',
'Message' => 'Terms, purpose and duration of agreement ',
'UseTextTags' => 'true',
'EnableSigningOrder' => 'false',
'Signers[0][Name]' => 'Example Name',
'Signers[0][EmailAddress]' => 'example@example.com.au',
'Signers[0][SignerOrder]' => '0',
'Signers[0][FormFields][0][FieldType]' => 'Signature',
'Signers[0][FormFields][0][Name]' => 'sign_field',
'Signers[0][FormFields][0][PageNumber]' => '1',
'Signers[0][FormFields][0][Bounds][X]' => '50',
'Signers[0][FormFields][0][Bounds][Y]' => '50',
'Signers[0][FormFields][0][Bounds][Width]' => '200',
'Signers[0][FormFields][0][Bounds][Height]' => '30',
'Signers[0][FormFields][0][IsRequired]' => 'true',
'Files' => new CURLFILE($file)
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$headers = array();
$headers[] = 'X-Api-Key: EXAM76242$PLEA32PIK555EY';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
<form action="/wp-content/themes/hello-theme-child-master/send-test-file.php" method="post" enctype="multipart/form-data">
name:
<input type="text" id="testName" name="testName" value="[7401]"><br>
email
<input type="text" id="testEmail" name="testEmail" value="testEmail"><br>
Select pdf to upload:
<input type="file" name="testFile" id="testFile">
<input type="text" id="testURL" name="testURL" value="[e2pdf-download id="31" output='url']"><br>
<input type="submit" value="Send File" name="submit">
</form>
我已经尝试过无数次重构代码,坦率地说,我被难倒了。
----------------编辑/更新-----------------------------------------
你好,谢谢你.在你的帮助下,我越来越接近.下面是我目前的代码和错误,我得到.如果有人可以再看看,看看他们是否能想到任何可能的原因.再次感谢!
<?php
if ($_FILES['testFile']['error'] !== UPLOAD_ERR_OK) {
die("File upload failed with error code " . $_FILES['testFile']['error']);
}
//$name = $_POST['testName'];
//$email = $_POST['testEmail'];
//$url = $_POST['testURL'];
//fopen($_FILES["UploadFileName"]["tmp_name"], 'r');
$file = $_FILES['testFile'];
runSend($file);
/*
$location = "/uploads/test/"_.$_FILENAME['testFile']['name']_;
$tmp_file = $_FILES['testFile']['tmp_name'];
move_uploaded_file($tmp_file, $location);
*/
function runSend($file){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.boldsign.com/v1/document/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$post = array(
'DisableExpiryAlert' => 'false',
'ReminderSettings.ReminderDays' => '5',
'BrandId' => '',
'ReminderSettings.ReminderCount' => '3',
'EnableReassign' => 'false',
'Message' => '',
'Signers[0][Name]' => 'Enter Name',
'Signers[0][EmailAddress]' => 'example@example.com.au',
'Signers[0][SignerOrder]' => '0',
'Signers[0][FormFields][0][FieldType]' => 'Signature',
'Signers[0][FormFields][0][Name]' => 'sign_field',
'Signers[0][FormFields][0][PageNumber]' => '1',
'Signers[0][FormFields][0][Bounds][X]' => '50',
'Signers[0][FormFields][0][Bounds][Y]' => '50',
'Signers[0][FormFields][0][Bounds][Width]' => '200',
'Signers[0][FormFields][0][Bounds][Height]' => '30',
'Signers[0][FormFields][0][IsRequired]' => 'true',
'ExpiryDays' => '30',
'EnablePrintAndSign' => 'false',
'AutoDetectFields' => 'false',
'OnBehalfOf' => '',
'EnableSigningOrder' => 'false',
'UseTextTags' => 'true',
'SendLinkValidTill' => '',
'Files' => new CURLFILE($file['tmp_name'].'.pdf'),
'Title' => 'testing',
'HideDocumentId' => 'false',
'EnableEmbeddedSigning' => 'false',
'ExpiryDateType' => 'Days',
'ReminderSettings.EnableAutoReminder' => 'true',
'ExpiryValue' => '60',
'DisableEmails' => 'false'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$headers = array();
$headers[] = 'Accept: application/json';
$headers[] = 'X-API-Key: GWAGsagsgaEAWT2545q3AF';
$headers[] = 'Content-Type: multipart/form-data';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
echo $result;
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo $httpcode;
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
};
?>
我目前收到的错误消息:0错误:无法打开文件“/tmp/phpWQLlLP.pdf”
2条答案
按热度按时间n53p2ov01#
根据提供的代码,有几种可能的原因导致您从API获得空响应数组。这里有一些需要检查的事项和潜在的解决方案:
1.变量范围问题:在runSend函数中,$url变量不在作用域中,这可能会在尝试访问其值时导致问题。您应该将$url变量作为参数传递给函数:
然后更新函数定义:
1.处理上传的文件:您将$file变量直接传递给CURLFile构造函数。但是,$file是一个关联数组,包含有关上传文件的信息。您应该将$file数组的tmp_name属性传递给构造函数:
1.使用API特定的内容类型:当通过cURL发送文件时,您可能需要设置特定的内容类型。在这种情况下,您应该在设置CURLOPT_POSTFIELDS选项后添加这一行:
1.调试API响应:要调试API响应,您可以在执行cURL请求后立即打印它:
通过这种方式,您可以查看API是否返回任何错误消息,或者问题是否在客户端。
1.错误处理:在继续cURL请求之前检查文件是否成功上传是一个很好的做法。您可以在获取$_FILES ['testFile']之后添加一个简单的文件上传检查:
这将帮助您识别文件上传过程本身的任何问题。
1.参数格式不正确:API可能需要不同的参数格式,例如JSON。请查看API文档,了解是否需要以特定格式对参数进行编码。
如果API需要JSON payload,您可以更改$post数组并使用json_encode将其转换为JSON字符串。然后,将Content-Type头设置为application/json。
下面是一个如何做到这一点的例子:
在实施这些更改后,您应该更好地了解问题的原因。请记住检查API文档以了解任何特定要求,并确保您的实施符合这些要求。如果您仍然存在问题,请考虑检查API日志或联系API支持以获得进一步帮助。
既然你使用的是wordpress,那么激活调试模式来查看日志文件中是否有错误也是一个好主意。
希望这个有用。
---编辑答案---
您似乎遇到了PHP脚本中的文件处理问题。错误消息表明脚本无法打开临时文件。
问题在以下行中:
您在临时文件名后面附加了'.pdf',这是不必要的。PHP生成的临时文件已经有一个唯一的名称,因此向其添加文件扩展名可能会导致脚本查找不存在的文件。
要解决此问题,请将该行更改为:
此外,您可能希望设置CURLFile的文件名和内容类型。您可以在创建CURLFile示例时通过传递其他参数来实现此目的:
这将确保文件被接收服务器正确识别。
最后,通过检查临时文件是否存在并且可读,确保文件上传正常工作:
在调用runSend函数之前添加这些行,以确保文件已上载且可访问。
我希望这有帮助!让我知道如果你有任何问题或需要进一步的帮助。
5vf7fwbs2#
目前尚不清楚最终结果是什么,但一旦为curl请求提供了合适的参数来处理API的SSL端点,以下内容似乎可以正常工作example.com。