Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save mehranhadidi/62a6561b75044e13b60d1d92c35ea689 to your computer and use it in GitHub Desktop.
Save mehranhadidi/62a6561b75044e13b60d1d92c35ea689 to your computer and use it in GitHub Desktop.
Sync Stripe Renewal Date for all subscriptions - Laravel Console Command
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddRenewsAtColumnToSubscriptions extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('subscriptions', function($table) {
$table->timestamp('start_at')->nullable()->index()->after('trial_ends_at');
$table->timestamp('renews_at')->nullable()->index()->after('start_at');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
<?php
/* Updated by Nassim REHALi
Github : NassimRehali15 */
namespace App\Console\Commands;
use DB;
use Exception;
use Carbon\Carbon;
use Illuminate\Console\Command;
use Laravel\Cashier\Subscription;
class StripeSyncRenewals extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'stripe:sync-renewals';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Updates the renews_at column on stripe subscriptions to reflect the end of the current billing period.';
protected $updatedCount = 0;
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
\Stripe\Stripe::setApiKey(config('services.stripe.secret'));
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$apiOptions = ['limit' => 100];
while ($response = \Stripe\Subscription::all($apiOptions)) {
foreach ($response->data as $subscription) {
$this->updateSubscription($subscription);
}
if (! $response->has_more) {
break;
}
$apiOptions['starting_after'] = $subscription->id;
}
$this->info('Successfully updated ' . $this->updatedCount . ' subscriptions.');
}
protected function updateSubscription($subscription)
{
$updated = DB::table('subscriptions')
->where('stripe_id', $subscription->id)
->update([
'start_at' => Carbon::createFromTimestamp($subscription->current_period_start),
'renews_at' => Carbon::createFromTimestamp($subscription->current_period_end),
]);
if ($updated) {
$this->updatedCount++;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment