mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-10 21:22:58 +01:00
Saving & tokenizing the credit card
This commit is contained in:
parent
6cab52fc9f
commit
77733ffd0a
@ -84,9 +84,19 @@ class CreditCard
|
|||||||
$this->braintree->payment_hash->data = array_merge((array)$this->braintree->payment_hash->data, $state);
|
$this->braintree->payment_hash->data = array_merge((array)$this->braintree->payment_hash->data, $state);
|
||||||
$this->braintree->payment_hash->save();
|
$this->braintree->payment_hash->save();
|
||||||
|
|
||||||
|
$customer = $this->braintree->findOrCreateCustomer();
|
||||||
|
|
||||||
|
$payment_method = $this->braintree->gateway->paymentMethod()->create([
|
||||||
|
'customerId' => $customer->id,
|
||||||
|
'paymentMethodNonce' => $state['token'],
|
||||||
|
'options' => [
|
||||||
|
'verifyCard' => true,
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
|
||||||
$result = $this->braintree->gateway->transaction()->sale([
|
$result = $this->braintree->gateway->transaction()->sale([
|
||||||
'amount' => $this->braintree->payment_hash->data->amount_with_fee,
|
'amount' => $this->braintree->payment_hash->data->amount_with_fee,
|
||||||
'paymentMethodNonce' => $state['token'],
|
'paymentMethodToken' => $payment_method->paymentMethod->token,
|
||||||
'deviceData' => $state['client-data'],
|
'deviceData' => $state['client-data'],
|
||||||
'options' => [
|
'options' => [
|
||||||
'submitForSettlement' => true
|
'submitForSettlement' => true
|
||||||
@ -97,7 +107,7 @@ class CreditCard
|
|||||||
$this->braintree->logSuccessfulGatewayResponse(['response' => $request->server_response, 'data' => $this->braintree->payment_hash], SystemLog::TYPE_BRAINTREE);
|
$this->braintree->logSuccessfulGatewayResponse(['response' => $request->server_response, 'data' => $this->braintree->payment_hash], SystemLog::TYPE_BRAINTREE);
|
||||||
|
|
||||||
if ($request->store_card) {
|
if ($request->store_card) {
|
||||||
$this->storePaymentMethod();
|
$this->storePaymentMethod($payment_method, $customer->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->processSuccessfulPayment($result);
|
return $this->processSuccessfulPayment($result);
|
||||||
@ -160,27 +170,23 @@ class CreditCard
|
|||||||
throw new PaymentFailed($response->transaction->additionalProcessorResponse, $response->transaction->processorResponseCode);
|
throw new PaymentFailed($response->transaction->additionalProcessorResponse, $response->transaction->processorResponseCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function storePaymentMethod()
|
private function storePaymentMethod($method, $customer_reference)
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
|
|
||||||
$method = $this->braintree->payment_hash->data->server_response->details;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$payment_meta = new \stdClass;
|
$payment_meta = new \stdClass;
|
||||||
$payment_meta->exp_month = (string) $method->expirationMonth;
|
$payment_meta->exp_month = (string)$method->paymentMethod->expirationMonth;
|
||||||
$payment_meta->exp_year = (string) $method->expirationYear;
|
$payment_meta->exp_year = (string)$method->paymentMethod->expirationYear;
|
||||||
$payment_meta->brand = (string) $method->cardType;
|
$payment_meta->brand = (string)$method->paymentMethod->cardType;
|
||||||
$payment_meta->last4 = (string) $method->lastFour;
|
$payment_meta->last4 = (string)$method->paymentMethod->last4;
|
||||||
$payment_meta->type = GatewayType::CREDIT_CARD;
|
$payment_meta->type = GatewayType::CREDIT_CARD;
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'payment_meta' => $payment_meta,
|
'payment_meta' => $payment_meta,
|
||||||
'token' => $method->id,
|
'token' => $method->paymentMethod->token,
|
||||||
'payment_method_id' => $this->braintree->payment_hash->data->payment_method_id,
|
'payment_method_id' => $this->braintree->payment_hash->data->payment_method_id,
|
||||||
];
|
];
|
||||||
|
|
||||||
$this->braintree->storeGatewayToken($data, ['gateway_customer_reference' => $customer->id]);
|
$this->braintree->storeGatewayToken($data, ['gateway_customer_reference' => $customer_reference]);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
return $this->braintree->processInternallyFailedPayment($this->braintree, $e);
|
return $this->braintree->processInternallyFailedPayment($this->braintree, $e);
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,7 @@ namespace App\PaymentDrivers;
|
|||||||
|
|
||||||
|
|
||||||
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
|
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
|
||||||
|
use App\Models\ClientGatewayToken;
|
||||||
use App\Models\GatewayType;
|
use App\Models\GatewayType;
|
||||||
use App\Models\SystemLog;
|
use App\Models\SystemLog;
|
||||||
use App\PaymentDrivers\Braintree\CreditCard;
|
use App\PaymentDrivers\Braintree\CreditCard;
|
||||||
@ -85,4 +86,26 @@ class BraintreePaymentDriver extends BaseDriver
|
|||||||
{
|
{
|
||||||
return $this->payment_method->paymentResponse($request);
|
return $this->payment_method->paymentResponse($request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function findOrCreateCustomer()
|
||||||
|
{
|
||||||
|
$existing = ClientGatewayToken::query()
|
||||||
|
->where('company_gateway_id', $this->company_gateway->id)
|
||||||
|
->where('client_id', $this->client->id)
|
||||||
|
->first();
|
||||||
|
|
||||||
|
if ($existing) {
|
||||||
|
return $this->gateway->customer()->find($existing->gateway_customer_reference);
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->gateway->customer()->create([
|
||||||
|
'firstName' => $this->client->present()->name,
|
||||||
|
'email' => $this->client->present()->email,
|
||||||
|
'phone' => $this->client->present()->phone,
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($result->success) {
|
||||||
|
return $result->customer;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user