Невозможно загрузить файл в Wufoo, используя их REST API

На веб-сайте, который я создаю, мы используем формы Wufoo для централизации данных. Так что у меня есть тривиальная форма, которую я должен отправить в Wufoo, используя их оставшийся API.

Я сделал все в соответствии с их документацией, но я все еще получаю сообщение об ошибке при отправке запроса POST в их конечную точку.

Вот так выглядит мой запрос:

$ref = curl_init('https://{domain}.wufoo.com/api/v3/forms/' . WUFOO_FORM_HASH . '/entries.json');
curl_setopt($ref, CURLOPT_HTTPHEADER, array('Content-type: multipart/form-data'));
curl_setopt($ref, CURLOPT_POST, true);
curl_setopt($ref, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ref, CURLOPT_POSTFIELDS, $_formData);
curl_setopt($ref, CURLOPT_USERPWD, WUFOO_API_KEY . ':X');
curl_setopt($ref, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ref, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ref, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($ref, CURLOPT_FOLLOWLOCATION, true);
$result = json_decode(curl_exec($ref), true);

И это массив $_formData:

Array
(
    [Field4] => firstname
    [Field3] => lastname
    [Field5] => email@test.com
    [Field110] => @/var/tmp/random_name/test.txt
)

Всякий раз, когда я прикрепляю файл к запросу в Field110, запрос завершается с ошибкой:

Array
(
    [Success] => 0
    [ErrorText] => Errors have been <b>highlighted</b> below.
    [FieldErrors] => Array
        (
            [0] => Array
                (
                    [ID] => Field110
                    [ErrorText] => This file was NOT successfully uploaded. Please try again.
                )

        )

)

Кто-нибудь сталкивался с этой проблемой раньше и знает какие-либо решения? Я должен упомянуть, что я ДОЛЖЕН использовать API отдыха Wufoo для отправки этого.

2 ответа

Значение для [Field110] должен быть объектом файла CURL.

Я нашел решение на Github ( https://github.com/wufoo/Wufoo-PHP-API-Wrapper/pull/10/commits/094d64436cee405739f5b39bc28f745afed65eb3), которое включает следующую строку:

$curl_file = curl_file_create($this->value, mime_content_type($this->value), pathinfo($this->value, PATHINFO_BASENAME));

Возможно, вам придется заменить $this->valueпросто убедитесь, что он получает значение /var/tmp/random_name/test.txt и передать $curl_file в [Field110],

Если вы хотите увидеть еще одну иллюстрацию, я фактически реализовал это в плагине WordPress: https://github.com/friendofdog/better_wfi_wordpress/blob/master/front/post-intermediary.php. Осмотрите линию 77.

Согласно сообщению об ошибке файл не был успешно загружен. Это означает, что существует проблема с путем, размером или типом файла.

Максимальный размер файла составляет 10 МБ, а для всех полей в одной форме - 20 МБ.

Почему вы не используете Wufoo API PHP Wrapper, он позволяет, среди прочего, публиковать записи с файлами....

Другие вопросы по тегам