Level 1
Please help me. Thank you.
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
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);
}
Please or to participate in this conversation.