Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

Shang LianZhi's avatar

How to connect to second database in WebhookController.php of the laravel cashier?

How to connect to second database in WebhookController.php of the laravel cashier? I want to update some data in the second database when triggered to WebhookController in laravel. But failed. It returns 500 internal error. Please help me. Thank you.

protected function handleCustomerSubscriptionUpdated(array $payload)
{
    $username = 'xxx';

    if ($user = $this->getUserByStripeId($payload['data']['object']['customer'])) {
        $data = $payload['data']['object'];

        $user->subscriptions->filter(function ($subscription) use ($data) {
            return $subscription->stripe_id === $data['id'];
        })->each(function ($subscription) use ($data, $user) {
            /*
            if (
                isset($data['status']) &&
                $data['status'] === StripeSubscription::STATUS_INCOMPLETE_EXPIRED
            ) {
                $subscription->items()->delete();
                $subscription->delete();

                return;
            }

            $firstItem = $data['items']['data'][0];
            $isSinglePrice = count($data['items']['data']) === 1;

            // Price...
            $subscription->stripe_price = $isSinglePrice ? $firstItem['price']['id'] : null;

            // Quantity...
            $subscription->quantity = $isSinglePrice && isset($firstItem['quantity']) ? $firstItem['quantity'] : null;
            */

            // Trial ending date...
            if (isset($data['trial_end'])) {
                $trialEnd = Carbon::createFromTimestamp($data['trial_end']);

                if (! $subscription->trial_ends_at || $subscription->trial_ends_at->ne($trialEnd)) {
                    $subscription->trial_ends_at = $trialEnd;
                }
            }

            // Cancellation date...
            if (isset($data['cancel_at_period_end'])) {
                if ($data['cancel_at_period_end']) {
                    $subscription->ends_at = $subscription->onTrial()
                        ? $subscription->trial_ends_at
                        : Carbon::createFromTimestamp($data['current_period_end']);
                } elseif (isset($data['cancel_at'])) {
                    $subscription->ends_at = Carbon::createFromTimestamp($data['cancel_at']);
                } else {
                    $subscription->ends_at = null;
                }
            }

            // Status...
            if (isset($data['status'])) {
                $subscription->stripe_status = $data['status'];
                
                if ($data['status'] != 'active') {
                    $customer_id = $data['customer'];
                    $res = DB::connection('mysql')->table('users')->where('stripe_id', $customer_id)->limit(1)->get();
                    if ( $res->count() == 1 ) {
                        $x_res = DB::connection('mysql2')->table('users')->where('email', $res->email)->limit(1)->get();
                        if ( $x_res->count() == 1 ) {
                            DB::connection('mysql2')->table('users')
                                ->where('email', $res->email)
                                ->update([
                                    'admin_enabled' => 0,
                                    'enabled' => 0
                                ]);
                        }
                    }

                    $user->forceFill([
                        'status' => 'inactive'
                    ])->save();
                } else {
                    $user->forceFill([
                        'status' => 'active'
                    ])->save();

                    // $customer_id = $data['customer'];
                    // $res = DB::connection('mysql')->table('users')->where('stripe_id', $customer_id)->limit(1)->get();
                    // if ( $res->count() == 1 ) {
                    //     $x_res = DB::connection('mysql2')->table('users')->where('email', $res->email)->limit(1)->get();
                    //     if ( $x_res->count() == 1 ) {
                    //         DB::connection('mysql2')->table('users')
                    //             ->where('email', $res->email)
                    //             ->update([
                    //                 'admin_enabled' => 1,
                    //                 'enabled' => 1
                    //             ]);
                    //     }
                    // }
                }
            }

            $subscription->save();

            /*
            // Update subscription items...
            if (isset($data['items'])) {
                $prices = [];

                foreach ($data['items']['data'] as $item) {
                    $prices[] = $item['price']['id'];

                    $subscription->items()->updateOrCreate([
                        'stripe_id' => $item['id'],
                    ], [
                        'stripe_product' => $item['price']['product'],
                        'stripe_price' => $item['price']['id'],
                        'quantity' => $item['quantity'] ?? null,
                    ]);
                }

                // Delete items that aren't attached to the subscription anymore...
                $subscription->items()->whereNotIn('stripe_price', $prices)->delete();
            }
            */
        });
    }

    return new Response($username, 200);
}
0 likes
1 reply

Please or to participate in this conversation.