Forked from NassimRehali15/2018_02_13_142413_add_renews_at_column_to_subscriptions.php
Created
August 3, 2020 09:33
-
-
Save mehranhadidi/62a6561b75044e13b60d1d92c35ea689 to your computer and use it in GitHub Desktop.
Sync Stripe Renewal Date for all subscriptions - Laravel Console Command
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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() | |
{ | |
// | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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