Yes! You're back! You survived Stripe part 1. Ok... that's cool,
but now we have bigger fish to fry. So fasten your seat belts, put on a pot of coffee,
and get ready to sharpen your Stripe subscription skills.

Wake up the Sheep

To become my best friend, just code along with me! If you coded with part one of
the tutorial, you'll need a fresh copy of the code: we made a few tweaks. Download
it from this page, unzip it, and then move into the start/ directory.

That'll give you the same code I have here. Open the README file for the setup instructions.
The last step will be to open a terminal, move into the project directory, and run:

./bin/console server:run

to start the built-in web server. Now for the magic: pull up the site at
http://localhost:8000.

Oh yea, it's the Sheep Shear Club: thanks to part 1, it's already
possible to buy individual products. Now, click "Pricing". The real point of the site
is to get a subscription that'll send your awesome sheep awesome shearing accessories
monthly. After vigorous meetings with our investors, we've decided to offer 2 plans: the
Farmer Brent at $99/month and the New Zealander at $199/month. But other than this
fancy looking page, we haven't coded anything for this yet.

Tell Stripe about the Plans

Our first step is to tell Stripe about these two plans. To do that, open your trusty
Stripe dashboard, make sure you're in the test environment, and find "Plans" on the
left. We're going to create the two plans in Stripe by hand. The ID can be any unique
string and we'll use this forever after to refer to the plan. Use, farmer_brent_monthly.
Then, fill in a name - that's less important and set the price as $99 per month.
Create that plan!

And yes, later, we'll add yearly versions of each plan... but one step at a time!
Repeat that whole process for the New Zealander: set its ID to new_zealander_monthly,
give it a name and set its price and interval. Perfect!

Manage the Plans in Our Code

Now, head back to our code and open the src/AppBundle/Subscription directory.
I added two classes to help us stay organized. The first is called SubscriptionHelper:

33 lines src/AppBundle/Subscription/SubscriptionHelper.php

... lines 1 - 2

namespaceAppBundle\Subscription;

classSubscriptionHelper

{

/** @var SubscriptionPlan[] */

private $plans = [];

publicfunction__construct()

{

// todo - add the plans

// $this->plans[] = new SubscriptionPlan(

// 'STRIPE_PLAN_KEY',

// 'OUR PLAN NAME',

// 'PRICE'

// );

}

/**

* @param $planId

* @return SubscriptionPlan|null

*/

publicfunctionfindPlan($planId)

{

foreach ($this->plans as $plan) {

if ($plan->getPlanId() == $planId) {

return $plan;

}

}

}

}

And as you can see... it's not very helpful... yet. But pretty soon, it will keep
track of the two plans we just added. We'll use the second class - SubscriptionPlan:

34 lines src/AppBundle/Subscription/SubscriptionPlan.php

... lines 1 - 2

namespaceAppBundle\Subscription;

classSubscriptionPlan

{

private $planId;

private $name;

private $price;

publicfunction__construct($planId, $name, $price)

{

$this->planId = $planId;

$this->name = $name;

$this->price = $price;

}

publicfunctiongetPlanId()

{

return$this->planId;

}

publicfunctiongetName()

{

return$this->name;

}

publicfunctiongetPrice()

{

return$this->price;

}

}

To hold the data for each plan: the plan ID, name and price. But we won't save these
to the database.

In SubscriptionHelper, setup the two plans. For the first, use farmer_brent_monthly
for the key, name it Farmer Brent and use 99 as the price:

38 lines src/AppBundle/Subscription/SubscriptionHelper.php

... lines 1 - 4

classSubscriptionHelper

{

... lines 7 - 9

publicfunction__construct()

{

$this->plans[] = new SubscriptionPlan(

'farmer_brent_monthly',

'Farmer Brent',

99

);

... lines 17 - 22

}

... lines 24 - 36

}

Copy that and repeat the same thing: new_zealander_monthly, New Zealander and 199:

38 lines src/AppBundle/Subscription/SubscriptionHelper.php

... lines 1 - 4

classSubscriptionHelper

{

... lines 7 - 9

publicfunction__construct()

{

... lines 12 - 17

$this->plans[] = new SubscriptionPlan(

'new_zealander_monthly',

'New Zealander',

199

);

}

... lines 24 - 36

}

Love it! The 2 plans live in Stripe and in our code. Time to make it possible
to add these to our cart, and then checkout.