Skip to content

Instantly share code, notes, and snippets.

@Brotzka
Last active July 31, 2019 13:49
Show Gist options
  • Save Brotzka/b243cda6be3cd12d846ea74bbac0480c to your computer and use it in GitHub Desktop.
Save Brotzka/b243cda6be3cd12d846ea74bbac0480c to your computer and use it in GitHub Desktop.
FAAREN Stripe Fees
<?php
namespace Payment\Provider\Stripe\Subscriptions;
use App\DBEntities\Entities\SubsidiaryStripeUser;
use App\Helpers\Stripe\StripeHelper;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Payment\Abstracts\AbstractPSPSubscriptionCreator;
use Payment\Interfaces\Models\PSPSubscriptionModelInterface;
use Payment\Interfaces\PSPSubscriptionCreatorInterface;
use Payment\Interfaces\Worker\PSPSubscriptionWorkerInterface;
use Payment\Provider\Stripe\Models\StripeSubscription;
use Payment\Provider\Stripe\Traits\WorksWithStripeUsersTrait;
use Payment\Traits\BasicSubscriptionTrait;
use Stripe\Plan;
use Subscription\Database\Entities\Subscription;
class StripeSubscriptions implements PSPSubscriptionWorkerInterface
{
use BasicSubscriptionTrait;
use WorksWithStripeUsersTrait;
public function create(Subscription $subscription, Carbon $startDate): PSPSubscriptionModelInterface
{
// The platforms secret is set in another class
$plan = Plan::create([
'amount' => $subscription->price * 100,
'interval' => 'month',
'product' => $subscription->vehicle->stripe_id, //
'currency' => 'eur',
'billing_scheme' => 'per_unit',
'nickname' => StripeHelper::getPlanName($subscription->vehicle, $subscription->bookedMileage)
],["stripe_account" => $subscription->subsidiary->stripe_id]);
$subscription->stripe_plan = $plan->id;
$subsidiaryStripeUser = $this->getStripeUser($subscription);
$stripeSubscription = \Stripe\Subscription::create([
'customer' => $subsidiaryStripeUser->stripe_customer_id,
'application_fee_percent' => config('pricing.faaren_surcharge'), // = 12.5
'billing' => 'charge_automatically',
'tax_percent' => 0,
'backdate_start_date' => $startDate->timestamp,
'billing_cycle_anchor' => $startDate->addMonth()->timestamp,
'items' => [
['plan' => $plan->id]
],
'metadata' => [
'Abo-ID' => $subscription->id,
'Fzg-ID' => $subscription->vehicle->id,
'Kunden-ID' => $subscription->consumer->id
]
], ["stripe_account" => $subscription->subsidiary->stripe_id]);
$subscription->stripe_id = $stripeSubscription->id;
$subscription->save();
return new StripeSubscription();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment