|
64 | 64 | Route::view('/', 'welcome')->name('welcome'); |
65 | 65 | Route::redirect('pricing', 'blog/nativephp-for-mobile-is-now-free')->name('pricing'); |
66 | 66 | Route::view('alt-pricing', 'alt-pricing')->name('alt-pricing')->middleware('signed'); |
67 | | -Route::view('course', 'course')->name('course'); |
| 67 | +Route::get('course', function (\Illuminate\Http\Request $request) { |
| 68 | + $purchased = false; |
| 69 | + |
| 70 | + if ($request->has('session_id') && $request->user()) { |
| 71 | + try { |
| 72 | + $session = \Laravel\Cashier\Cashier::stripe()->checkout->sessions->retrieve($request->query('session_id')); |
| 73 | + |
| 74 | + if ($session->payment_status === 'paid' && ! empty($session->metadata['cart_id'])) { |
| 75 | + $cart = \App\Models\Cart::with('items.product')->find($session->metadata['cart_id']); |
| 76 | + |
| 77 | + if ($cart && ! $cart->isCompleted()) { |
| 78 | + $user = $request->user(); |
| 79 | + |
| 80 | + foreach ($cart->items as $item) { |
| 81 | + if ($item->isProduct() && $item->product) { |
| 82 | + if (! \App\Models\ProductLicense::where('user_id', $user->id)->where('product_id', $item->product_id)->exists()) { |
| 83 | + \App\Models\ProductLicense::create([ |
| 84 | + 'user_id' => $user->id, |
| 85 | + 'product_id' => $item->product_id, |
| 86 | + 'stripe_payment_intent_id' => $session->payment_intent, |
| 87 | + 'price_paid' => $item->product_price_at_addition, |
| 88 | + 'currency' => strtoupper($item->currency), |
| 89 | + 'purchased_at' => now(), |
| 90 | + ]); |
| 91 | + } |
| 92 | + } |
| 93 | + } |
| 94 | + |
| 95 | + $cart->markAsCompleted(); |
| 96 | + } |
| 97 | + |
| 98 | + $purchased = true; |
| 99 | + } |
| 100 | + } catch (\Exception $e) { |
| 101 | + \Illuminate\Support\Facades\Log::warning('Failed to verify checkout session', [ |
| 102 | + 'session_id' => $request->query('session_id'), |
| 103 | + 'error' => $e->getMessage(), |
| 104 | + ]); |
| 105 | + } |
| 106 | + } |
| 107 | + |
| 108 | + return view('course', ['purchased' => $purchased]); |
| 109 | +})->name('course'); |
68 | 110 |
|
69 | 111 | Route::post('course/checkout', function (\Illuminate\Http\Request $request) { |
70 | 112 | $user = $request->user(); |
|
106 | 148 | ], |
107 | 149 | 'quantity' => 1, |
108 | 150 | ]], |
109 | | - 'success_url' => route('course').'?purchased=1', |
| 151 | + 'success_url' => route('course').'?session_id={CHECKOUT_SESSION_ID}', |
110 | 152 | 'cancel_url' => route('course'), |
111 | 153 | 'customer' => $user->stripe_id, |
112 | 154 | 'metadata' => $metadata, |
|
0 commit comments