如何使用Laravel 5.5和Intervention Image从Amazon S3将图像文件上传到Stripe

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

Laravel 5.5应用程序。 我需要从Amazon S3检索驾驶执照的图像(已在工作),然后使用其api将其上载到Stripe进行身份验证(不起作用)。

Stripe的文档给出了以下示例:

\Stripe\Stripe::setApiKey(PLATFORM_SECRET_KEY);
\Stripe\FileUpload::create(
    array(
        "purpose" => "identity_document",
        "file" => fopen('/path/to/a/file.jpg', 'r')
    ),
    array("stripe_account" => CONNECTED_STRIPE_ACCOUNT_ID)
);

但是,我没有使用fopen()检索文件。 当我从Amazon S3中检索图像(使用自己的自定义方法)时,最终得到一个Intervention\\Image实例-本质上是Image::make($imageFromS3) ,并且我不知道如何转换它相当于对fopen('/path/to/a/file.jpg', 'r')的调用。 我尝试了以下方法:

$image->stream()

$image->stream()->__toString()

$image->stream('data-url')

$image->stream('data-url')->__toString()

我还尝试过跳过干预图像,仅使用Laravel的存储检索,例如:

$image = Storage::disk('s3')->get('path/to/file.jpg');

所有这些方法都会导致从Stripe获取Invalid hash异常。

从S3获取文件并将其转换为等效于fopen()调用的正确方法是什么?

php laravel laravel-5 stripe-connect intervention
1个回答
1
投票

如果S3上的文件是公共文件,则可以将URL传递给Stripe:

\Stripe\FileUpload::create(
    array(
        "purpose" => "identity_document",
        "file" => fopen(Storage::disk('s3')->url($file)),
    ),
    array("stripe_account" => CONNECTED_STRIPE_ACCOUNT_ID)
);

请注意,这需要在php.ini文件中打开allow_url_fopen

如果不是,那么您可以首先从S3抓取文件,将其写入临时文件,然后使用Stripe文档所说的fopen()方法:

// Retrieve file from S3...
$image = Storage::disk('s3')->get($file);

// Create temporary file with image content...
$tmp = tmpfile();
fwrite($tmp, $image);

// Reset file pointer to first byte so that we can read from it from the beginning...
fseek($tmp, 0);

// Upload temporary file to S3...
\Stripe\FileUpload::create(
    array(
        "purpose" => "identity_document",
        "file" => $tmp
    ),
    array("stripe_account" => CONNECTED_STRIPE_ACCOUNT_ID)
);

// Close temporary file and remove it...
fclose($tmp);

有关更多信息,请参见https://secure.php.net/manual/en/function.tmpfile.php

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