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()
调用的正确方法是什么?
如果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 。