Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@1stevengrant
Created June 18, 2019 10:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 1stevengrant/a86efea479550ede369299c64effd3d2 to your computer and use it in GitHub Desktop.
Save 1stevengrant/a86efea479550ede369299c64effd3d2 to your computer and use it in GitHub Desktop.
Laravel controller that accepts a custom donation amount via Stripe API
<?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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment