mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-10 13:12:50 +01:00
Square SCA
This commit is contained in:
parent
f0b51b7949
commit
a321134e69
@ -41,6 +41,16 @@ class ClientPresenter extends EntityPresenter
|
||||
return $contact_name;
|
||||
}
|
||||
|
||||
public function first_name()
|
||||
{
|
||||
return $this->entity->primary_contact->first() !== null ? $this->entity->primary_contact->first()->first_name : $this->entity->contacts()->first()->first_name;
|
||||
}
|
||||
|
||||
public function last_name()
|
||||
{
|
||||
return $this->entity->primary_contact->first() !== null ? $this->entity->primary_contact->first()->last_name : $this->entity->contacts()->first()->last_name;
|
||||
}
|
||||
|
||||
public function primary_contact_name()
|
||||
{
|
||||
return $this->entity->primary_contact->first() !== null ? $this->entity->primary_contact->first()->first_name.' '.$this->entity->primary_contact->first()->last_name : 'No primary contact set';
|
||||
|
@ -124,11 +124,29 @@ class CreditCard
|
||||
public function paymentView($data)
|
||||
{
|
||||
$data['gateway'] = $this->square_driver;
|
||||
|
||||
$data['amount'] = $this->square_driver->payment_hash->data->amount_with_fee;
|
||||
$data['currencyCode'] = $this->square_driver->client->getCurrencyCode();
|
||||
$data['contact'] = $this->buildClientObject();
|
||||
|
||||
return render('gateways.square.credit_card.pay', $data);
|
||||
}
|
||||
|
||||
private function buildClientObject()
|
||||
{
|
||||
$client = new \stdClass;
|
||||
|
||||
$client->addressLines = [ $this->square_driver->client->address1, $this->square_driver->client->address2 ];
|
||||
$client->givenName = $this->square_driver->client->present()->first_name();
|
||||
$client->familyName = $this->square_driver->client->present()->last_name();
|
||||
$client->email = $this->square_driver->client->present()->email;
|
||||
$client->phone = $this->square_driver->client->phone;
|
||||
$client->city = $this->square_driver->client->city;
|
||||
$client->region = $this->square_driver->client->state;
|
||||
$client->country = $this->square_driver->client->country->iso_3166_2;
|
||||
|
||||
return $client;
|
||||
}
|
||||
|
||||
public function paymentResponse(PaymentResponseRequest $request)
|
||||
{
|
||||
$token = $request->sourceId;
|
||||
@ -152,6 +170,9 @@ class CreditCard
|
||||
$body->setLocationId($this->square_driver->company_gateway->getConfigField('locationId'));
|
||||
$body->setReferenceId(Str::random(16));
|
||||
|
||||
if($request->has('verificationToken') && $request->input('verificationToken'))
|
||||
$body->setVerificationToken($request->input('verificationToken'));
|
||||
|
||||
if ($request->shouldUseToken()) {
|
||||
$body->setCustomerId($cgt->gateway_customer_reference);
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
@ -15,7 +15,7 @@
|
||||
"/js/clients/payments/eway-credit-card.js": "/js/clients/payments/eway-credit-card.js?id=08ea84e9451abd434cff",
|
||||
"/js/clients/payments/mollie-credit-card.js": "/js/clients/payments/mollie-credit-card.js?id=73b66e88e2daabcd6549",
|
||||
"/js/clients/payments/paytrace-credit-card.js": "/js/clients/payments/paytrace-credit-card.js?id=c2b5f7831e1a46dd5fb2",
|
||||
"/js/clients/payments/square-credit-card.js": "/js/clients/payments/square-credit-card.js?id=994c79534ee0a7391f69",
|
||||
"/js/clients/payments/square-credit-card.js": "/js/clients/payments/square-credit-card.js?id=24de1e73937c39b68f3f",
|
||||
"/js/clients/payments/stripe-ach.js": "/js/clients/payments/stripe-ach.js?id=81c2623fc1e5769b51c7",
|
||||
"/js/clients/payments/stripe-alipay.js": "/js/clients/payments/stripe-alipay.js?id=665ddf663500767f1a17",
|
||||
"/js/clients/payments/stripe-credit-card.js": "/js/clients/payments/stripe-credit-card.js?id=a30464874dee84678344",
|
||||
|
@ -49,6 +49,18 @@ class SquareCreditCard {
|
||||
|
||||
let result = await this.card.tokenize();
|
||||
|
||||
/* SCA */
|
||||
let verificationToken;
|
||||
verificationToken = await verifyBuyer(
|
||||
this.payments,
|
||||
result.token
|
||||
);
|
||||
|
||||
console.debug('Verification Token:', verificationToken);
|
||||
|
||||
document.querySelector('input[name="verificationToken"]').value =
|
||||
verificationToken;
|
||||
|
||||
if (result.status === 'OK') {
|
||||
document.getElementById('sourceId').value = result.token;
|
||||
|
||||
@ -77,6 +89,22 @@ class SquareCreditCard {
|
||||
return document.getElementById('server_response').submit();
|
||||
}
|
||||
|
||||
/* SCA */
|
||||
async verifyBuyer(payments, token) {
|
||||
const verificationDetails = {
|
||||
amount: document.querySelector('meta[name=amount]').content,
|
||||
billingContact: document.querySelector('meta[name=contact]').content,
|
||||
currencyCode: document.querySelector('meta[name=currencyCode]').content,
|
||||
intent: 'CHARGE'
|
||||
};
|
||||
|
||||
const verificationResults = await payments.verifyBuyer(
|
||||
token,
|
||||
verificationDetails
|
||||
);
|
||||
return verificationResults.token;
|
||||
}
|
||||
|
||||
async handle() {
|
||||
await this.init();
|
||||
|
||||
|
@ -4,6 +4,11 @@
|
||||
@section('gateway_head')
|
||||
<meta name="square-appId" content="{{ $gateway->company_gateway->getConfigField('applicationId') }}">
|
||||
<meta name="square-locationId" content="{{ $gateway->company_gateway->getConfigField('locationId') }}">
|
||||
<meta name="contact" content="{{ $contact }}">
|
||||
<meta name="amount" content="{{ $amount }}">
|
||||
<meta name="contact" content="{{ $contact }}">
|
||||
<meta name="currencyCode" content="{{ $currencyCode }}">
|
||||
|
||||
@endsection
|
||||
|
||||
@section('gateway_content')
|
||||
@ -17,6 +22,7 @@
|
||||
|
||||
<input type="hidden" name="token">
|
||||
<input type="hidden" name="sourceId" id="sourceId">
|
||||
<input type="hidden" name="verificationToken" id="verificationToken">
|
||||
</form>
|
||||
|
||||
<div class="alert alert-failure mb-4" hidden id="errors"></div>
|
||||
|
Loading…
Reference in New Issue
Block a user