diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php
index b23f0cb7b7ab..13101a7dc0ca 100644
--- a/app/Http/Controllers/PaymentController.php
+++ b/app/Http/Controllers/PaymentController.php
@@ -482,49 +482,7 @@ class PaymentController extends BaseController
}
if ($response->isSuccessful()) {
- $last4 = null;
- $expiration = null;
- $card_type_id = null;
-
- if (!empty($details['card'])) {
- $card = $details['card'];
- $last4 = substr($card->number, -4);
- $year = $card->expiryYear;
- if (strlen($year) == 2) {
- $year = '20' . $year;
- }
-
- $expiration = $year . '-' . $card->expiryMonth . '-00';
- $card_type_id = $this->detectCardType($card->number);
- }
-
- if ($accountGateway->gateway_id == GATEWAY_STRIPE) {
- $card = $response->getSource();
- if (!$card) {
- $card = $response->getCard();
- }
-
- if ($card) {
- $last4 = $card['last4'];
- $expiration = $card['exp_year'] . '-' . $card['exp_month'] . '-00';
- $stripe_card_types = array(
- 'Visa' => CARD_VISA,
- 'American Express' => CARD_AMERICAN_EXPRESS,
- 'MasterCard' => CARD_MASTERCARD,
- 'Discover' => CARD_DISCOVER,
- 'JCB' => CARD_JCB,
- 'Diners Club' => CARD_DINERS_CLUB
- );
-
- if (!empty($stripe_card_types[$card['brand']])) {
- $card_type_id = $stripe_card_types[$card['brand']];
- } else {
- $card_type_id = CARD_UNKNOWN;
- }
- }
- }
-
- $payment = $this->paymentService->createPayment($invitation, $accountGateway, $ref, null, $last4, $expiration, $card_type_id);
+ $payment = $this->paymentService->createPayment($invitation, $accountGateway, $ref, null, $details, $response);
Session::flash('message', trans('texts.applied_payment'));
if ($account->account_key == NINJA_ACCOUNT_KEY) {
@@ -557,24 +515,6 @@ class PaymentController extends BaseController
}
}
}
-
- private function detectCardType($number)
- {
- if (preg_match('/^3[47][0-9]{13}$/',$number)) {
- return CARD_AMERICAN_EXPRESS;
- } elseif (preg_match('/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/',$number)) {
- return CARD_DINERS_CLUB;
- } elseif (preg_match('/^6(?:011|5[0-9][0-9])[0-9]{12}$/',$number)) {
- return CARD_DISCOVER;
- } elseif (preg_match('/^(?:2131|1800|35\d{3})\d{11}$/',$number)) {
- return CARD_JCB;
- } elseif (preg_match('/^5[1-5][0-9]{14}$/',$number)) {
- return CARD_MASTERCARD;
- } elseif (preg_match('/^4[0-9]{12}(?:[0-9]{3})?$/',$number)) {
- return CARD_VISA;
- }
- return CARD_UNKNOWN;
- }
public function offsite_payment()
{
@@ -637,7 +577,7 @@ class PaymentController extends BaseController
if ($response->isCancelled()) {
// do nothing
} elseif ($response->isSuccessful()) {
- $payment = $this->paymentService->createPayment($invitation, $accountGateway, $ref, $payerId);
+ $payment = $this->paymentService->createPayment($invitation, $accountGateway, $ref, $payerId, $details, $purchaseResponse);
Session::flash('message', trans('texts.applied_payment'));
} else {
$this->error('offsite', $response->getMessage(), $accountGateway);
diff --git a/app/Http/Controllers/PublicClientController.php b/app/Http/Controllers/PublicClientController.php
index 085098827e1b..66aa0f618fa0 100644
--- a/app/Http/Controllers/PublicClientController.php
+++ b/app/Http/Controllers/PublicClientController.php
@@ -344,7 +344,7 @@ class PublicClientController extends BaseController
->addColumn('payment_source', function ($model) {
if (!$model->card_type_code) return '';
$card_type = trans("texts.card_" . $model->card_type_code);
- $expiration = trans('texts.card_expiration', array('expires'=>Utils::fromSqlDate($model->expiration, false)->format('m/d')));
+ $expiration = trans('texts.card_expiration', array('expires'=>Utils::fromSqlDate($model->expiration, false)->format('m/y')));
return '
•••'.$model->last4.' '.$expiration;
})
->addColumn('amount', function ($model) { return Utils::formatMoney($model->amount, $model->currency_id, $model->country_id); })
diff --git a/app/Services/PaymentService.php b/app/Services/PaymentService.php
index 7756071348ca..40eb61685a54 100644
--- a/app/Services/PaymentService.php
+++ b/app/Services/PaymentService.php
@@ -214,7 +214,7 @@ class PaymentService extends BaseService
return $token;
}
- public function createPayment($invitation, $accountGateway, $ref, $payerId = null, $last4 = null, $expiration = null, $card_type_id = null, $routing_number = null)
+ public function createPayment($invitation, $accountGateway, $ref, $payerId = null, $paymentDetails = null, $purchaseResponse = null)
{
$invoice = $invitation->invoice;
@@ -227,10 +227,44 @@ class PaymentService extends BaseService
$payment->contact_id = $invitation->contact_id;
$payment->transaction_reference = $ref;
$payment->payment_date = date_create()->format('Y-m-d');
- $payment->last4 = $last4;
- $payment->expiration = $expiration;
- $payment->card_type_id = $card_type_id;
- $payment->routing_number = $routing_number;
+
+ if (!empty($paymentDetails['card'])) {
+ $card = $paymentDetails['card'];
+ $payment->last4 = substr($card->number, -4);
+ $year = $card->expiryYear;
+ if (strlen($year) == 2) {
+ $year = '20' . $year;
+ }
+
+ $payment->expiration = $year . '-' . $card->expiryMonth . '-00';
+ $payment->card_type_id = $this->detectCardType($card->number);
+ }
+
+ if ($accountGateway->gateway_id == GATEWAY_STRIPE) {
+ $card = $purchaseResponse->getSource();
+ if (!$card) {
+ $card = $purchaseResponse->getCard();
+ }
+
+ if ($card) {
+ $payment->last4 = $card['last4'];
+ $payment->expiration = $card['exp_year'] . '-' . $card['exp_month'] . '-00';
+ $stripe_card_types = array(
+ 'Visa' => CARD_VISA,
+ 'American Express' => CARD_AMERICAN_EXPRESS,
+ 'MasterCard' => CARD_MASTERCARD,
+ 'Discover' => CARD_DISCOVER,
+ 'JCB' => CARD_JCB,
+ 'Diners Club' => CARD_DINERS_CLUB
+ );
+
+ if (!empty($stripe_card_types[$card['brand']])) {
+ $payment->card_type_id = $stripe_card_types[$card['brand']];
+ } else {
+ $payment->card_type_id = CARD_UNKNOWN;
+ }
+ }
+ }
if ($payerId) {
$payment->payer_id = $payerId;
@@ -293,6 +327,24 @@ class PaymentService extends BaseService
return $payment;
}
+
+ private function detectCardType($number)
+ {
+ if (preg_match('/^3[47][0-9]{13}$/',$number)) {
+ return CARD_AMERICAN_EXPRESS;
+ } elseif (preg_match('/^3(?:0[0-5]|[68][0-9])[0-9]{11}$/',$number)) {
+ return CARD_DINERS_CLUB;
+ } elseif (preg_match('/^6(?:011|5[0-9][0-9])[0-9]{12}$/',$number)) {
+ return CARD_DISCOVER;
+ } elseif (preg_match('/^(?:2131|1800|35\d{3})\d{11}$/',$number)) {
+ return CARD_JCB;
+ } elseif (preg_match('/^5[1-5][0-9]{14}$/',$number)) {
+ return CARD_MASTERCARD;
+ } elseif (preg_match('/^4[0-9]{12}(?:[0-9]{3})?$/',$number)) {
+ return CARD_VISA;
+ }
+ return CARD_UNKNOWN;
+ }
public function completePurchase($gateway, $accountGateway, $details, $token)
{
@@ -328,7 +380,7 @@ class PaymentService extends BaseService
if ($response->isSuccessful()) {
$ref = $response->getTransactionReference();
- return $this->createPayment($invitation, $accountGateway, $ref);
+ return $this->createPayment($invitation, $accountGateway, $ref, $details, $response);
} else {
return false;
}
@@ -387,7 +439,7 @@ class PaymentService extends BaseService
function ($model) {
if (!$model->card_type_code) return '';
$card_type = trans("texts.card_" . $model->card_type_code);
- $expiration = trans('texts.card_expiration', array('expires'=>Utils::fromSqlDate($model->expiration, false)->format('m/d')));
+ $expiration = trans('texts.card_expiration', array('expires'=>Utils::fromSqlDate($model->expiration, false)->format('m/y')));
return '
•••'.$model->last4.' '.$expiration;
}
],