1
1
<?php
2
2
3
- declare (strict_types= 1 );
3
+ declare (strict_types = 1 );
4
4
5
5
namespace App \Filament \Actions ;
6
6
7
- use Closure ;
8
- use Stripe \Stripe ;
9
- use Illuminate \View \View ;
10
- use Illuminate \Support \Arr ;
7
+ use App \Data \Stripe \StripeDataLoader ;
8
+ use App \Forms \Components \RadioGroup ;
11
9
use App \Models \Organization ;
10
+
11
+ use function App \Support \tenant ;
12
+
13
+ use Closure ;
12
14
use Filament \Actions \Action ;
13
- use Stripe \Checkout \Session ;
14
- use Illuminate \Support \HtmlString ;
15
- use App \Forms \Components \RadioGroup ;
16
15
use Filament \Support \Enums \MaxWidth ;
17
- use App \Data \Stripe \StripeDataLoader ;
18
16
use Illuminate \Contracts \Support \Htmlable ;
19
- use function App \Support \tenant ;
17
+ use Illuminate \Support \{Arr , HtmlString };
18
+ use Illuminate \View \View ;
19
+ use Stripe \Checkout \Session ;
20
+ use Stripe \Stripe ;
20
21
21
22
class SubscribePlanAction extends Action
22
23
{
@@ -52,7 +53,7 @@ protected function setUp(): void
52
53
->size ('xl ' )
53
54
->extraAttributes (['class ' => 'w-full ' ])
54
55
->action (function (Action $ action ) {
55
- $ actions = $ action ->getLivewire ()->mountedActionsData ;
56
+ $ actions = $ action ->getLivewire ()->mountedActionsData ;
56
57
$ billingPeriod = data_get (Arr::first ($ actions ), 'billing_period ' );
57
58
58
59
// Chama a função que cria a sessão de checkout e redireciona o usuário
@@ -81,6 +82,7 @@ protected function setUp(): void
81
82
public function brandLogo (string | Htmlable | Closure | null $ logo ): static
82
83
{
83
84
$ this ->brandLogo = $ logo ;
85
+
84
86
return $ this ;
85
87
}
86
88
@@ -99,6 +101,7 @@ protected function getBilledPeriods(): array
99
101
$ products = StripeDataLoader::getProductsData ();
100
102
101
103
$ periods = [];
104
+
102
105
foreach ($ products as $ product ) {
103
106
foreach ($ product ['prices ' ] as $ price ) {
104
107
$ periods [$ price ['interval ' ]] = ucfirst ($ price ['interval ' ]);
@@ -115,52 +118,52 @@ protected function getBilledPeriods(): array
115
118
* @return void
116
119
*/
117
120
protected function checkoutUrl (string $ billingPeriod ): void
118
- {
119
- // Obtém a organização (tenant) atual
121
+ {
122
+ // Obtém a organização (tenant) atual
120
123
124
+ $ organization = tenant (Organization::class);
121
125
122
- $ organization = tenant (Organization::class);
126
+ if (!$ organization ->stripe_id ) {
127
+ throw new \Exception ('A organização não possui um ID do Stripe associado. ' );
128
+ }
123
129
124
- if (!$ organization ->stripe_id ) {
125
- throw new \Exception ('A organização não possui um ID do Stripe associado. ' );
126
- }
130
+ // Configura a API Key da Stripe
131
+ Stripe::setApiKey (env ('STRIPE_SECRET ' ));
127
132
128
- // Configura a API Key da Stripe
129
- Stripe::setApiKey (env ('STRIPE_SECRET ' ));
133
+ // Obtém o produto e o preço com base no período de cobrança selecionado
134
+ $ products = StripeDataLoader::getProductsData ();
135
+ $ priceId = null ;
130
136
131
- // Obtém o produto e o preço com base no período de cobrança selecionado
132
- $ products = StripeDataLoader::getProductsData ();
133
- $ priceId = null ;
137
+ foreach ($ products as $ product ) {
138
+ foreach ($ product ['prices ' ] as $ price ) {
139
+ if ($ price ['interval ' ] === $ billingPeriod ) {
140
+ $ priceId = $ price ['stripe_price_id ' ]; // Garante que está pegando o ID do preço
134
141
135
- foreach ($ products as $ product ) {
136
- foreach ($ product ['prices ' ] as $ price ) {
137
- if ($ price ['interval ' ] === $ billingPeriod ) {
138
- $ priceId = $ price ['stripe_price_id ' ]; // Garante que está pegando o ID do preço
139
- break 2 ;
142
+ break 2 ;
143
+ }
140
144
}
141
145
}
142
- }
143
146
144
- // Cria a sessão de checkout
145
- $ checkoutSession = Session::create ([
147
+ // Cria a sessão de checkout
148
+ $ checkoutSession = Session::create ([
146
149
147
- 'payment_method_types ' => ['card ' ],
150
+ 'payment_method_types ' => ['card ' ],
148
151
149
- 'mode ' => 'subscription ' ,
150
- 'customer ' => $ organization ->stripe_id , // Certifique-se de que a organização tenha um stripe_id
151
- 'line_items ' => [
152
- [
153
- 'price ' => $ priceId , // Aqui vai o ID do objeto de preço
154
- 'quantity ' => 1 ,
152
+ 'mode ' => 'subscription ' ,
153
+ 'customer ' => $ organization ->stripe_id , // Certifique-se de que a organização tenha um stripe_id
154
+ 'line_items ' => [
155
+ [
156
+ 'price ' => $ priceId , // Aqui vai o ID do objeto de preço
157
+ 'quantity ' => 1 ,
158
+ ],
155
159
],
156
- ],
157
- 'success_url ' => url ('/app ' ), // Redireciona para o dashboard do Filament
158
- 'cancel_url ' => url ('/app ' ), // Redireciona para o dashboard caso o pagamento seja cancelado
160
+ 'success_url ' => url ('/app ' ), // Redireciona para o dashboard do Filament
161
+ 'cancel_url ' => url ('/app ' ), // Redireciona para o dashboard caso o pagamento seja cancelado
159
162
160
- ]);
163
+ ]);
161
164
162
- // Redireciona para a URL de checkout
163
- redirect ()->away ($ checkoutSession ->url );
164
- }
165
+ // Redireciona para a URL de checkout
166
+ redirect ()->away ($ checkoutSession ->url );
167
+ }
165
168
166
169
}
0 commit comments