Add event addon purchase success page with confetti
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-02-07 17:04:14 +01:00
parent 64b3bf3ed4
commit c0c082975e
15 changed files with 837 additions and 7 deletions

View File

@@ -86,6 +86,8 @@ class EventAddonCheckoutService
$addonMetadata = $this->resolveAddonMetadata($addon);
$entitlements = $this->resolveAddonEntitlements($addonKey, $addonMetadata);
$price = $this->catalog->resolvePrice($addonKey);
$successUrl = $this->appendQueryParam($payload['success_url'] ?? null, 'addon_intent', $addonIntent);
$cancelUrl = $this->appendQueryParam($payload['cancel_url'] ?? null, 'addon_intent', $addonIntent);
$providerMetadata = array_filter([
'tenant_id' => (string) $tenant->id,
@@ -98,13 +100,13 @@ class EventAddonCheckoutService
'legal_version' => $this->resolveLegalVersion(),
'accepted_terms' => $acceptedTerms ? '1' : '0',
'accepted_waiver' => $acceptedWaiver ? '1' : '0',
'success_url' => $payload['success_url'] ?? null,
'cancel_url' => $payload['cancel_url'] ?? null,
'success_url' => $successUrl,
'cancel_url' => $cancelUrl,
], static fn ($value) => $value !== null && $value !== '');
$response = $this->checkout->createVariantCheckout($variantId, $providerMetadata, [
'success_url' => $payload['success_url'] ?? null,
'return_url' => $payload['cancel_url'] ?? null,
'success_url' => $successUrl,
'return_url' => $cancelUrl,
'customer_email' => $tenant->contact_email ?? $tenant->user?->email,
]);
@@ -227,7 +229,9 @@ class EventAddonCheckoutService
]);
$successUrl = $payload['success_url'] ?? null;
$successUrl = $this->appendQueryParam($successUrl, 'addon_intent', $addonIntent);
$cancelUrl = $payload['cancel_url'] ?? $successUrl;
$cancelUrl = $this->appendQueryParam($cancelUrl, 'addon_intent', $addonIntent);
$paypalReturnUrl = route('paypal.addon.return', absolute: true);
try {
@@ -312,6 +316,23 @@ class EventAddonCheckoutService
return config('app.legal_version', now()->toDateString());
}
protected function appendQueryParam(?string $url, string $key, string $value): ?string
{
if (! is_string($url) || trim($url) === '') {
return null;
}
[$base, $fragment] = array_pad(explode('#', $url, 2), 2, null);
$separator = str_contains($base, '?') ? '&' : '?';
$next = $base.$separator.rawurlencode($key).'='.rawurlencode($value);
if ($fragment === null) {
return $next;
}
return $next.'#'.$fragment;
}
/**
* @param array<string, mixed> $addon
*/