From b3ed2c5113eda3c533de0f33d37f96c76508fb00 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Mon, 24 Nov 2025 14:28:17 +0000 Subject: [PATCH 1/2] wip --- app/Enums/LicenseSource.php | 1 + .../OpenCollectiveWebhookController.php | 139 +++++++++ app/Http/Middleware/VerifyCsrfToken.php | 1 + config/services.php | 4 + routes/web.php | 4 + tests/Feature/OpenCollectiveWebhookTest.php | 264 ++++++++++++++++++ 6 files changed, 413 insertions(+) create mode 100644 app/Http/Controllers/OpenCollectiveWebhookController.php create mode 100644 tests/Feature/OpenCollectiveWebhookTest.php diff --git a/app/Enums/LicenseSource.php b/app/Enums/LicenseSource.php index 70e46ca8..9d1a7150 100644 --- a/app/Enums/LicenseSource.php +++ b/app/Enums/LicenseSource.php @@ -7,4 +7,5 @@ enum LicenseSource: string case Stripe = 'stripe'; case Bifrost = 'bifrost'; case Manual = 'manual'; + case OpenCollective = 'opencollective'; } diff --git a/app/Http/Controllers/OpenCollectiveWebhookController.php b/app/Http/Controllers/OpenCollectiveWebhookController.php new file mode 100644 index 00000000..c5ff42e1 --- /dev/null +++ b/app/Http/Controllers/OpenCollectiveWebhookController.php @@ -0,0 +1,139 @@ +verifySignature($request); + } + + $payload = $request->all(); + $type = $payload['type'] ?? null; + + Log::info('OpenCollective webhook received', [ + 'type' => $type, + 'payload' => $payload, + ]); + + // Handle different webhook types + match ($type) { + 'collective.transaction.created' => $this->handleContributionProcessed($payload), + default => Log::info('Unhandled OpenCollective webhook type', ['type' => $type]), + }; + + return response()->json(['status' => 'success']); + } + + protected function verifySignature(Request $request): void + { + $secret = config('services.opencollective.webhook_secret'); + $signature = $request->header('X-OpenCollective-Signature'); + + if (! $signature) { + abort(401, 'Missing webhook signature'); + } + + $payload = $request->getContent(); + $expectedSignature = hash_hmac('sha256', $payload, $secret); + + if (! hash_equals($expectedSignature, $signature)) { + abort(401, 'Invalid webhook signature'); + } + } + + protected function handleContributionProcessed(array $payload): void + { + $data = $payload['data'] ?? []; + + // Extract transaction details + $order = $data['order'] ?? []; + $fromAccount = $order['fromAccount'] ?? []; + + // Get contributor email and name + $email = $fromAccount['email'] ?? null; + $name = $fromAccount['name'] ?? null; + + if (! $email) { + Log::warning('OpenCollective contribution missing email', ['payload' => $payload]); + + return; + } + + // Check if this is a recurring contribution (monthly sponsor) + $frequency = $order['frequency'] ?? 'ONETIME'; + $amount = $data['amount'] ?? []; + $value = $amount['value'] ?? 0; + + // Only grant licenses for monthly sponsors above $10 + if ($frequency !== 'MONTHLY' || $value < 1000) { // Amount in cents + Log::info('OpenCollective contribution does not qualify for license', [ + 'email' => $email, + 'frequency' => $frequency, + 'value' => $value, + ]); + + return; + } + + // Find or create user + $user = User::firstOrCreate( + ['email' => $email], + [ + 'name' => $name ?? Str::before($email, '@'), + 'password' => Hash::make(Str::random(32)), + ] + ); + + // Check if user already has a Mini license from OpenCollective + $existingLicense = $user->licenses() + ->where('policy_name', Subscription::Mini->value) + ->where('source', LicenseSource::OpenCollective) + ->first(); + + if ($existingLicense) { + Log::info('User already has OpenCollective Mini license', [ + 'user_id' => $user->id, + 'license_id' => $existingLicense->id, + ]); + + return; + } + + // Create Mini license + $firstName = null; + $lastName = null; + + if ($name) { + $nameParts = explode(' ', $name, 2); + $firstName = $nameParts[0] ?? null; + $lastName = $nameParts[1] ?? null; + } + + CreateAnystackLicenseJob::dispatch( + user: $user, + subscription: Subscription::Mini, + subscriptionItemId: null, + firstName: $firstName, + lastName: $lastName, + source: LicenseSource::OpenCollective + ); + + Log::info('Mini license creation dispatched for OpenCollective sponsor', [ + 'user_id' => $user->id, + 'email' => $email, + ]); + } +} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php index a067f42e..0c163a38 100644 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ b/app/Http/Middleware/VerifyCsrfToken.php @@ -13,5 +13,6 @@ class VerifyCsrfToken extends Middleware */ protected $except = [ 'stripe/webhook', + 'opencollective/contribution', ]; } diff --git a/config/services.php b/config/services.php index 238da67e..1975aa89 100644 --- a/config/services.php +++ b/config/services.php @@ -38,4 +38,8 @@ 'bifrost' => [ 'api_key' => env('BIFROST_API_KEY'), ], + + 'opencollective' => [ + 'webhook_secret' => env('OPENCOLLECTIVE_WEBHOOK_SECRET'), + ], ]; diff --git a/routes/web.php b/routes/web.php index 8e4c6d86..3350a544 100644 --- a/routes/web.php +++ b/routes/web.php @@ -4,6 +4,7 @@ use App\Http\Controllers\Auth\CustomerAuthController; use App\Http\Controllers\CustomerLicenseController; use App\Http\Controllers\CustomerSubLicenseController; +use App\Http\Controllers\OpenCollectiveWebhookController; use App\Http\Controllers\ShowBlogController; use App\Http\Controllers\ShowDocumentationController; use Illuminate\Support\Facades\Route; @@ -32,6 +33,9 @@ Route::redirect('t-shirt', 'pricing'); Route::redirect('tshirt', 'pricing'); +// Webhook routes (must be outside web middleware for CSRF bypass) +Route::post('opencollective/contribution', [OpenCollectiveWebhookController::class, 'handle'])->name('opencollective.webhook'); + Route::view('/', 'welcome')->name('welcome'); Route::view('pricing', 'pricing')->name('pricing'); Route::view('alt-pricing', 'alt-pricing')->name('alt-pricing')->middleware('signed'); diff --git a/tests/Feature/OpenCollectiveWebhookTest.php b/tests/Feature/OpenCollectiveWebhookTest.php new file mode 100644 index 00000000..94b51906 --- /dev/null +++ b/tests/Feature/OpenCollectiveWebhookTest.php @@ -0,0 +1,264 @@ +post('/opencollective/contribution'); + + $this->assertNotEquals(404, $response->getStatusCode()); + } + + #[Test] + public function opencollective_webhook_route_is_excluded_from_csrf_verification(): void + { + $reflection = new \ReflectionClass(VerifyCsrfToken::class); + $property = $reflection->getProperty('except'); + $exceptPaths = $property->getValue(app(VerifyCsrfToken::class)); + + $this->assertContains('opencollective/contribution', $exceptPaths); + } + + #[Test] + public function it_creates_a_mini_license_for_monthly_sponsor_above_ten_dollars(): void + { + Queue::fake(); + + $payload = [ + 'type' => 'collective.transaction.created', + 'data' => [ + 'amount' => [ + 'value' => 1500, // $15 in cents + 'currency' => 'USD', + ], + 'order' => [ + 'frequency' => 'MONTHLY', + 'fromAccount' => [ + 'name' => 'John Doe', + 'email' => 'john@example.com', + ], + ], + ], + ]; + + $response = $this->postJson('/opencollective/contribution', $payload); + + $response->assertStatus(200); + $response->assertJson(['status' => 'success']); + + // Verify user was created + $this->assertDatabaseHas('users', [ + 'email' => 'john@example.com', + 'name' => 'John Doe', + ]); + + // Verify license creation job was dispatched + Queue::assertPushed(CreateAnystackLicenseJob::class, function ($job) { + return $job->user->email === 'john@example.com' + && $job->subscription === Subscription::Mini + && $job->source === LicenseSource::OpenCollective + && $job->firstName === 'John' + && $job->lastName === 'Doe'; + }); + } + + #[Test] + public function it_does_not_create_license_for_one_time_contributions(): void + { + Queue::fake(); + + $payload = [ + 'type' => 'collective.transaction.created', + 'data' => [ + 'amount' => [ + 'value' => 5000, // $50 in cents + 'currency' => 'USD', + ], + 'order' => [ + 'frequency' => 'ONETIME', + 'fromAccount' => [ + 'name' => 'Jane Doe', + 'email' => 'jane@example.com', + ], + ], + ], + ]; + + $response = $this->postJson('/opencollective/contribution', $payload); + + $response->assertStatus(200); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function it_does_not_create_license_for_monthly_contributions_below_ten_dollars(): void + { + Queue::fake(); + + $payload = [ + 'type' => 'collective.transaction.created', + 'data' => [ + 'amount' => [ + 'value' => 500, // $5 in cents + 'currency' => 'USD', + ], + 'order' => [ + 'frequency' => 'MONTHLY', + 'fromAccount' => [ + 'name' => 'Bob Smith', + 'email' => 'bob@example.com', + ], + ], + ], + ]; + + $response = $this->postJson('/opencollective/contribution', $payload); + + $response->assertStatus(200); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function it_does_not_create_duplicate_licenses_for_existing_opencollective_sponsors(): void + { + Queue::fake(); + + $user = User::factory()->create([ + 'email' => 'existing@example.com', + 'name' => 'Existing User', + ]); + + License::factory()->create([ + 'user_id' => $user->id, + 'policy_name' => Subscription::Mini->value, + 'source' => LicenseSource::OpenCollective, + ]); + + $payload = [ + 'type' => 'collective.transaction.created', + 'data' => [ + 'amount' => [ + 'value' => 1500, + 'currency' => 'USD', + ], + 'order' => [ + 'frequency' => 'MONTHLY', + 'fromAccount' => [ + 'name' => 'Existing User', + 'email' => 'existing@example.com', + ], + ], + ], + ]; + + $response = $this->postJson('/opencollective/contribution', $payload); + + $response->assertStatus(200); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function it_handles_missing_email_gracefully(): void + { + Queue::fake(); + + $payload = [ + 'type' => 'collective.transaction.created', + 'data' => [ + 'amount' => [ + 'value' => 1500, + 'currency' => 'USD', + ], + 'order' => [ + 'frequency' => 'MONTHLY', + 'fromAccount' => [ + 'name' => 'Anonymous', + ], + ], + ], + ]; + + $response = $this->postJson('/opencollective/contribution', $payload); + + $response->assertStatus(200); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function it_verifies_webhook_signature_when_secret_is_configured(): void + { + Config::set('services.opencollective.webhook_secret', 'test-secret'); + + $payload = [ + 'type' => 'collective.transaction.created', + 'data' => [], + ]; + + $response = $this->postJson('/opencollective/contribution', $payload); + + $response->assertStatus(401); + } + + #[Test] + public function it_accepts_valid_webhook_signature(): void + { + Queue::fake(); + + Config::set('services.opencollective.webhook_secret', 'test-secret'); + + $payload = [ + 'type' => 'collective.transaction.created', + 'data' => [ + 'amount' => [ + 'value' => 1500, + 'currency' => 'USD', + ], + 'order' => [ + 'frequency' => 'MONTHLY', + 'fromAccount' => [ + 'name' => 'Test User', + 'email' => 'test@example.com', + ], + ], + ], + ]; + + $payloadJson = json_encode($payload); + $signature = hash_hmac('sha256', $payloadJson, 'test-secret'); + + $response = $this->postJson('/opencollective/contribution', $payload, [ + 'X-OpenCollective-Signature' => $signature, + ]); + + $response->assertStatus(200); + } +} From ca90028f7d227aca2435c3a64103997ac838b217 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Wed, 17 Dec 2025 17:34:56 +0000 Subject: [PATCH 2/2] Correctly handle donations --- .../OpenCollectiveDonationResource.php | 154 +++++++++ .../Pages/ListOpenCollectiveDonations.php | 19 ++ .../Pages/ViewOpenCollectiveDonation.php | 19 ++ .../OpenCollectiveWebhookController.php | 100 ++---- app/Livewire/ClaimDonationLicense.php | 142 ++++++++ app/Models/OpenCollectiveDonation.php | 42 +++ .../OpenCollectiveDonationFactory.php | 40 +++ ..._create_opencollective_donations_table.php | 42 +++ .../seeders/OpenCollectiveDonationSeeder.php | 29 ++ public/img/opencollective.png | Bin 0 -> 168900 bytes .../livewire/claim-donation-license.blade.php | 169 ++++++++++ .../views/livewire/mobile-pricing.blade.php | 36 +- routes/web.php | 3 + tests/Feature/ClaimDonationLicenseTest.php | 316 ++++++++++++++++++ tests/Feature/OpenCollectiveWebhookTest.php | 251 ++++++-------- 15 files changed, 1132 insertions(+), 230 deletions(-) create mode 100644 app/Filament/Resources/OpenCollectiveDonationResource.php create mode 100644 app/Filament/Resources/OpenCollectiveDonationResource/Pages/ListOpenCollectiveDonations.php create mode 100644 app/Filament/Resources/OpenCollectiveDonationResource/Pages/ViewOpenCollectiveDonation.php create mode 100644 app/Livewire/ClaimDonationLicense.php create mode 100644 app/Models/OpenCollectiveDonation.php create mode 100644 database/factories/OpenCollectiveDonationFactory.php create mode 100644 database/migrations/2025_12_17_103019_create_opencollective_donations_table.php create mode 100644 database/seeders/OpenCollectiveDonationSeeder.php create mode 100644 public/img/opencollective.png create mode 100644 resources/views/livewire/claim-donation-license.blade.php create mode 100644 tests/Feature/ClaimDonationLicenseTest.php diff --git a/app/Filament/Resources/OpenCollectiveDonationResource.php b/app/Filament/Resources/OpenCollectiveDonationResource.php new file mode 100644 index 00000000..e1969676 --- /dev/null +++ b/app/Filament/Resources/OpenCollectiveDonationResource.php @@ -0,0 +1,154 @@ +schema([ + Infolists\Components\Section::make('Donation Details') + ->schema([ + Infolists\Components\TextEntry::make('order_id') + ->label('Order ID') + ->copyable(), + Infolists\Components\TextEntry::make('order_idv2') + ->label('Order ID (v2)') + ->copyable(), + Infolists\Components\TextEntry::make('amount') + ->formatStateUsing(fn ($state, $record) => Number::currency($state / 100, $record->currency)), + Infolists\Components\TextEntry::make('interval') + ->default('One-time'), + Infolists\Components\TextEntry::make('created_at') + ->label('Received') + ->dateTime(), + ])->columns(2), + Infolists\Components\Section::make('Contributor') + ->schema([ + Infolists\Components\TextEntry::make('from_collective_name') + ->label('Name'), + Infolists\Components\TextEntry::make('from_collective_slug') + ->label('Slug') + ->url(fn ($state) => "https://opencollective.com/{$state}") + ->openUrlInNewTab(), + Infolists\Components\TextEntry::make('from_collective_id') + ->label('Collective ID'), + ])->columns(3), + Infolists\Components\Section::make('Claim Status') + ->schema([ + Infolists\Components\IconEntry::make('claimed_at') + ->label('Claimed') + ->boolean() + ->trueIcon('heroicon-o-check-circle') + ->falseIcon('heroicon-o-x-circle') + ->trueColor('success') + ->falseColor('danger'), + Infolists\Components\TextEntry::make('claimed_at') + ->label('Claimed At') + ->dateTime() + ->placeholder('Not claimed'), + Infolists\Components\TextEntry::make('user.email') + ->label('Claimed By') + ->placeholder('Not claimed') + ->url(fn ($record) => $record->user_id ? UserResource::getUrl('edit', ['record' => $record->user_id]) : null), + ])->columns(3), + ]); + } + + public static function table(Table $table): Table + { + return $table + ->defaultSort('created_at', 'desc') + ->columns([ + Tables\Columns\TextColumn::make('order_id') + ->label('Order ID') + ->searchable() + ->sortable() + ->copyable(), + Tables\Columns\TextColumn::make('from_collective_name') + ->label('Contributor') + ->searchable() + ->sortable(), + Tables\Columns\TextColumn::make('amount') + ->formatStateUsing(fn ($state, $record) => Number::currency($state / 100, $record->currency)) + ->sortable(), + Tables\Columns\TextColumn::make('interval') + ->badge() + ->default('One-time') + ->color(fn (?string $state): string => $state ? 'success' : 'gray'), + Tables\Columns\IconColumn::make('claimed_at') + ->label('Claimed') + ->boolean() + ->trueIcon('heroicon-o-check-circle') + ->falseIcon('heroicon-o-clock') + ->trueColor('success') + ->falseColor('warning'), + Tables\Columns\TextColumn::make('user.email') + ->label('Claimed By') + ->searchable() + ->placeholder('-') + ->toggleable(), + Tables\Columns\TextColumn::make('created_at') + ->label('Received') + ->dateTime() + ->sortable(), + ]) + ->filters([ + Tables\Filters\Filter::make('claimed') + ->label('Claimed') + ->query(fn (Builder $query): Builder => $query->whereNotNull('claimed_at')), + Tables\Filters\Filter::make('unclaimed') + ->label('Unclaimed') + ->query(fn (Builder $query): Builder => $query->whereNull('claimed_at')), + Tables\Filters\Filter::make('recurring') + ->label('Recurring') + ->query(fn (Builder $query): Builder => $query->whereNotNull('interval')), + ]) + ->actions([ + Tables\Actions\ViewAction::make(), + ]); + } + + public static function getRelations(): array + { + return []; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListOpenCollectiveDonations::route('/'), + 'view' => Pages\ViewOpenCollectiveDonation::route('/{record}'), + ]; + } +} diff --git a/app/Filament/Resources/OpenCollectiveDonationResource/Pages/ListOpenCollectiveDonations.php b/app/Filament/Resources/OpenCollectiveDonationResource/Pages/ListOpenCollectiveDonations.php new file mode 100644 index 00000000..46f67d65 --- /dev/null +++ b/app/Filament/Resources/OpenCollectiveDonationResource/Pages/ListOpenCollectiveDonations.php @@ -0,0 +1,19 @@ + $this->handleContributionProcessed($payload), + 'order.processed' => $this->handleOrderProcessed($payload), default => Log::info('Unhandled OpenCollective webhook type', ['type' => $type]), }; @@ -54,86 +49,45 @@ protected function verifySignature(Request $request): void } } - protected function handleContributionProcessed(array $payload): void + protected function handleOrderProcessed(array $payload): void { + $webhookId = $payload['id'] ?? null; $data = $payload['data'] ?? []; - - // Extract transaction details $order = $data['order'] ?? []; - $fromAccount = $order['fromAccount'] ?? []; + $fromCollective = $data['fromCollective'] ?? []; - // Get contributor email and name - $email = $fromAccount['email'] ?? null; - $name = $fromAccount['name'] ?? null; + $orderId = $order['id'] ?? null; - if (! $email) { - Log::warning('OpenCollective contribution missing email', ['payload' => $payload]); + if (! $orderId) { + Log::warning('OpenCollective order.processed missing order ID', ['payload' => $payload]); return; } - // Check if this is a recurring contribution (monthly sponsor) - $frequency = $order['frequency'] ?? 'ONETIME'; - $amount = $data['amount'] ?? []; - $value = $amount['value'] ?? 0; - - // Only grant licenses for monthly sponsors above $10 - if ($frequency !== 'MONTHLY' || $value < 1000) { // Amount in cents - Log::info('OpenCollective contribution does not qualify for license', [ - 'email' => $email, - 'frequency' => $frequency, - 'value' => $value, - ]); + // Check if we've already processed this order + if (OpenCollectiveDonation::where('order_id', $orderId)->exists()) { + Log::info('OpenCollective order already processed', ['order_id' => $orderId]); return; } - // Find or create user - $user = User::firstOrCreate( - ['email' => $email], - [ - 'name' => $name ?? Str::before($email, '@'), - 'password' => Hash::make(Str::random(32)), - ] - ); - - // Check if user already has a Mini license from OpenCollective - $existingLicense = $user->licenses() - ->where('policy_name', Subscription::Mini->value) - ->where('source', LicenseSource::OpenCollective) - ->first(); - - if ($existingLicense) { - Log::info('User already has OpenCollective Mini license', [ - 'user_id' => $user->id, - 'license_id' => $existingLicense->id, - ]); - - return; - } - - // Create Mini license - $firstName = null; - $lastName = null; - - if ($name) { - $nameParts = explode(' ', $name, 2); - $firstName = $nameParts[0] ?? null; - $lastName = $nameParts[1] ?? null; - } + // Store the donation for later claiming + OpenCollectiveDonation::create([ + 'webhook_id' => $webhookId, + 'order_id' => $orderId, + 'order_idv2' => $order['idV2'] ?? null, + 'amount' => $order['totalAmount'] ?? 0, + 'currency' => $order['currency'] ?? 'USD', + 'interval' => $order['interval'] ?? null, + 'from_collective_id' => $fromCollective['id'] ?? $order['FromCollectiveId'] ?? 0, + 'from_collective_name' => $fromCollective['name'] ?? null, + 'from_collective_slug' => $fromCollective['slug'] ?? null, + 'raw_payload' => $payload, + ]); - CreateAnystackLicenseJob::dispatch( - user: $user, - subscription: Subscription::Mini, - subscriptionItemId: null, - firstName: $firstName, - lastName: $lastName, - source: LicenseSource::OpenCollective - ); - - Log::info('Mini license creation dispatched for OpenCollective sponsor', [ - 'user_id' => $user->id, - 'email' => $email, + Log::info('OpenCollective donation stored for claiming', [ + 'order_id' => $orderId, + 'amount' => $order['totalAmount'] ?? 0, ]); } } diff --git a/app/Livewire/ClaimDonationLicense.php b/app/Livewire/ClaimDonationLicense.php new file mode 100644 index 00000000..b6c21702 --- /dev/null +++ b/app/Livewire/ClaimDonationLicense.php @@ -0,0 +1,142 @@ + ['required', 'string'], + ]; + + // Only require these fields if user is not logged in + if (! Auth::check()) { + $rules['email'] = ['required', 'email', 'max:255']; + $rules['name'] = ['required', 'string', 'max:255']; + $rules['password'] = ['required', 'confirmed', Password::defaults()]; + } + + return $rules; + } + + protected $messages = [ + 'order_id.required' => 'Please enter your OpenCollective Transaction ID.', + ]; + + public function claim(): void + { + $this->validate(); + + // Find the donation by order ID + $donation = OpenCollectiveDonation::where('order_id', $this->order_id)->first(); + + if (! $donation) { + $this->addError('order_id', 'We could not find a donation with this order ID. Please check and try again.'); + + return; + } + + if ($donation->isClaimed()) { + $this->addError('order_id', 'This donation has already been claimed.'); + + return; + } + + // Check if any donation from this contributor has already been claimed + $alreadyClaimedByContributor = OpenCollectiveDonation::where('from_collective_id', $donation->from_collective_id) + ->whereNotNull('claimed_at') + ->exists(); + + if ($alreadyClaimedByContributor) { + $this->addError('order_id', 'A license has already been claimed for this OpenCollective account.'); + + return; + } + + // Get or create user + if (Auth::check()) { + $user = Auth::user(); + + // Verify they don't already have an OpenCollective license + $existingLicense = $user->licenses() + ->where('source', LicenseSource::OpenCollective) + ->first(); + + if ($existingLicense) { + $this->addError('order_id', 'You already have a license from OpenCollective.'); + + return; + } + } else { + // Check if email already exists + $existingUser = User::where('email', $this->email)->first(); + + if ($existingUser) { + // Email exists but user isn't logged in - tell them to log in + $this->addError('email', 'An account with this email already exists. Please log in first, then return to claim your license.'); + + return; + } + + // Create new user + $user = User::create([ + 'email' => $this->email, + 'name' => $this->name, + 'password' => Hash::make($this->password), + ]); + } + + // Parse name for first/last + $name = Auth::check() ? $user->name : $this->name; + $nameParts = explode(' ', $name, 2); + $firstName = $nameParts[0] ?? null; + $lastName = $nameParts[1] ?? null; + + // Create the license + CreateAnystackLicenseJob::dispatch( + user: $user, + subscription: Subscription::Mini, + subscriptionItemId: null, + firstName: $firstName, + lastName: $lastName, + source: LicenseSource::OpenCollective + ); + + // Mark donation as claimed + $donation->markAsClaimed($user); + + // Log the user in + Auth::login($user); + + $this->claimed = true; + } + + public function render() + { + return view('livewire.claim-donation-license') + ->layout('components.layout', ['title' => 'Claim Your License']); + } +} diff --git a/app/Models/OpenCollectiveDonation.php b/app/Models/OpenCollectiveDonation.php new file mode 100644 index 00000000..070be6ab --- /dev/null +++ b/app/Models/OpenCollectiveDonation.php @@ -0,0 +1,42 @@ + 'array', + 'claimed_at' => 'datetime', + ]; + + /** + * @return BelongsTo + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + public function isClaimed(): bool + { + return $this->claimed_at !== null; + } + + public function markAsClaimed(User $user): void + { + $this->update([ + 'user_id' => $user->id, + 'claimed_at' => now(), + ]); + } +} diff --git a/database/factories/OpenCollectiveDonationFactory.php b/database/factories/OpenCollectiveDonationFactory.php new file mode 100644 index 00000000..ca8535da --- /dev/null +++ b/database/factories/OpenCollectiveDonationFactory.php @@ -0,0 +1,40 @@ + + */ +class OpenCollectiveDonationFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'webhook_id' => fake()->unique()->randomNumber(6), + 'order_id' => fake()->unique()->randomNumber(5), + 'order_idv2' => fake()->uuid(), + 'amount' => fake()->numberBetween(1000, 10000), + 'currency' => 'USD', + 'interval' => null, + 'from_collective_id' => fake()->randomNumber(5), + 'from_collective_name' => fake()->name(), + 'from_collective_slug' => fake()->slug(2), + 'raw_payload' => [], + ]; + } + + public function claimed(): static + { + return $this->state(fn (array $attributes) => [ + 'user_id' => \App\Models\User::factory(), + 'claimed_at' => now(), + ]); + } +} diff --git a/database/migrations/2025_12_17_103019_create_opencollective_donations_table.php b/database/migrations/2025_12_17_103019_create_opencollective_donations_table.php new file mode 100644 index 00000000..8cd83672 --- /dev/null +++ b/database/migrations/2025_12_17_103019_create_opencollective_donations_table.php @@ -0,0 +1,42 @@ +id(); + $table->unsignedBigInteger('webhook_id')->unique(); + $table->unsignedBigInteger('order_id')->unique(); + $table->string('order_idv2')->nullable(); + $table->unsignedInteger('amount'); + $table->string('currency', 3)->default('USD'); + $table->string('interval')->nullable(); + $table->unsignedBigInteger('from_collective_id'); + $table->string('from_collective_name')->nullable(); + $table->string('from_collective_slug')->nullable(); + $table->json('raw_payload'); + $table->foreignId('user_id')->nullable()->constrained()->nullOnDelete(); + $table->timestamp('claimed_at')->nullable(); + $table->timestamps(); + + $table->index('order_id'); + $table->index(['claimed_at', 'order_id']); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('opencollective_donations'); + } +}; diff --git a/database/seeders/OpenCollectiveDonationSeeder.php b/database/seeders/OpenCollectiveDonationSeeder.php new file mode 100644 index 00000000..481c5a20 --- /dev/null +++ b/database/seeders/OpenCollectiveDonationSeeder.php @@ -0,0 +1,29 @@ +count(3)->create(); + + // Create a couple of claimed donations + OpenCollectiveDonation::factory() + ->count(2) + ->claimed() + ->create(); + + // Create one with a specific order ID for easy testing + OpenCollectiveDonation::factory()->create([ + 'order_id' => 12345, + 'from_collective_name' => 'Test Donor', + 'from_collective_slug' => 'test-donor', + 'amount' => 5000, + ]); + } +} diff --git a/public/img/opencollective.png b/public/img/opencollective.png new file mode 100644 index 0000000000000000000000000000000000000000..3602e57085e476bd956e4fbc24d655b27be247a4 GIT binary patch literal 168900 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 z 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 Hu0mjf-_%$T literal 0 HcmV?d00001 diff --git a/resources/views/livewire/claim-donation-license.blade.php b/resources/views/livewire/claim-donation-license.blade.php new file mode 100644 index 00000000..7adfcd49 --- /dev/null +++ b/resources/views/livewire/claim-donation-license.blade.php @@ -0,0 +1,169 @@ + diff --git a/resources/views/livewire/mobile-pricing.blade.php b/resources/views/livewire/mobile-pricing.blade.php index 355107bd..71bc19df 100644 --- a/resources/views/livewire/mobile-pricing.blade.php +++ b/resources/views/livewire/mobile-pricing.blade.php @@ -100,7 +100,7 @@ class="rounded-full bg-zinc-300 px-4 dark:bg-zinc-600" {{-- Price --}}
FREE
@@ -118,11 +118,41 @@ class="underline underline-offset-2 transition-colors hover:text-zinc-400 dark:t - Get started + Get started with Bifrost + {{-- OpenCollective Alternative --}} +
+
+
+
+
+ or +
+
+ + +
@endif diff --git a/routes/web.php b/routes/web.php index 3350a544..6da4ae92 100644 --- a/routes/web.php +++ b/routes/web.php @@ -36,6 +36,9 @@ // Webhook routes (must be outside web middleware for CSRF bypass) Route::post('opencollective/contribution', [OpenCollectiveWebhookController::class, 'handle'])->name('opencollective.webhook'); +// OpenCollective donation claim route +Route::get('opencollective/claim', App\Livewire\ClaimDonationLicense::class)->name('opencollective.claim'); + Route::view('/', 'welcome')->name('welcome'); Route::view('pricing', 'pricing')->name('pricing'); Route::view('alt-pricing', 'alt-pricing')->name('alt-pricing')->middleware('signed'); diff --git a/tests/Feature/ClaimDonationLicenseTest.php b/tests/Feature/ClaimDonationLicenseTest.php new file mode 100644 index 00000000..2ea40e90 --- /dev/null +++ b/tests/Feature/ClaimDonationLicenseTest.php @@ -0,0 +1,316 @@ +get('/opencollective/claim'); + + $response->assertStatus(200); + $response->assertSeeLivewire(ClaimDonationLicense::class); + } + + #[Test] + public function user_can_claim_a_valid_donation(): void + { + Queue::fake(); + + $donation = OpenCollectiveDonation::factory()->create([ + 'order_id' => 51763, + ]); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->set('name', 'John Doe') + ->set('email', 'john@example.com') + ->set('password', 'password123') + ->set('password_confirmation', 'password123') + ->call('claim') + ->assertSet('claimed', true); + + // Verify user was created + $this->assertDatabaseHas('users', [ + 'email' => 'john@example.com', + 'name' => 'John Doe', + ]); + + // Verify donation was marked as claimed + $donation->refresh(); + $this->assertTrue($donation->isClaimed()); + $this->assertNotNull($donation->user_id); + + // Verify license creation job was dispatched + Queue::assertPushed(CreateAnystackLicenseJob::class, function ($job) { + return $job->user->email === 'john@example.com' + && $job->subscription === Subscription::Mini + && $job->source === LicenseSource::OpenCollective + && $job->firstName === 'John' + && $job->lastName === 'Doe'; + }); + } + + #[Test] + public function claim_fails_with_invalid_order_id(): void + { + Queue::fake(); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '99999') + ->set('name', 'John Doe') + ->set('email', 'john@example.com') + ->set('password', 'password123') + ->set('password_confirmation', 'password123') + ->call('claim') + ->assertHasErrors(['order_id']) + ->assertSet('claimed', false); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function claim_fails_for_already_claimed_donation(): void + { + Queue::fake(); + + $user = User::factory()->create(); + $donation = OpenCollectiveDonation::factory()->claimed()->create([ + 'order_id' => 51763, + 'user_id' => $user->id, + ]); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->set('name', 'Jane Doe') + ->set('email', 'jane@example.com') + ->set('password', 'password123') + ->set('password_confirmation', 'password123') + ->call('claim') + ->assertHasErrors(['order_id']) + ->assertSet('claimed', false); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function claim_fails_if_contributor_already_claimed_another_donation(): void + { + Queue::fake(); + + $user = User::factory()->create(); + + // First donation from this contributor - already claimed + OpenCollectiveDonation::factory()->claimed()->create([ + 'order_id' => 11111, + 'from_collective_id' => 99999, + 'user_id' => $user->id, + ]); + + // Second donation from the same contributor - not yet claimed + $donation = OpenCollectiveDonation::factory()->create([ + 'order_id' => 22222, + 'from_collective_id' => 99999, + ]); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '22222') + ->set('name', 'Jane Doe') + ->set('email', 'jane@example.com') + ->set('password', 'password123') + ->set('password_confirmation', 'password123') + ->call('claim') + ->assertHasErrors(['order_id']) + ->assertSet('claimed', false); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + + // Verify the donation was not claimed + $this->assertNull($donation->fresh()->claimed_at); + } + + #[Test] + public function existing_user_not_logged_in_is_told_to_log_in_first(): void + { + Queue::fake(); + + $user = User::factory()->create([ + 'email' => 'john@example.com', + ]); + + $donation = OpenCollectiveDonation::factory()->create([ + 'order_id' => 51763, + ]); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->set('name', 'John Doe') + ->set('email', 'john@example.com') + ->set('password', 'password123') + ->set('password_confirmation', 'password123') + ->call('claim') + ->assertHasErrors(['email']) + ->assertSet('claimed', false); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function logged_in_user_cannot_claim_if_they_already_have_opencollective_license(): void + { + Queue::fake(); + + $user = User::factory()->create([ + 'email' => 'john@example.com', + ]); + + License::factory()->create([ + 'user_id' => $user->id, + 'source' => LicenseSource::OpenCollective, + ]); + + $donation = OpenCollectiveDonation::factory()->create([ + 'order_id' => 51763, + ]); + + $this->actingAs($user); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->call('claim') + ->assertHasErrors(['order_id']) + ->assertSet('claimed', false); + + Queue::assertNotPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function logged_in_user_without_opencollective_license_can_claim(): void + { + Queue::fake(); + + $user = User::factory()->create([ + 'email' => 'john@example.com', + 'name' => 'John Doe', + ]); + + // User has a Stripe license, not OpenCollective + License::factory()->create([ + 'user_id' => $user->id, + 'source' => LicenseSource::Stripe, + ]); + + $donation = OpenCollectiveDonation::factory()->create([ + 'order_id' => 51763, + ]); + + $this->actingAs($user); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->call('claim') + ->assertSet('claimed', true); + + Queue::assertPushed(CreateAnystackLicenseJob::class); + + // Verify donation was claimed by the existing user + $donation->refresh(); + $this->assertEquals($user->id, $donation->user_id); + } + + #[Test] + public function logged_in_user_only_needs_order_id_to_claim(): void + { + Queue::fake(); + + $user = User::factory()->create(); + + $donation = OpenCollectiveDonation::factory()->create([ + 'order_id' => 51763, + ]); + + $this->actingAs($user); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->call('claim') + ->assertHasNoErrors() + ->assertSet('claimed', true); + + Queue::assertPushed(CreateAnystackLicenseJob::class); + } + + #[Test] + public function validation_requires_all_fields_for_guests(): void + { + Livewire::test(ClaimDonationLicense::class) + ->call('claim') + ->assertHasErrors(['order_id', 'name', 'email', 'password']); + } + + #[Test] + public function validation_only_requires_order_id_for_logged_in_users(): void + { + $user = User::factory()->create(); + + $this->actingAs($user); + + Livewire::test(ClaimDonationLicense::class) + ->call('claim') + ->assertHasErrors(['order_id']) + ->assertHasNoErrors(['name', 'email', 'password']); + } + + #[Test] + public function password_confirmation_must_match(): void + { + OpenCollectiveDonation::factory()->create([ + 'order_id' => 51763, + ]); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->set('name', 'John Doe') + ->set('email', 'john@example.com') + ->set('password', 'password123') + ->set('password_confirmation', 'different') + ->call('claim') + ->assertHasErrors(['password']); + } + + #[Test] + public function user_is_logged_in_after_claiming(): void + { + Queue::fake(); + + $donation = OpenCollectiveDonation::factory()->create([ + 'order_id' => 51763, + ]); + + Livewire::test(ClaimDonationLicense::class) + ->set('order_id', '51763') + ->set('name', 'John Doe') + ->set('email', 'john@example.com') + ->set('password', 'password123') + ->set('password_confirmation', 'password123') + ->call('claim'); + + $this->assertAuthenticated(); + } +} diff --git a/tests/Feature/OpenCollectiveWebhookTest.php b/tests/Feature/OpenCollectiveWebhookTest.php index 94b51906..7267f6b3 100644 --- a/tests/Feature/OpenCollectiveWebhookTest.php +++ b/tests/Feature/OpenCollectiveWebhookTest.php @@ -2,15 +2,10 @@ namespace Tests\Feature; -use App\Enums\LicenseSource; -use App\Enums\Subscription; use App\Http\Middleware\VerifyCsrfToken; -use App\Jobs\CreateAnystackLicenseJob; -use App\Models\License; -use App\Models\User; +use App\Models\OpenCollectiveDonation; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Config; -use Illuminate\Support\Facades\Queue; use PHPUnit\Framework\Attributes\Test; use Tests\TestCase; @@ -45,220 +40,168 @@ public function opencollective_webhook_route_is_excluded_from_csrf_verification( } #[Test] - public function it_creates_a_mini_license_for_monthly_sponsor_above_ten_dollars(): void + public function it_stores_donation_for_order_processed_webhook(): void { - Queue::fake(); - - $payload = [ - 'type' => 'collective.transaction.created', - 'data' => [ - 'amount' => [ - 'value' => 1500, // $15 in cents - 'currency' => 'USD', - ], - 'order' => [ - 'frequency' => 'MONTHLY', - 'fromAccount' => [ - 'name' => 'John Doe', - 'email' => 'john@example.com', - ], - ], - ], - ]; + $payload = $this->getOrderProcessedPayload(); $response = $this->postJson('/opencollective/contribution', $payload); $response->assertStatus(200); $response->assertJson(['status' => 'success']); - // Verify user was created - $this->assertDatabaseHas('users', [ - 'email' => 'john@example.com', - 'name' => 'John Doe', + $this->assertDatabaseHas('opencollective_donations', [ + 'webhook_id' => 335409, + 'order_id' => 51763, + 'order_idv2' => '88rzownx-l9e50pxj-z836ymvb-dgk7j43a', + 'amount' => 2000, + 'currency' => 'USD', + 'interval' => null, + 'from_collective_id' => 54797, + 'from_collective_name' => 'Testing User', + 'from_collective_slug' => 'sudharaka', ]); - - // Verify license creation job was dispatched - Queue::assertPushed(CreateAnystackLicenseJob::class, function ($job) { - return $job->user->email === 'john@example.com' - && $job->subscription === Subscription::Mini - && $job->source === LicenseSource::OpenCollective - && $job->firstName === 'John' - && $job->lastName === 'Doe'; - }); } #[Test] - public function it_does_not_create_license_for_one_time_contributions(): void + public function it_does_not_store_duplicate_orders(): void { - Queue::fake(); + $payload = $this->getOrderProcessedPayload(); - $payload = [ - 'type' => 'collective.transaction.created', - 'data' => [ - 'amount' => [ - 'value' => 5000, // $50 in cents - 'currency' => 'USD', - ], - 'order' => [ - 'frequency' => 'ONETIME', - 'fromAccount' => [ - 'name' => 'Jane Doe', - 'email' => 'jane@example.com', - ], - ], - ], - ]; + // First webhook + $this->postJson('/opencollective/contribution', $payload); + // Second webhook with same order $response = $this->postJson('/opencollective/contribution', $payload); $response->assertStatus(200); - - Queue::assertNotPushed(CreateAnystackLicenseJob::class); + $this->assertDatabaseCount('opencollective_donations', 1); } #[Test] - public function it_does_not_create_license_for_monthly_contributions_below_ten_dollars(): void + public function it_handles_missing_order_id_gracefully(): void { - Queue::fake(); - $payload = [ - 'type' => 'collective.transaction.created', + 'id' => 335409, + 'type' => 'order.processed', 'data' => [ - 'amount' => [ - 'value' => 500, // $5 in cents - 'currency' => 'USD', - ], - 'order' => [ - 'frequency' => 'MONTHLY', - 'fromAccount' => [ - 'name' => 'Bob Smith', - 'email' => 'bob@example.com', - ], - ], + 'order' => [], ], ]; $response = $this->postJson('/opencollective/contribution', $payload); $response->assertStatus(200); - - Queue::assertNotPushed(CreateAnystackLicenseJob::class); + $this->assertDatabaseCount('opencollective_donations', 0); } #[Test] - public function it_does_not_create_duplicate_licenses_for_existing_opencollective_sponsors(): void + public function it_verifies_webhook_signature_when_secret_is_configured(): void { - Queue::fake(); - - $user = User::factory()->create([ - 'email' => 'existing@example.com', - 'name' => 'Existing User', - ]); + Config::set('services.opencollective.webhook_secret', 'test-secret'); - License::factory()->create([ - 'user_id' => $user->id, - 'policy_name' => Subscription::Mini->value, - 'source' => LicenseSource::OpenCollective, - ]); - - $payload = [ - 'type' => 'collective.transaction.created', - 'data' => [ - 'amount' => [ - 'value' => 1500, - 'currency' => 'USD', - ], - 'order' => [ - 'frequency' => 'MONTHLY', - 'fromAccount' => [ - 'name' => 'Existing User', - 'email' => 'existing@example.com', - ], - ], - ], - ]; + $payload = $this->getOrderProcessedPayload(); $response = $this->postJson('/opencollective/contribution', $payload); - $response->assertStatus(200); - - Queue::assertNotPushed(CreateAnystackLicenseJob::class); + $response->assertStatus(401); } #[Test] - public function it_handles_missing_email_gracefully(): void + public function it_accepts_valid_webhook_signature(): void { - Queue::fake(); + Config::set('services.opencollective.webhook_secret', 'test-secret'); - $payload = [ - 'type' => 'collective.transaction.created', - 'data' => [ - 'amount' => [ - 'value' => 1500, - 'currency' => 'USD', - ], - 'order' => [ - 'frequency' => 'MONTHLY', - 'fromAccount' => [ - 'name' => 'Anonymous', - ], - ], - ], - ]; + $payload = $this->getOrderProcessedPayload(); - $response = $this->postJson('/opencollective/contribution', $payload); + $payloadJson = json_encode($payload); + $signature = hash_hmac('sha256', $payloadJson, 'test-secret'); - $response->assertStatus(200); + $response = $this->postJson('/opencollective/contribution', $payload, [ + 'X-OpenCollective-Signature' => $signature, + ]); - Queue::assertNotPushed(CreateAnystackLicenseJob::class); + $response->assertStatus(200); } #[Test] - public function it_verifies_webhook_signature_when_secret_is_configured(): void + public function it_handles_unhandled_webhook_types(): void { - Config::set('services.opencollective.webhook_secret', 'test-secret'); - $payload = [ - 'type' => 'collective.transaction.created', + 'id' => 12345, + 'type' => 'some.other.event', 'data' => [], ]; $response = $this->postJson('/opencollective/contribution', $payload); - $response->assertStatus(401); + $response->assertStatus(200); + $response->assertJson(['status' => 'success']); } #[Test] - public function it_accepts_valid_webhook_signature(): void + public function donation_can_be_marked_as_claimed(): void { - Queue::fake(); + $donation = OpenCollectiveDonation::factory()->create(); + $user = \App\Models\User::factory()->create(); - Config::set('services.opencollective.webhook_secret', 'test-secret'); + $this->assertFalse($donation->isClaimed()); - $payload = [ - 'type' => 'collective.transaction.created', + $donation->markAsClaimed($user); + + $this->assertTrue($donation->fresh()->isClaimed()); + $this->assertEquals($user->id, $donation->fresh()->user_id); + $this->assertNotNull($donation->fresh()->claimed_at); + } + + protected function getOrderProcessedPayload(): array + { + return [ + 'createdAt' => '2025-12-04T16:20:34.260Z', + 'id' => 335409, + 'type' => 'order.processed', + 'CollectiveId' => 20206, 'data' => [ - 'amount' => [ - 'value' => 1500, + 'firstPayment' => true, + 'order' => [ + 'idV2' => '88rzownx-l9e50pxj-z836ymvb-dgk7j43a', + 'id' => 51763, + 'totalAmount' => 2000, 'currency' => 'USD', + 'description' => 'Financial contribution to BackYourStack', + 'tags' => null, + 'interval' => null, + 'createdAt' => '2025-12-04T16:20:31.861Z', + 'quantity' => 1, + 'FromCollectiveId' => 54797, + 'TierId' => null, + 'formattedAmount' => '$20.00', + 'formattedAmountWithInterval' => '$20.00', ], - 'order' => [ - 'frequency' => 'MONTHLY', - 'fromAccount' => [ - 'name' => 'Test User', - 'email' => 'test@example.com', - ], + 'host' => [ + 'idV2' => '8a47byg9-nxozdp80-xm6mjlv0-3rek5w8k', + 'id' => 11004, + 'type' => 'ORGANIZATION', + 'slug' => 'opensource', + 'name' => 'Open Source Collective', + ], + 'collective' => [ + 'idV2' => 'rvedj9wr-oz3a56d3-d35p7blg-8x4m0ykn', + 'id' => 20206, + 'type' => 'COLLECTIVE', + 'slug' => 'backyourstack', + 'name' => 'BackYourStack', + ], + 'fromCollective' => [ + 'idV2' => 'eeng0kzd-yvor4pz7-37gqbma8-37xlw95j', + 'id' => 54797, + 'type' => 'USER', + 'slug' => 'sudharaka', + 'name' => 'Testing User', + 'twitterHandle' => null, + 'githubHandle' => 'SudharakaP', + 'repositoryUrl' => 'https://github.com/test', ], ], ]; - - $payloadJson = json_encode($payload); - $signature = hash_hmac('sha256', $payloadJson, 'test-secret'); - - $response = $this->postJson('/opencollective/contribution', $payload, [ - 'X-OpenCollective-Signature' => $signature, - ]); - - $response->assertStatus(200); } }
+
+ @if ($claimed) + + @else +
+

+ Claim Your License +

+

+ Thank you for supporting NativePHP via OpenCollective! +
Enter your details below to claim your Mini license. +

+
+ +
+
+ @auth +
+

+ Claiming as {{ auth()->user()->email }} +

+
+ @endauth + +
+ + + @error('order_id') +

{{ $message }}

+ @enderror +
+ + @guest +
+ + + @error('name') +

{{ $message }}

+ @enderror +
+ +
+ + + @error('email') +

{{ $message }}

+ @enderror +
+ +
+ + + @error('password') +

{{ $message }}

+ @enderror +
+ +
+ + +
+ @endguest +
+ +
+ +
+ + @guest +

+ Already have an account? + + Sign in + +

+ @endguest +
+ +
+

+ How to find your Transaction ID +

+

+ You can find your Transaction ID on your OpenCollective transactions page. +

+
+ Screenshot showing where to find your OpenCollective Transaction ID +
+
+ @endif +
+