Skip to content

Instantly share code, notes, and snippets.

@1stevengrant
Created June 18, 2019 10:31
Show Gist options
  • Select an option

  • Save 1stevengrant/a86efea479550ede369299c64effd3d2 to your computer and use it in GitHub Desktop.

Select an option

Save 1stevengrant/a86efea479550ede369299c64effd3d2 to your computer and use it in GitHub Desktop.

Revisions

  1. 1stevengrant created this gist Jun 18, 2019.
    73 changes: 73 additions & 0 deletions DonationController.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,73 @@
    <?php

    namespace App\Http\Controllers;

    use App\Donation;
    use App\Http\Requests\DonationRequest;
    use App\Notifications\DonationReceived;
    use App\Notifications\DonationThanks;
    use App\User;
    use Stripe\Charge;
    use Stripe\Error\Base;
    use Stripe\Stripe;

    class DonationController extends Controller
    {
    use CustomerUser;

    public function index()
    {
    return view('welcome');
    }

    public function store(DonationRequest $request)
    {
    $user = User::whereEmail($request->email)->first();

    Stripe::setApiKey(env('STRIPE_SECRET'));

    if (!$user) {
    $customer = $this->createCustomer($request);
    $user = $this->createUser($request, $customer);
    }

    try {
    $charge = $this->createCharge($request, $user);

    $donation = Donation::create([
    'user_id' => $user->id,
    'stripe_transaction_id' => $charge->id,
    'gift_aid' => $request->gift_aid_declaration ? true : false,
    'amount' => $request->amount,
    'message' => $request->message,
    ]);

    $user->notify(new DonationThanks());
    $donation->notify(new DonationReceived());

    return redirect()
    ->route('donation.index')
    ->with('success', "Thanks for your donation {$request->name}");
    } catch (Base $e) {
    return back()
    ->with('error', $e->getMessage());
    }
    }

    public function createCharge($request, $user)
    {
    $charge = Charge::create([
    'amount' => $request->amount*100,
    'currency' => 'gbp',
    'description' => "Donation from {$request->email}",
    'customer' => $user->stripe_id,
    'metadata' => [
    'gift_aid' => $request->gift_aid_declaration,
    'message' => $request->message,
    'name' => $user->name,
    ]
    ]);

    return $charge;
    }
    }