namespace App\Services\Checkout;
use App\Services\Checkout\Contracts\CheckoutRequester;
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Http;
use Payavel\Orchestration\ServiceRequest;
class StripeCheckoutRequest extends ServiceRequest implements CheckoutRequester
{
private $http;
protected function setUp(): void
{
$this->http = Http::asForm()
->baseUrl(Config::get('checkout.providers.stripe.base_url'))
->withToken(
Config::get("checkout.accounts.{$this->account->getId()}.providers.stripe.api_key")
)
->withHeader(
'Stripe-Account',
Config::get("checkout.accounts.{$this->account->getId()}.providers.stripe.account_id")
);
}
public function charge(array $data): StripeCheckoutResponse
{
$response = $this->http->post('v1/payment_intents', [
'amount' => $data['amount'],
'currency' => $data['currency'] ?? 'usd',
'payment_method' => $data['paymentMethod']['nonce'],
'confirm' => 'true',
'automatic_payment_methods' => [
'enabled' => 'true',
'allow_redirects' => 'never',
],
]);
return new StripeCheckoutResponse($response);
}
}