mirror of
https://github.com/nothingworksinc/ticketbeast.git
synced 2026-01-26 11:14:06 +00:00
76 lines
2.0 KiB
PHP
76 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Billing;
|
|
|
|
use Stripe\Error\InvalidRequest;
|
|
|
|
class StripePaymentGateway implements PaymentGateway
|
|
{
|
|
const TEST_CARD_NUMBER = '4242424242424242';
|
|
|
|
private $apiKey;
|
|
|
|
public function __construct($apiKey)
|
|
{
|
|
$this->apiKey = $apiKey;
|
|
}
|
|
|
|
public function charge($amount, $token)
|
|
{
|
|
try {
|
|
$stripeCharge = \Stripe\Charge::create([
|
|
'amount' => $amount,
|
|
'source' => $token,
|
|
'currency' => 'usd',
|
|
], ['api_key' => $this->apiKey]);
|
|
|
|
return new Charge([
|
|
'amount' => $stripeCharge['amount'],
|
|
'card_last_four' => $stripeCharge['source']['last4'],
|
|
]);
|
|
} catch (InvalidRequest $e) {
|
|
throw new PaymentFailedException;
|
|
}
|
|
}
|
|
|
|
public function getValidTestToken($cardNumber = self::TEST_CARD_NUMBER)
|
|
{
|
|
return \Stripe\Token::create([
|
|
"card" => [
|
|
"number" => $cardNumber,
|
|
"exp_month" => 1,
|
|
"exp_year" => date('Y') + 1,
|
|
"cvc" => "123"
|
|
]
|
|
], ['api_key' => $this->apiKey])->id;
|
|
}
|
|
|
|
public function newChargesDuring($callback)
|
|
{
|
|
$latestCharge = $this->lastCharge();
|
|
$callback($this);
|
|
return $this->newChargesSince($latestCharge)->map(function ($stripeCharge) {
|
|
return new Charge([
|
|
'amount' => $stripeCharge['amount'],
|
|
'card_last_four' => $stripeCharge['source']['last4'],
|
|
]);
|
|
});
|
|
}
|
|
|
|
private function lastCharge()
|
|
{
|
|
return array_first(\Stripe\Charge::all([
|
|
'limit' => 1
|
|
], ['api_key' => $this->apiKey])['data']);
|
|
}
|
|
|
|
private function newChargesSince($charge = null)
|
|
{
|
|
$newCharges = \Stripe\Charge::all([
|
|
'ending_before' => $charge ? $charge->id : null,
|
|
], ['api_key' => $this->apiKey])['data'];
|
|
|
|
return collect($newCharges);
|
|
}
|
|
}
|