PHP CURL 脚本返回一个空数组

问题描述 投票:0回答:1

我只是在努力让这段代码工作时写信给你。我可以根据需要从命令行调用 api。在将它转换为 PHP 可读的 curl 后,我尝试从 php 函数调用它,它似乎发送但我只是得到一个空数组作为响应。它非常混乱,因为我之前从 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]' => '[email protected]',
    '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 forms curl post
1个回答
0
投票

根据提供的代码,您从 API 获得空响应数组的可能原因有多种。以下是一些需要检查的事项和可能的解决方案:

  1. 可变范围问题: 在 runSend 函数中,$url 变量不在范围内,这可能会在尝试访问其值时导致问题。您应该将 $url 变量作为参数传递给函数:
runSend($file, $name, $email, $url);

然后更新函数定义:

function runSend($file, $name, $email, $url){ ... }
  1. 处理上传的文件: 您将 $file 变量直接传递给 CURLFile 构造函数。但是,$file 是一个关联数组,其中包含有关上传文件的信息。您应该将 $file 数组的 tmp_name 属性传递给构造函数:
'Files' => new CURLFILE($file['tmp_name'])
  1. 使用特定于 API 的内容类型: 通过 cURL 发送文件时,您可能需要设置特定的内容类型。在这种情况下,您应该在设置 CURLOPT_POSTFIELDS 选项后立即添加此行:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data'));
  1. 调试API响应: 要调试 API 响应,您可以在执行 cURL 请求后立即打印它:
echo $result;

这样,您可以查看 API 是否返回任何错误消息,或者问题是否出在客户端。

  1. 错误处理: 在继续 cURL 请求之前,检查文件是否已成功上传是一种很好的做法。您可以通过在获取 $_FILES['testFile'] 后立即添加一个简单的文件上传检查来做到这一点:
if ($_FILES['testFile']['error'] !== UPLOAD_ERR_OK) {
    die("File upload failed with error code " . $_FILES['testFile']['error']);
}

这将帮助您确定文件上传过程本身的任何问题。

  1. 参数格式错误: API 可能需要不同格式的参数,例如 JSON。查看 API 文档以查看是否需要以特定格式对参数进行编码。

如果 API 需要 JSON 负载,您可以更改 $post 数组并使用 json_encode 将其转换为 JSON 字符串。然后,将 Content-Type 标头设置为 application/json。

这是一个如何做到这一点的例子:

$post = array(
    // Your parameters here
);

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'X-Api-Key: EXAM76242$PLEA32PIK555EY'));

实施这些更改后,您应该对问题的原因有更好的了解。请记住检查 API 文档以了解任何特定要求,并确保您的实施符合这些要求。如果您仍有问题,请考虑检查 API 日志或联系 API 支持以获得进一步帮助。

由于您使用的是 wordpress,因此激活调试模式以查看日志文件中是否出现错误也是一个好主意。

希望这有用。

© www.soinside.com 2019 - 2024. All rights reserved.