Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
Adyen Magento2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Shared Libs
Adyen Magento2
Commits
3c5450eb
Commit
3c5450eb
authored
Nov 01, 2019
by
cyattilakiss
Committed by
GitHub
Nov 01, 2019
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #562 from Adyen/develop
Release 5.0.0
parents
187e3f09
13076721
Changes
68
Hide whitespace changes
Inline
Side-by-side
Showing
68 changed files
with
2018 additions
and
1082 deletions
+2018
-1082
.github/CODEOWNERS
.github/CODEOWNERS
+1
-0
.github/ISSUE_TEMPLATE.md
.github/ISSUE_TEMPLATE.md
+1
-1
Api/Data/InvoiceInterface.php
Api/Data/InvoiceInterface.php
+2
-2
Api/Data/NotificationInterface.php
Api/Data/NotificationInterface.php
+14
-14
Api/Data/OrderPaymentInterface.php
Api/Data/OrderPaymentInterface.php
+2
-2
Block/Adminhtml/System/Config/Field/Installments.php
Block/Adminhtml/System/Config/Field/Installments.php
+3
-3
Block/Adminhtml/System/Config/Field/InstallmentsPosCloud.php
Block/Adminhtml/System/Config/Field/InstallmentsPosCloud.php
+3
-3
Block/Form/Cc.php
Block/Form/Cc.php
+25
-8
Block/Form/Oneclick.php
Block/Form/Oneclick.php
+1
-1
Block/Info/Cc.php
Block/Info/Cc.php
+2
-1
Block/Info/Hpp.php
Block/Info/Hpp.php
+1
-1
Controller/Process/Result.php
Controller/Process/Result.php
+1
-1
Gateway/Http/Client/TransactionAuthorization.php
Gateway/Http/Client/TransactionAuthorization.php
+6
-1
Gateway/Http/Client/TransactionPayment.php
Gateway/Http/Client/TransactionPayment.php
+7
-1
Gateway/Http/TransferFactory.php
Gateway/Http/TransferFactory.php
+8
-2
Gateway/Request/AddressDataBuilder.php
Gateway/Request/AddressDataBuilder.php
+3
-1
Gateway/Request/ApplePayAuthorizationDataBuilder.php
Gateway/Request/ApplePayAuthorizationDataBuilder.php
+5
-3
Gateway/Request/BrowserInfoDataBuilder.php
Gateway/Request/BrowserInfoDataBuilder.php
+2
-1
Gateway/Request/CancelDataBuilder.php
Gateway/Request/CancelDataBuilder.php
+3
-1
Gateway/Request/CaptureDataBuilder.php
Gateway/Request/CaptureDataBuilder.php
+4
-2
Gateway/Request/CcAuthorizationDataBuilder.php
Gateway/Request/CcAuthorizationDataBuilder.php
+35
-15
Gateway/Request/CcBackendAuthorizationDataBuilder.php
Gateway/Request/CcBackendAuthorizationDataBuilder.php
+22
-15
Gateway/Request/CheckoutDataBuilder.php
Gateway/Request/CheckoutDataBuilder.php
+26
-23
Gateway/Request/CustomerDataBuilder.php
Gateway/Request/CustomerDataBuilder.php
+3
-2
Gateway/Request/CustomerIpDataBuilder.php
Gateway/Request/CustomerIpDataBuilder.php
+11
-3
Gateway/Request/GooglePayAuthorizationDataBuilder.php
Gateway/Request/GooglePayAuthorizationDataBuilder.php
+5
-3
Gateway/Request/MerchantAccountDataBuilder.php
Gateway/Request/MerchantAccountDataBuilder.php
+3
-1
Gateway/Request/OneclickAuthorizationDataBuilder.php
Gateway/Request/OneclickAuthorizationDataBuilder.php
+11
-10
Gateway/Request/PaymentDataBuilder.php
Gateway/Request/PaymentDataBuilder.php
+6
-1
Gateway/Request/PosCloudBuilder.php
Gateway/Request/PosCloudBuilder.php
+3
-1
Gateway/Request/RecurringDataBuilder.php
Gateway/Request/RecurringDataBuilder.php
+3
-2
Gateway/Request/RecurringVaultDataBuilder.php
Gateway/Request/RecurringVaultDataBuilder.php
+8
-5
Gateway/Request/RefundDataBuilder.php
Gateway/Request/RefundDataBuilder.php
+7
-5
Gateway/Request/ThreeDS2DataBuilder.php
Gateway/Request/ThreeDS2DataBuilder.php
+69
-0
Gateway/Request/ThreeDs2DataBuilder.php
Gateway/Request/ThreeDs2DataBuilder.php
+70
-0
Gateway/Request/VaultDataBuilder.php
Gateway/Request/VaultDataBuilder.php
+3
-1
Gateway/Validator/CheckoutResponseValidator.php
Gateway/Validator/CheckoutResponseValidator.php
+12
-5
Gateway/Validator/ThreeDS2ResponseValidator.php
Gateway/Validator/ThreeDS2ResponseValidator.php
+2
-2
Helper/Data.php
Helper/Data.php
+8
-7
Helper/Requests.php
Helper/Requests.php
+49
-21
Model/AdyenPaymentProcess.php
Model/AdyenPaymentProcess.php
+0
-204
Model/AdyenRequestMerchantSession.php
Model/AdyenRequestMerchantSession.php
+1
-1
Model/AdyenThreeDS2Process.php
Model/AdyenThreeDS2Process.php
+59
-13
Model/Notification.php
Model/Notification.php
+4
-4
Observer/AdyenCcDataAssignObserver.php
Observer/AdyenCcDataAssignObserver.php
+4
-2
Plugin/PaymentInformationManagement.php
Plugin/PaymentInformationManagement.php
+93
-0
composer.json
composer.json
+1
-1
etc/adminhtml/di.xml
etc/adminhtml/di.xml
+0
-1
etc/adminhtml/system/adyen_cc.xml
etc/adminhtml/system/adyen_cc.xml
+0
-8
etc/config.xml
etc/config.xml
+0
-2
etc/di.xml
etc/di.xml
+24
-6
etc/webapi.xml
etc/webapi.xml
+0
-7
view/adminhtml/templates/form/cc.phtml
view/adminhtml/templates/form/cc.phtml
+21
-2
view/adminhtml/web/css/order_create_styles.css
view/adminhtml/web/css/order_create_styles.css
+643
-262
view/base/web/images/logos/boekenbon.png
view/base/web/images/logos/boekenbon.png
+0
-0
view/base/web/images/logos/directdebit_GB.png
view/base/web/images/logos/directdebit_GB.png
+0
-0
view/base/web/images/logos/klarna_paynow.png
view/base/web/images/logos/klarna_paynow.png
+0
-0
view/base/web/images/logos/vvvcadeaubon.png
view/base/web/images/logos/vvvcadeaubon.png
+0
-0
view/frontend/web/css/styles.css
view/frontend/web/css/styles.css
+649
-264
view/frontend/web/js/model/threeds2.js
view/frontend/web/js/model/threeds2.js
+0
-17
view/frontend/web/js/view/payment/adyen-methods.js
view/frontend/web/js/view/payment/adyen-methods.js
+3
-2
view/frontend/web/js/view/payment/method-renderer/adyen-cc-method.js
...nd/web/js/view/payment/method-renderer/adyen-cc-method.js
+29
-53
view/frontend/web/js/view/payment/method-renderer/adyen-hpp-method.js
...d/web/js/view/payment/method-renderer/adyen-hpp-method.js
+1
-4
view/frontend/web/js/view/payment/method-renderer/adyen-oneclick-method.js
.../js/view/payment/method-renderer/adyen-oneclick-method.js
+29
-51
view/frontend/web/template/payment/cc-form.html
view/frontend/web/template/payment/cc-form.html
+1
-1
view/frontend/web/template/payment/google-pay-form.html
view/frontend/web/template/payment/google-pay-form.html
+1
-1
view/frontend/web/template/payment/hpp-form.html
view/frontend/web/template/payment/hpp-form.html
+4
-4
view/frontend/web/template/payment/oneclick-form.html
view/frontend/web/template/payment/oneclick-form.html
+1
-1
No files found.
.github/CODEOWNERS
0 → 100644
View file @
3c5450eb
* @msilvagarcia @cyattilakiss @Aleffio @AlexandrosMor @rikterbeek
.github/ISSUE_TEMPLATE.md
View file @
3c5450eb
...
@@ -2,6 +2,6 @@
...
@@ -2,6 +2,6 @@
**Plugin version**
: x.y.z
**Plugin version**
: x.y.z
**Description**
**Description**
<!--
<!--
-
please provide
description of the issue. In case of bug report, please provide the necessary steps to reproduce.
-
Please provide a
description of the issue. In case of bug report, please provide the necessary steps to reproduce.
-
For merchant specific requests, please use https://support.adyen.com
-
For merchant specific requests, please use https://support.adyen.com
-->
-->
\ No newline at end of file
Api/Data/InvoiceInterface.php
View file @
3c5450eb
...
@@ -47,8 +47,8 @@ interface InvoiceInterface
...
@@ -47,8 +47,8 @@ interface InvoiceInterface
*/
*/
const
ACQUIRER_REFERENCE
=
'acquirer_reference'
;
const
ACQUIRER_REFERENCE
=
'acquirer_reference'
;
/*
/*
* Invoice ID.
* Invoice ID.
*/
*/
const
INVOICE_ID
=
'invoice_id'
;
const
INVOICE_ID
=
'invoice_id'
;
/**
/**
...
...
Api/Data/NotificationInterface.php
View file @
3c5450eb
...
@@ -25,10 +25,10 @@ namespace Adyen\Payment\Api\Data;
...
@@ -25,10 +25,10 @@ namespace Adyen\Payment\Api\Data;
interface
NotificationInterface
interface
NotificationInterface
{
{
/**
/**#@+
* Constants for keys of data array. Identical to the name of the getter in snake case.
* Constants for keys of data array. Identical to the name of the getter in snake case.
*/
*/
/*
/*
* Entity ID.
* Entity ID.
*/
*/
...
@@ -66,15 +66,15 @@ interface NotificationInterface
...
@@ -66,15 +66,15 @@ interface NotificationInterface
*/
*/
const
AMOUNT_CURRENCY
=
'amount_currency'
;
const
AMOUNT_CURRENCY
=
'amount_currency'
;
/*
/*
* r
eason
* R
eason
*/
*/
const
REASON
=
'reason'
;
const
REASON
=
'reason'
;
/*
/*
* Live
* Live
*/
*/
const
LIVE
=
'live'
;
const
LIVE
=
'live'
;
/*
/*
*
Liv
e
*
Don
e
*/
*/
const
DONE
=
'done'
;
const
DONE
=
'done'
;
/*
/*
...
@@ -109,7 +109,7 @@ interface NotificationInterface
...
@@ -109,7 +109,7 @@ interface NotificationInterface
/**
/**
* Gets the Pspreference for the notification.
* Gets the Pspreference for the notification.
*
*
* @return
int
|null Pspreference.
* @return
string
|null Pspreference.
*/
*/
public
function
getPspreference
();
public
function
getPspreference
();
...
@@ -133,14 +133,14 @@ interface NotificationInterface
...
@@ -133,14 +133,14 @@ interface NotificationInterface
/**
/**
* Gets the OriginalReference for the notification.
* Gets the OriginalReference for the notification.
*
*
* @return
int
|null OriginalReference.
* @return
string
|null OriginalReference.
*/
*/
public
function
getOriginalReference
();
public
function
getOriginalReference
();
/**
/**
* Gets the Merchantreference for the notification.
* Gets the Merchantreference for the notification.
*
*
* @return
int
|null MerchantReference.
* @return
string
|null MerchantReference.
*/
*/
public
function
getMerchantReference
();
public
function
getMerchantReference
();
...
@@ -155,7 +155,7 @@ interface NotificationInterface
...
@@ -155,7 +155,7 @@ interface NotificationInterface
/**
/**
* Gets the Eventcode for the notification.
* Gets the Eventcode for the notification.
*
*
* @return
int
|null Eventcode.
* @return
string
|null Eventcode.
*/
*/
public
function
getEventCode
();
public
function
getEventCode
();
...
@@ -172,7 +172,7 @@ interface NotificationInterface
...
@@ -172,7 +172,7 @@ interface NotificationInterface
*
*
* @return int|null Success.
* @return int|null Success.
*/
*/
public
function
getSucess
();
public
function
getSuc
c
ess
();
/**
/**
* Sets Success.
* Sets Success.
...
@@ -185,7 +185,7 @@ interface NotificationInterface
...
@@ -185,7 +185,7 @@ interface NotificationInterface
/**
/**
* Gets the Paymentmethod for the notification.
* Gets the Paymentmethod for the notification.
*
*
* @return
int
|null PaymentMethod.
* @return
string
|null PaymentMethod.
*/
*/
public
function
getPaymentMethod
();
public
function
getPaymentMethod
();
...
@@ -213,11 +213,11 @@ interface NotificationInterface
...
@@ -213,11 +213,11 @@ interface NotificationInterface
public
function
setAmountValue
(
$amountValue
);
public
function
setAmountValue
(
$amountValue
);
/**
/**
* Gets the Amount
Value
for the notification.
* Gets the Amount
Currency
for the notification.
*
*
* @return
int|null AmountValue
.
* @return
string|null AmountCurrency
.
*/
*/
public
function
getAmountCurency
();
public
function
getAmountCur
r
ency
();
/**
/**
* Sets AmountCurrency.
* Sets AmountCurrency.
...
...
Api/Data/OrderPaymentInterface.php
View file @
3c5450eb
...
@@ -25,10 +25,10 @@ namespace Adyen\Payment\Api\Data;
...
@@ -25,10 +25,10 @@ namespace Adyen\Payment\Api\Data;
interface
OrderPaymentInterface
interface
OrderPaymentInterface
{
{
/**
/**#@+
* Constants for keys of data array. Identical to the name of the getter in snake case.
* Constants for keys of data array. Identical to the name of the getter in snake case.
*/
*/
/*
/*
* Entity ID.
* Entity ID.
*/
*/
...
...
Block/Adminhtml/System/Config/Field/Installments.php
View file @
3c5450eb
...
@@ -112,11 +112,11 @@ class Installments extends \Magento\Config\Block\System\Config\Form\Field\FieldA
...
@@ -112,11 +112,11 @@ class Installments extends \Magento\Config\Block\System\Config\Form\Field\FieldA
*/
*/
protected
function
_prepareArrayRow
(
\Magento\Framework\DataObject
$row
)
protected
function
_prepareArrayRow
(
\Magento\Framework\DataObject
$row
)
{
{
$install
l
ments
=
$row
->
getInstallments
();
$installments
=
$row
->
getInstallments
();
$options
=
[];
$options
=
[];
if
(
$install
l
ments
)
{
if
(
$installments
)
{
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$install
l
ments
)]
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$installments
)]
=
'selected="selected"'
;
=
'selected="selected"'
;
$ccTypes
=
$row
->
getCcTypes
();
$ccTypes
=
$row
->
getCcTypes
();
...
...
Block/Adminhtml/System/Config/Field/InstallmentsPosCloud.php
View file @
3c5450eb
...
@@ -82,11 +82,11 @@ class InstallmentsPosCloud extends \Magento\Config\Block\System\Config\Form\Fiel
...
@@ -82,11 +82,11 @@ class InstallmentsPosCloud extends \Magento\Config\Block\System\Config\Form\Fiel
*/
*/
protected
function
_prepareArrayRow
(
\Magento\Framework\DataObject
$row
)
protected
function
_prepareArrayRow
(
\Magento\Framework\DataObject
$row
)
{
{
$install
l
ments
=
$row
->
getInstallments
();
$installments
=
$row
->
getInstallments
();
$options
=
[];
$options
=
[];
if
(
$install
l
ments
)
{
if
(
$installments
)
{
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$install
l
ments
)]
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$installments
)]
=
'selected="selected"'
;
=
'selected="selected"'
;
}
}
$row
->
setData
(
'option_extra_attrs'
,
$options
);
$row
->
setData
(
'option_extra_attrs'
,
$options
);
...
...
Block/Form/Cc.php
View file @
3c5450eb
...
@@ -99,14 +99,9 @@ class Cc extends \Magento\Payment\Block\Form\Cc
...
@@ -99,14 +99,9 @@ class Cc extends \Magento\Payment\Block\Form\Cc
*/
*/
public
function
hasVerification
()
public
function
hasVerification
()
{
{
//
if backend order and moto payments is turned on don't show cvc
//
On Backend always use MOTO
if
(
$this
->
appState
->
getAreaCode
()
===
\Magento\Backend\App\Area\FrontNameResolver
::
AREA_CODE
)
{
if
(
$this
->
appState
->
getAreaCode
()
===
\Magento\Backend\App\Area\FrontNameResolver
::
AREA_CODE
)
{
$this
->
getCheckoutSession
();
return
false
;
$store
=
$this
->
checkoutSession
->
getQuote
()
->
getStore
();
$enableMoto
=
$this
->
adyenHelper
->
getAdyenCcConfigDataFlag
(
'enable_moto'
,
$store
->
getId
());
if
(
$enableMoto
)
{
return
false
;
}
}
}
return
true
;
return
true
;
}
}
...
@@ -120,7 +115,7 @@ class Cc extends \Magento\Payment\Block\Form\Cc
...
@@ -120,7 +115,7 @@ class Cc extends \Magento\Payment\Block\Form\Cc
}
}
/**
/**
* Retrieve available
s
credit card type codes by alt code
* Retrieve available credit card type codes by alt code
*
*
* @return array
* @return array
*/
*/
...
@@ -141,4 +136,26 @@ class Cc extends \Magento\Payment\Block\Form\Cc
...
@@ -141,4 +136,26 @@ class Cc extends \Magento\Payment\Block\Form\Cc
return
$types
;
return
$types
;
}
}
/**
* Allow checkbox for MOTO payments to be saved as RECURRING
*
* @return bool
*/
public
function
allowRecurring
()
{
if
(
$this
->
adyenHelper
->
getAdyenAbstractConfigData
(
'enable_recurring'
,
null
))
{
return
true
;
}
return
false
;
}
/**
* @return mixed
*/
public
function
isVaultEnabled
()
{
return
$this
->
adyenHelper
->
isCreditCardVaultEnabled
();
}
}
}
Block/Form/Oneclick.php
View file @
3c5450eb
...
@@ -36,7 +36,7 @@ class Oneclick extends \Adyen\Payment\Block\Form\Cc
...
@@ -36,7 +36,7 @@ class Oneclick extends \Adyen\Payment\Block\Form\Cc
protected
$_sessionQuote
;
protected
$_sessionQuote
;
/**
/**
*
Cc
constructor.
*
Oneclick
constructor.
*
*
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Payment\Model\Config $paymentConfig
* @param \Magento\Payment\Model\Config $paymentConfig
...
...
Block/Info/Cc.php
View file @
3c5450eb
...
@@ -32,9 +32,10 @@ class Cc extends AbstractInfo
...
@@ -32,9 +32,10 @@ class Cc extends AbstractInfo
protected
$_template
=
'Adyen_Payment::info/adyen_cc.phtml'
;
protected
$_template
=
'Adyen_Payment::info/adyen_cc.phtml'
;
/**
/**
* Return credit car
t
type
* Return credit car
d
type
*
*
* @return string
* @return string
* @throws \Magento\Framework\Exception\LocalizedException
*/
*/
public
function
getCcTypeName
()
public
function
getCcTypeName
()
{
{
...
...
Block/Info/Hpp.php
View file @
3c5450eb
...
@@ -49,7 +49,7 @@ class Hpp extends AbstractInfo
...
@@ -49,7 +49,7 @@ class Hpp extends AbstractInfo
}
}
/**
/**
* Get all
m
ultibanco related data
* Get all
M
ultibanco related data
*
*
* @return array
* @return array
* @throws \Magento\Framework\Exception\LocalizedException
* @throws \Magento\Framework\Exception\LocalizedException
...
...
Controller/Process/Result.php
View file @
3c5450eb
...
@@ -301,7 +301,7 @@ class Result extends \Magento\Framework\App\Action\Action
...
@@ -301,7 +301,7 @@ class Result extends \Magento\Framework\App\Action\Action
}
}
/**
/**
* Authenticate using sha
1
Merchant signature
* Authenticate using sha
256
Merchant signature
*
*
* @param $response
* @param $response
* @return bool
* @return bool
...
...
Gateway/Http/Client/TransactionAuthorization.php
View file @
3c5450eb
...
@@ -69,8 +69,13 @@ class TransactionAuthorization implements ClientInterface
...
@@ -69,8 +69,13 @@ class TransactionAuthorization implements ClientInterface
public
function
placeRequest
(
\Magento\Payment\Gateway\Http\TransferInterface
$transferObject
)
public
function
placeRequest
(
\Magento\Payment\Gateway\Http\TransferInterface
$transferObject
)
{
{
$request
=
$transferObject
->
getBody
();
$request
=
$transferObject
->
getBody
();
$headers
=
$transferObject
->
getHeaders
();
$requestOptions
[
'idempotencyKey'
]
=
$request
[
'reference'
];
$requestOptions
=
[];
if
(
!
empty
(
$headers
[
'idempotencyKey'
]))
{
$requestOptions
[
'idempotencyKey'
]
=
$headers
[
'idempotencyKey'
];
}
// call lib
// call lib
$service
=
new
\Adyen\Service\Payment
(
$this
->
_client
);
$service
=
new
\Adyen\Service\Payment
(
$this
->
_client
);
...
...
Gateway/Http/Client/TransactionPayment.php
View file @
3c5450eb
...
@@ -55,6 +55,7 @@ class TransactionPayment implements ClientInterface
...
@@ -55,6 +55,7 @@ class TransactionPayment implements ClientInterface
public
function
placeRequest
(
\Magento\Payment\Gateway\Http\TransferInterface
$transferObject
)
public
function
placeRequest
(
\Magento\Payment\Gateway\Http\TransferInterface
$transferObject
)
{
{
$request
=
$transferObject
->
getBody
();
$request
=
$transferObject
->
getBody
();
$headers
=
$transferObject
->
getHeaders
();
// If the payments call is already done return the request
// If the payments call is already done return the request
if
(
!
empty
(
$request
[
'resultCode'
]))
{
if
(
!
empty
(
$request
[
'resultCode'
]))
{
...
@@ -65,7 +66,12 @@ class TransactionPayment implements ClientInterface
...
@@ -65,7 +66,12 @@ class TransactionPayment implements ClientInterface
$client
=
$this
->
adyenHelper
->
initializeAdyenClient
();
$client
=
$this
->
adyenHelper
->
initializeAdyenClient
();
$service
=
new
\Adyen\Service\Checkout
(
$client
);
$service
=
new
\Adyen\Service\Checkout
(
$client
);
$requestOptions
[
'idempotencyKey'
]
=
$request
[
'reference'
];
$requestOptions
=
[];
if
(
!
empty
(
$headers
[
'idempotencyKey'
]))
{
$requestOptions
[
'idempotencyKey'
]
=
$headers
[
'idempotencyKey'
];
}
try
{
try
{
$response
=
$service
->
payments
(
$request
,
$requestOptions
);
$response
=
$service
->
payments
(
$request
,
$requestOptions
);
...
...
Gateway/Http/TransferFactory.php
View file @
3c5450eb
...
@@ -52,8 +52,14 @@ class TransferFactory implements TransferFactoryInterface
...
@@ -52,8 +52,14 @@ class TransferFactory implements TransferFactoryInterface
*/
*/
public
function
create
(
array
$request
)
public
function
create
(
array
$request
)
{
{
return
$this
->
transferBuilder
if
(
!
empty
(
$request
[
'headers'
]))
{
->
setBody
(
$request
)
$this
->
transferBuilder
->
setHeaders
(
$request
[
'headers'
]);
}
$transfer
=
$this
->
transferBuilder
->
setBody
(
$request
[
'body'
])
->
build
();
->
build
();
return
$transfer
;
}
}
}
}
Gateway/Request/AddressDataBuilder.php
View file @
3c5450eb
...
@@ -61,6 +61,8 @@ class AddressDataBuilder implements BuilderInterface
...
@@ -61,6 +61,8 @@ class AddressDataBuilder implements BuilderInterface
$billingAddress
=
$order
->
getBillingAddress
();
$billingAddress
=
$order
->
getBillingAddress
();
$shippingAddress
=
$order
->
getShippingAddress
();
$shippingAddress
=
$order
->
getShippingAddress
();
return
$this
->
adyenRequestsHelper
->
buildAddressData
([],
$billingAddress
,
$shippingAddress
);
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildAddressData
([],
$billingAddress
,
$shippingAddress
);
return
$request
;
}
}
}
}
Gateway/Request/ApplePayAuthorizationDataBuilder.php
View file @
3c5450eb
...
@@ -55,12 +55,12 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
...
@@ -55,12 +55,12 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
public
function
build
(
array
$buildSubject
)
public
function
build
(
array
$buildSubject
)
{
{
$request
=
[];
$request
Body
=
[];
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$token
=
$payment
->
getAdditionalInformation
(
'token'
);
$token
=
$payment
->
getAdditionalInformation
(
'token'
);
$request
[
'paymentMethod'
][
'type'
]
=
'applepay'
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
'applepay'
;
// get payment data
// get payment data
if
(
$token
)
{
if
(
$token
)
{
...
@@ -68,7 +68,7 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
...
@@ -68,7 +68,7 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
$paymentData
=
$parsedToken
->
token
->
paymentData
;
$paymentData
=
$parsedToken
->
token
->
paymentData
;
try
{
try
{
$paymentData
=
base64_encode
(
json_encode
(
$paymentData
));
$paymentData
=
base64_encode
(
json_encode
(
$paymentData
));
$request
[
'paymentMethod'
][
'applepay.token'
]
=
$paymentData
;
$requestBody
[
'paymentMethod'
][
'applepay.token'
]
=
$paymentData
;
}
catch
(
\Exception
$exception
)
{
}
catch
(
\Exception
$exception
)
{
$this
->
_adyenLogger
->
addAdyenDebug
(
"exception: "
.
$exception
->
getMessage
());
$this
->
_adyenLogger
->
addAdyenDebug
(
"exception: "
.
$exception
->
getMessage
());
}
}
...
@@ -76,6 +76,8 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
...
@@ -76,6 +76,8 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
$this
->
_adyenLogger
->
addAdyenDebug
(
"PaymentToken is empty"
);
$this
->
_adyenLogger
->
addAdyenDebug
(
"PaymentToken is empty"
);
}
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
return
$request
;
}
}
}
}
Gateway/Request/BrowserInfoDataBuilder.php
View file @
3c5450eb
...
@@ -52,6 +52,7 @@ class BrowserInfoDataBuilder implements BuilderInterface
...
@@ -52,6 +52,7 @@ class BrowserInfoDataBuilder implements BuilderInterface
*/
*/
public
function
build
(
array
$buildSubject
)
public
function
build
(
array
$buildSubject
)
{
{
return
$this
->
adyenRequestsHelper
->
buildBrowserData
();
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildBrowserData
();
return
$request
;
}
}
}
}
Gateway/Request/CancelDataBuilder.php
View file @
3c5450eb
...
@@ -60,9 +60,11 @@ class CancelDataBuilder implements BuilderInterface
...
@@ -60,9 +60,11 @@ class CancelDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$pspReference
=
$payment
->
getCcTransId
();
$pspReference
=
$payment
->
getCcTransId
();
return
[
$request
[
'body'
]
=
[
"reference"
=>
$order
->
getOrderIncrementId
(),
"reference"
=>
$order
->
getOrderIncrementId
(),
"originalReference"
=>
$pspReference
"originalReference"
=>
$pspReference
];
];
return
$request
;
}
}
}
}
Gateway/Request/CaptureDataBuilder.php
View file @
3c5450eb
...
@@ -67,7 +67,7 @@ class CaptureDataBuilder implements BuilderInterface
...
@@ -67,7 +67,7 @@ class CaptureDataBuilder implements BuilderInterface
$amount
=
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currency
);
$amount
=
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currency
);
$modificationAmount
=
[
'currency'
=>
$currency
,
'value'
=>
$amount
];
$modificationAmount
=
[
'currency'
=>
$currency
,
'value'
=>
$amount
];
$request
=
[
$request
Body
=
[
"modificationAmount"
=>
$modificationAmount
,
"modificationAmount"
=>
$modificationAmount
,
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
"originalReference"
=>
$pspReference
"originalReference"
=>
$pspReference
...
@@ -79,9 +79,11 @@ class CaptureDataBuilder implements BuilderInterface
...
@@ -79,9 +79,11 @@ class CaptureDataBuilder implements BuilderInterface
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
$brandCode
))
{
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
$brandCode
))
{
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$payment
);
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$payment
);
$request
[
"additionalData"
]
=
$openInvoiceFields
;
$request
Body
[
"additionalData"
]
=
$openInvoiceFields
;
}
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
return
$request
;
}
}
...
...
Gateway/Request/CcAuthorizationDataBuilder.php
View file @
3c5450eb
...
@@ -15,7 +15,7 @@
...
@@ -15,7 +15,7 @@
*
*
* Adyen Payment module (https://www.adyen.com/)
* Adyen Payment module (https://www.adyen.com/)
*
*
* Copyright (c) 201
5
Adyen BV (https://www.adyen.com/)
* Copyright (c) 201
9
Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
* See LICENSE.txt for license details.
*
*
* Author: Adyen <magento@adyen.com>
* Author: Adyen <magento@adyen.com>
...
@@ -24,32 +24,52 @@
...
@@ -24,32 +24,52 @@
namespace
Adyen\Payment\Gateway\Request
;
namespace
Adyen\Payment\Gateway\Request
;
use
Magento\Payment\Gateway\Request\BuilderInterface
;
use
Magento\Payment\Gateway\Request\BuilderInterface
;
use
Adyen\Payment\Observer\AdyenCcDataAssignObserver
;
class
CcAuthorizationDataBuilder
implements
BuilderInterface
class
CcAuthorizationDataBuilder
implements
BuilderInterface
{
{
/**
/**
* @param array $buildSubject
* @param array $buildSubject
* @return array|mixed
* @return mixed
* @throws \Magento\Framework\Exception\LocalizedException
*/
*/
public
function
build
(
array
$buildSubject
)
public
function
build
(
array
$buildSubject
)
{
{
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$requestBody
=
[];
//
retrieve payments response which we already got and saved in the payment controller
//
If ccType is set use this. For bcmc you need bcmc otherwise it will fail
if
(
$response
=
$payment
->
getAdditionalInformation
(
"paymentsResponse"
))
{
$requestBody
[
'paymentMethod'
][
'type'
]
=
"scheme"
;
// the payments response needs to be passed to the next process because after this point we don't have
if
(
$cardNumber
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
))
{
// access to the payment object therefore to the additionalInformation array
$requestBody
[
'paymentMethod'
][
'encryptedCardNumber'
]
=
$cardNumber
;
$request
=
$response
;
}
// Remove from additional data
if
(
$expiryMonth
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_MONTH
))
{
$
payment
->
unsAdditionalInformation
(
"paymentsResponse"
)
;
$
requestBody
[
'paymentMethod'
][
'encryptedExpiryMonth'
]
=
$expiryMonth
;
}
else
{
}
$errorMsg
=
__
(
'Error with payment method please select different payment method.'
);
if
(
$expiryYear
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_YEAR
))
{
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
$errorMsg
))
;
$requestBody
[
'paymentMethod'
][
'encryptedExpiryYear'
]
=
$expiryYear
;
}
}
if
(
$holderName
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
HOLDER_NAME
))
{
$requestBody
[
'paymentMethod'
][
'holderName'
]
=
$holderName
;
}
if
(
$securityCode
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
))
{
$requestBody
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
}
// Remove from additional data
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_MONTH
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_YEAR
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
HOLDER_NAME
);
// if installments is set add it into the request
if
(
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
&&
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
>
0
)
{
$requestBody
[
'installments'
][
'value'
]
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
);
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
return
$request
;
}
}
}
}
\ No newline at end of file
Gateway/Request/CcBackendAuthorizationDataBuilder.php
View file @
3c5450eb
...
@@ -63,23 +63,23 @@ class CcBackendAuthorizationDataBuilder implements BuilderInterface
...
@@ -63,23 +63,23 @@ class CcBackendAuthorizationDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$order
=
$paymentDataObject
->
getOrder
();
$order
=
$paymentDataObject
->
getOrder
();
$storeId
=
$order
->
getStoreId
();
$storeId
=
$order
->
getStoreId
();
$request
=
[];
$request
Body
=
[];
// If ccType is set use this. For bcmc you need bcmc otherwise it will fail
// If ccType is set use this. For bcmc you need bcmc otherwise it will fail
$request
[
'paymentMethod'
][
'type'
]
=
'scheme'
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
'scheme'
;
if
(
$cardNumber
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
))
{
if
(
$cardNumber
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
))
{
$request
[
'paymentMethod'
][
'encryptedCardNumber'
]
=
$cardNumber
;
$request
Body
[
'paymentMethod'
][
'encryptedCardNumber'
]
=
$cardNumber
;
}
}
if
(
$expiryMonth
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_MONTH
))
{
if
(
$expiryMonth
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_MONTH
))
{
$request
[
'paymentMethod'
][
'encryptedExpiryMonth'
]
=
$expiryMonth
;
$request
Body
[
'paymentMethod'
][
'encryptedExpiryMonth'
]
=
$expiryMonth
;
}
}
if
(
$expiryYear
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_YEAR
))
{
if
(
$expiryYear
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_YEAR
))
{
$request
[
'paymentMethod'
][
'encryptedExpiryYear'
]
=
$expiryYear
;
$request
Body
[
'paymentMethod'
][
'encryptedExpiryYear'
]
=
$expiryYear
;
}
}
if
(
$holderName
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
HOLDER_NAME
))
{
if
(
$holderName
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
HOLDER_NAME
))
{
$request
[
'paymentMethod'
][
'holderName'
]
=
$holderName
;
$request
Body
[
'paymentMethod'
][
'holderName'
]
=
$holderName
;
}
}
if
(
$securityCode
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
))
{
if
(
$securityCode
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
))
{
$request
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
$request
Body
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
}
}
// Remove from additional data
// Remove from additional data
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
);
...
@@ -88,20 +88,27 @@ class CcBackendAuthorizationDataBuilder implements BuilderInterface
...
@@ -88,20 +88,27 @@ class CcBackendAuthorizationDataBuilder implements BuilderInterface
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
HOLDER_NAME
);
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
HOLDER_NAME
);
/**
/**
*
if MOTO for backend is enabled use MOTO as shopper interaction type
*
On Backend always use MOTO
*/
*/
$enableMoto
=
$this
->
adyenHelper
->
getAdyenCcConfigDataFlag
(
'enable_moto'
,
$storeId
);
$requestBody
[
'shopperInteraction'
]
=
"Moto"
;
if
(
$this
->
appState
->
getAreaCode
()
===
\Magento\Backend\App\Area\FrontNameResolver
::
AREA_CODE
&&
$enableMoto
)
{
$request
[
'shopperInteraction'
]
=
"Moto"
;
}
// if installments is set add it into the request
// if installments is set add it into the request
if
(
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
&&
if
(
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
&&
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
>
0
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
>
0
)
{
)
{
$request
[
'installments'
][
'value'
]
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
);
$requestBody
[
'installments'
][
'value'
]
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
);
}
// Flow for Billing agreements, for Vault check VaultDataBuilder
if
(
!
$this
->
adyenHelper
->
isCreditCardVaultEnabled
())
{
if
(
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
STORE_CC
))
{
$requestBody
[
'enableRecurring'
]
=
true
;
}
else
{
$requestBody
[
'enableRecurring'
]
=
false
;
}
}
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
return
$request
;
}
}
}
}
Gateway/Request/CheckoutDataBuilder.php
View file @
3c5450eb
...
@@ -69,31 +69,31 @@ class CheckoutDataBuilder implements BuilderInterface
...
@@ -69,31 +69,31 @@ class CheckoutDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$order
=
$payment
->
getOrder
();
$order
=
$payment
->
getOrder
();
$storeId
=
$order
->
getStoreId
();
$storeId
=
$order
->
getStoreId
();
$request
=
[];
$request
Body
=
[];
// do not send email
// do not send email
$order
->
setCanSendNewEmailFlag
(
false
);
$order
->
setCanSendNewEmailFlag
(
false
);
$request
[
'paymentMethod'
][
'type'
]
=
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
BRAND_CODE
);
$request
Body
[
'paymentMethod'
][
'type'
]
=
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
BRAND_CODE
);
// Additional data for payment methods with issuer list
// Additional data for payment methods with issuer list
if
(
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
ISSUER_ID
))
{
if
(
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
ISSUER_ID
))
{
$request
[
'paymentMethod'
][
'issuer'
]
=
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
ISSUER_ID
);
$request
Body
[
'paymentMethod'
][
'issuer'
]
=
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
ISSUER_ID
);
}
}
$request
[
'returnUrl'
]
=
$this
->
storeManager
->
getStore
()
->
getBaseUrl
(
\Magento\Framework\UrlInterface
::
URL_TYPE_LINK
)
.
'adyen/process/result'
;
$request
Body
[
'returnUrl'
]
=
$this
->
storeManager
->
getStore
()
->
getBaseUrl
(
\Magento\Framework\UrlInterface
::
URL_TYPE_LINK
)
.
'adyen/process/result'
;
// Additional data for ACH
// Additional data for ACH
if
(
$payment
->
getAdditionalInformation
(
"bankAccountNumber"
))
{
if
(
$payment
->
getAdditionalInformation
(
"bankAccountNumber"
))
{
$request
[
'bankAccount'
][
'bankAccountNumber'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountNumber"
);
$request
Body
[
'bankAccount'
][
'bankAccountNumber'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountNumber"
);
}
}
if
(
$payment
->
getAdditionalInformation
(
"bankLocationId"
))
{
if
(
$payment
->
getAdditionalInformation
(
"bankLocationId"
))
{
$request
[
'bankAccount'
][
'bankLocationId'
]
=
$payment
->
getAdditionalInformation
(
"bankLocationId"
);
$request
Body
[
'bankAccount'
][
'bankLocationId'
]
=
$payment
->
getAdditionalInformation
(
"bankLocationId"
);
}
}
if
(
$payment
->
getAdditionalInformation
(
"bankAccountOwnerName"
))
{
if
(
$payment
->
getAdditionalInformation
(
"bankAccountOwnerName"
))
{
$request
[
'bankAccount'
][
'ownerName'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountOwnerName"
);
$request
Body
[
'bankAccount'
][
'ownerName'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountOwnerName"
);
}
}
// Additional data for open invoice payment
// Additional data for open invoice payment
...
@@ -101,31 +101,31 @@ class CheckoutDataBuilder implements BuilderInterface
...
@@ -101,31 +101,31 @@ class CheckoutDataBuilder implements BuilderInterface
$order
->
setCustomerGender
(
\Adyen\Payment\Model\Gender
::
getMagentoGenderFromAdyenGender
(
$order
->
setCustomerGender
(
\Adyen\Payment\Model\Gender
::
getMagentoGenderFromAdyenGender
(
$payment
->
getAdditionalInformation
(
"gender"
))
$payment
->
getAdditionalInformation
(
"gender"
))
);
);
$request
[
'paymentMethod'
][
'personalDetails'
][
'gender'
]
=
$payment
->
getAdditionalInformation
(
"gender"
);
$requestBody
[
'paymentMethod'
][
'personalDetails'
][
'gender'
]
=
$payment
->
getAdditionalInformation
(
"gender"
);
}
}
if
(
$payment
->
getAdditionalInformation
(
"dob"
))
{
if
(
$payment
->
getAdditionalInformation
(
"dob"
))
{
$order
->
setCustomerDob
(
$payment
->
getAdditionalInformation
(
"dob"
));
$order
->
setCustomerDob
(
$payment
->
getAdditionalInformation
(
"dob"
));
$request
[
'paymentMethod'
][
'personalDetails'
][
'dateOfBirth'
]
=
$this
->
adyenHelper
->
formatDate
(
$payment
->
getAdditionalInformation
(
"dob"
),
'Y-m-d'
)
;
$requestBody
[
'paymentMethod'
][
'personalDetails'
][
'dateOfBirth'
]
=
$this
->
adyenHelper
->
formatDate
(
$payment
->
getAdditionalInformation
(
"dob"
),
'Y-m-d'
)
;
}
}
if
(
$payment
->
getAdditionalInformation
(
"telephone"
))
{
if
(
$payment
->
getAdditionalInformation
(
"telephone"
))
{
$order
->
getBillingAddress
()
->
setTelephone
(
$payment
->
getAdditionalInformation
(
"telephone"
));
$order
->
getBillingAddress
()
->
setTelephone
(
$payment
->
getAdditionalInformation
(
"telephone"
));
$request
[
'paymentMethod'
][
'personalDetails'
][
'telephoneNumber'
]
=
$payment
->
getAdditionalInformation
(
"telephone"
);
$requestBody
[
'paymentMethod'
][
'personalDetails'
][
'telephoneNumber'
]
=
$payment
->
getAdditionalInformation
(
"telephone"
);
}
}
if
(
$payment
->
getAdditionalInformation
(
"ssn"
))
{
if
(
$payment
->
getAdditionalInformation
(
"ssn"
))
{
$request
[
'paymentMethod'
][
'personalDetails'
][
'socialSecurityNumber'
]
=
$payment
->
getAdditionalInformation
(
"ssn"
);
$request
Body
[
'paymentMethod'
][
'personalDetails'
][
'socialSecurityNumber'
]
=
$payment
->
getAdditionalInformation
(
"ssn"
);
}
}
// Additional data for sepa direct debit
// Additional data for sepa direct debit
if
(
$payment
->
getAdditionalInformation
(
"ownerName"
))
{
if
(
$payment
->
getAdditionalInformation
(
"ownerName"
))
{
$request
[
'paymentMethod'
][
'sepa.ownerName'
]
=
$payment
->
getAdditionalInformation
(
"ownerName"
);
$request
Body
[
'paymentMethod'
][
'sepa.ownerName'
]
=
$payment
->
getAdditionalInformation
(
"ownerName"
);
}
}
if
(
$payment
->
getAdditionalInformation
(
"ibanNumber"
))
{
if
(
$payment
->
getAdditionalInformation
(
"ibanNumber"
))
{
$request
[
'paymentMethod'
][
'sepa.ibanNumber'
]
=
$payment
->
getAdditionalInformation
(
"ibanNumber"
);
$request
Body
[
'paymentMethod'
][
'sepa.ibanNumber'
]
=
$payment
->
getAdditionalInformation
(
"ibanNumber"
);
}
}
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
...
@@ -137,27 +137,27 @@ class CheckoutDataBuilder implements BuilderInterface
...
@@ -137,27 +137,27 @@ class CheckoutDataBuilder implements BuilderInterface
)
)
)
{
)
{
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$order
);
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$order
);
$request
=
array_merge
(
$request
,
$openInvoiceFields
);
$requestBody
=
array_merge
(
$requestBody
,
$openInvoiceFields
);
}
}
// Ratepay specific Fingerprint
// Ratepay specific Fingerprint
if
(
$payment
->
getAdditionalInformation
(
"df_value"
)
&&
$this
->
adyenHelper
->
isPaymentMethodRatepayMethod
(
if
(
$payment
->
getAdditionalInformation
(
"df_value"
)
&&
$this
->
adyenHelper
->
isPaymentMethodRatepayMethod
(
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
BRAND_CODE
)
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
BRAND_CODE
)
))
{
))
{
$request
[
'deviceFingerprint'
]
=
$payment
->
getAdditionalInformation
(
"df_value"
);
$request
Body
[
'deviceFingerprint'
]
=
$payment
->
getAdditionalInformation
(
"df_value"
);
}
}
//Boleto data
//Boleto data
if
(
$payment
->
getAdditionalInformation
(
"social_security_number"
))
{
if
(
$payment
->
getAdditionalInformation
(
"social_security_number"
))
{
$request
[
'socialSecurityNumber'
]
=
$payment
->
getAdditionalInformation
(
"social_security_number"
);
$request
Body
[
'socialSecurityNumber'
]
=
$payment
->
getAdditionalInformation
(
"social_security_number"
);
}
}
if
(
$payment
->
getAdditionalInformation
(
"firstname"
))
{
if
(
$payment
->
getAdditionalInformation
(
"firstname"
))
{
$request
[
'shopperName'
][
'firstName'
]
=
$payment
->
getAdditionalInformation
(
"firstname"
);
$request
Body
[
'shopperName'
][
'firstName'
]
=
$payment
->
getAdditionalInformation
(
"firstname"
);
}
}
if
(
$payment
->
getAdditionalInformation
(
"lastName"
))
{
if
(
$payment
->
getAdditionalInformation
(
"lastName"
))
{
$request
[
'shopperName'
][
'lastName'
]
=
$payment
->
getAdditionalInformation
(
"lastName"
);
$request
Body
[
'shopperName'
][
'lastName'
]
=
$payment
->
getAdditionalInformation
(
"lastName"
);
}
}
if
(
$payment
->
getMethod
()
==
\Adyen\Payment\Model\Ui\AdyenBoletoConfigProvider
::
CODE
)
{
if
(
$payment
->
getMethod
()
==
\Adyen\Payment\Model\Ui\AdyenBoletoConfigProvider
::
CODE
)
{
...
@@ -165,11 +165,11 @@ class CheckoutDataBuilder implements BuilderInterface
...
@@ -165,11 +165,11 @@ class CheckoutDataBuilder implements BuilderInterface
$boletoTypes
=
explode
(
','
,
$boletoTypes
);
$boletoTypes
=
explode
(
','
,
$boletoTypes
);
if
(
count
(
$boletoTypes
)
==
1
)
{
if
(
count
(
$boletoTypes
)
==
1
)
{
$request
[
'selectedBrand'
]
=
$boletoTypes
[
0
];
$request
Body
[
'selectedBrand'
]
=
$boletoTypes
[
0
];
$request
[
'paymentMethod'
][
'type'
]
=
$boletoTypes
[
0
];
$request
Body
[
'paymentMethod'
][
'type'
]
=
$boletoTypes
[
0
];
}
else
{
}
else
{
$request
[
'selectedBrand'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
$request
Body
[
'selectedBrand'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
$request
[
'paymentMethod'
][
'type'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
$request
Body
[
'paymentMethod'
][
'type'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
}
}
$deliveryDays
=
(
int
)
$this
->
adyenHelper
->
getAdyenBoletoConfigData
(
"delivery_days"
,
$storeId
);
$deliveryDays
=
(
int
)
$this
->
adyenHelper
->
getAdyenBoletoConfigData
(
"delivery_days"
,
$storeId
);
...
@@ -186,10 +186,13 @@ class CheckoutDataBuilder implements BuilderInterface
...
@@ -186,10 +186,13 @@ class CheckoutDataBuilder implements BuilderInterface
)
)
);
);
$request
[
'deliveryDate'
]
=
$deliveryDate
;
$request
Body
[
'deliveryDate'
]
=
$deliveryDate
;
$order
->
setCanSendNewEmailFlag
(
true
);
$order
->
setCanSendNewEmailFlag
(
true
);
}
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
return
$request
;
}
}
...
...
Gateway/Request/CustomerDataBuilder.php
View file @
3c5450eb
...
@@ -61,7 +61,8 @@ class CustomerDataBuilder implements BuilderInterface
...
@@ -61,7 +61,8 @@ class CustomerDataBuilder implements BuilderInterface
$customerId
=
$order
->
getCustomerId
();
$customerId
=
$order
->
getCustomerId
();
$billingAddress
=
$order
->
getBillingAddress
();
$billingAddress
=
$order
->
getBillingAddress
();
$storeId
=
$order
->
getStoreId
();
$storeId
=
$order
->
getStoreId
();
$additionalInformation
=
$payment
->
getAdditionalInformation
();
return
$this
->
adyenRequestsHelper
->
buildCustomerData
([],
$customerId
,
$billingAddress
,
$storeId
,
$payment
);
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildCustomerData
([],
$customerId
,
$billingAddress
,
$storeId
,
$payment
,
$additionalInformation
);
return
$request
;
}
}
}
}
Gateway/Request/CustomerIpDataBuilder.php
View file @
3c5450eb
...
@@ -39,7 +39,8 @@ class CustomerIpDataBuilder implements BuilderInterface
...
@@ -39,7 +39,8 @@ class CustomerIpDataBuilder implements BuilderInterface
*
*
* @param \Adyen\Payment\Helper\Requests $adyenRequestsHelper
* @param \Adyen\Payment\Helper\Requests $adyenRequestsHelper
*/
*/
public
function
__construct
(
\Adyen\Payment\Helper\Requests
$adyenRequestsHelper
)
public
function
__construct
(
\Adyen\Payment\Helper\Requests
$adyenRequestsHelper
)
{
{
$this
->
adyenRequestsHelper
=
$adyenRequestsHelper
;
$this
->
adyenRequestsHelper
=
$adyenRequestsHelper
;
}
}
...
@@ -52,8 +53,15 @@ class CustomerIpDataBuilder implements BuilderInterface
...
@@ -52,8 +53,15 @@ class CustomerIpDataBuilder implements BuilderInterface
{
{
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$shopperIp
=
$paymentDataObject
->
getPayment
()
->
getOrder
()
->
getXForwardedFor
();
$order
=
$paymentDataObject
->
getPayment
()
->
getOrder
();
$shopperIp
=
$order
->
getRemoteIp
();
return
$this
->
adyenRequestsHelper
->
buildCustomerIpData
([],
$shopperIp
);
if
(
empty
(
$shopperIp
))
{
$shopperIp
=
$order
->
getXForwardedFor
();
}
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildCustomerIpData
([],
$shopperIp
);
return
$request
;
}
}
}
}
Gateway/Request/GooglePayAuthorizationDataBuilder.php
View file @
3c5450eb
...
@@ -55,17 +55,17 @@ class GooglePayAuthorizationDataBuilder implements BuilderInterface
...
@@ -55,17 +55,17 @@ class GooglePayAuthorizationDataBuilder implements BuilderInterface
public
function
build
(
array
$buildSubject
)
public
function
build
(
array
$buildSubject
)
{
{
$request
=
[];
$request
Body
=
[];
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$token
=
$payment
->
getAdditionalInformation
(
'token'
);
$token
=
$payment
->
getAdditionalInformation
(
'token'
);
$request
[
'paymentMethod'
][
'type'
]
=
'paywithgoogle'
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
'paywithgoogle'
;
// get payment data
// get payment data
if
(
$token
)
{
if
(
$token
)
{
$parsedToken
=
json_decode
(
$token
);
$parsedToken
=
json_decode
(
$token
);
try
{
try
{
$request
[
'paymentMethod'
][
'paywithgoogle.token'
]
=
$parsedToken
;
$requestBody
[
'paymentMethod'
][
'paywithgoogle.token'
]
=
$parsedToken
;
}
catch
(
\Exception
$exception
)
{
}
catch
(
\Exception
$exception
)
{
$this
->
adyenLogger
->
addAdyenDebug
(
"exception: "
.
$exception
->
getMessage
());
$this
->
adyenLogger
->
addAdyenDebug
(
"exception: "
.
$exception
->
getMessage
());
}
}
...
@@ -73,6 +73,8 @@ class GooglePayAuthorizationDataBuilder implements BuilderInterface
...
@@ -73,6 +73,8 @@ class GooglePayAuthorizationDataBuilder implements BuilderInterface
$this
->
adyenLogger
->
addAdyenDebug
(
"PaymentToken is empty"
);
$this
->
adyenLogger
->
addAdyenDebug
(
"PaymentToken is empty"
);
}
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
return
$request
;
}
}
}
}
Gateway/Request/MerchantAccountDataBuilder.php
View file @
3c5450eb
...
@@ -56,6 +56,8 @@ class MerchantAccountDataBuilder implements BuilderInterface
...
@@ -56,6 +56,8 @@ class MerchantAccountDataBuilder implements BuilderInterface
$storeId
=
$order
->
getStoreId
();
$storeId
=
$order
->
getStoreId
();
$method
=
$payment
->
getMethod
();
$method
=
$payment
->
getMethod
();
return
$this
->
adyenRequestsHelper
->
buildMerchantAccountData
([],
$method
,
$storeId
);
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildMerchantAccountData
([],
$method
,
$storeId
);
return
$request
;
}
}
}
}
Gateway/Request/OneclickAuthorizationDataBuilder.php
View file @
3c5450eb
...
@@ -34,7 +34,7 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
...
@@ -34,7 +34,7 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
private
$adyenHelper
;
private
$adyenHelper
;
/**
/**
*
Capture
DataBuilder constructor.
*
OneclickAuthorization
DataBuilder constructor.
*
*
* @param \Adyen\Payment\Helper\Data $adyenHelper
* @param \Adyen\Payment\Helper\Data $adyenHelper
*/
*/
...
@@ -49,20 +49,20 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
...
@@ -49,20 +49,20 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
*/
*/
public
function
build
(
array
$buildSubject
)
public
function
build
(
array
$buildSubject
)
{
{
$request
=
[];
$request
Body
=
[];
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
// If ccType is set use this. For bcmc you need bcmc otherwise it will fail
// If ccType is set use this. For bcmc you need bcmc otherwise it will fail
$request
[
'paymentMethod'
][
'type'
]
=
"scheme"
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
"scheme"
;
if
(
$variant
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
VARIANT
))
{
if
(
$variant
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
VARIANT
))
{
$request
[
'paymentMethod'
][
'type'
]
=
$variant
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
$variant
;
}
}
if
(
$securityCode
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
))
{
if
(
$securityCode
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
))
{
$request
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
$request
Body
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
}
}
$payment
->
unsAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
);
$payment
->
unsAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
);
...
@@ -73,12 +73,12 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
...
@@ -73,12 +73,12 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
$shopperInteraction
=
"ContAuth"
;
$shopperInteraction
=
"ContAuth"
;
}
}
$request
[
'shopperInteraction'
]
=
$shopperInteraction
;
$request
Body
[
'shopperInteraction'
]
=
$shopperInteraction
;
$request
[
'paymentMethod'
][
'recurringDetailReference'
]
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
RECURRING_DETAIL_REFERENCE
);
$request
Body
[
'paymentMethod'
][
'recurringDetailReference'
]
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
RECURRING_DETAIL_REFERENCE
);
// if it is a sepadirectdebit set selectedBrand to sepadirectdebit in the case of oneclick
// if it is a sepadirectdebit set selectedBrand to sepadirectdebit in the case of oneclick
if
(
$payment
->
getCcType
()
==
"sepadirectdebit"
)
{
if
(
$payment
->
getCcType
()
==
"sepadirectdebit"
)
{
$request
[
'selectedBrand'
]
=
"sepadirectdebit"
;
$request
Body
[
'selectedBrand'
]
=
"sepadirectdebit"
;
}
}
/*
/*
...
@@ -87,15 +87,16 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
...
@@ -87,15 +87,16 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
*/
*/
if
(
!
$payment
->
getAdditionalInformation
(
'customer_interaction'
))
{
if
(
!
$payment
->
getAdditionalInformation
(
'customer_interaction'
))
{
if
(
$payment
->
getCcType
()
==
"directEbanking"
||
$payment
->
getCcType
()
==
"ideal"
)
{
if
(
$payment
->
getCcType
()
==
"directEbanking"
||
$payment
->
getCcType
()
==
"ideal"
)
{
$request
[
'selectedBrand'
]
=
"sepadirectdebit"
;
$request
Body
[
'selectedBrand'
]
=
"sepadirectdebit"
;
}
}
}
}
// if installments is set add it into the request
// if installments is set add it into the request
if
(
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
>
0
)
{
if
(
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
>
0
)
{
$request
[
'installments'
][
'value'
]
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
);
$request
Body
[
'installments'
][
'value'
]
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
);
}
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
return
$request
;
}
}
}
}
Gateway/Request/PaymentDataBuilder.php
View file @
3c5450eb
...
@@ -60,7 +60,12 @@ class PaymentDataBuilder implements BuilderInterface
...
@@ -60,7 +60,12 @@ class PaymentDataBuilder implements BuilderInterface
$currencyCode
=
$fullOrder
->
getOrderCurrencyCode
();
$currencyCode
=
$fullOrder
->
getOrderCurrencyCode
();
$amount
=
$fullOrder
->
getGrandTotal
();
$amount
=
$fullOrder
->
getGrandTotal
();
$reference
=
$order
->
getOrderIncrementId
();
$reference
=
$order
->
getOrderIncrementId
();
$paymentMethod
=
$payment
->
getMethod
();
return
$this
->
adyenRequestsHelper
->
buildPaymentData
([],
$amount
,
$currencyCode
,
$reference
);
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildPaymentData
([],
$amount
,
$currencyCode
,
$reference
,
$paymentMethod
);
$request
[
'headers'
]
=
$this
->
adyenRequestsHelper
->
addIdempotencyKey
([],
$paymentMethod
,
$reference
);
return
$request
;
}
}
}
}
Gateway/Request/PosCloudBuilder.php
View file @
3c5450eb
...
@@ -38,11 +38,13 @@ class PosCloudBuilder implements BuilderInterface
...
@@ -38,11 +38,13 @@ class PosCloudBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
return
[
$request
[
'body'
]
=
[
"response"
=>
$payment
->
getAdditionalInformation
(
"terminalResponse"
),
"response"
=>
$payment
->
getAdditionalInformation
(
"terminalResponse"
),
"serviceID"
=>
$payment
->
getAdditionalInformation
(
"serviceID"
),
"serviceID"
=>
$payment
->
getAdditionalInformation
(
"serviceID"
),
"initiateDate"
=>
$payment
->
getAdditionalInformation
(
"initiateDate"
),
"initiateDate"
=>
$payment
->
getAdditionalInformation
(
"initiateDate"
),
"terminalID"
=>
$payment
->
getAdditionalInformation
(
"terminal_id"
)
"terminalID"
=>
$payment
->
getAdditionalInformation
(
"terminal_id"
)
];
];
return
$request
;
}
}
}
}
Gateway/Request/RecurringDataBuilder.php
View file @
3c5450eb
...
@@ -64,7 +64,8 @@ class RecurringDataBuilder implements BuilderInterface
...
@@ -64,7 +64,8 @@ class RecurringDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$storeId
=
$payment
->
getOrder
()
->
getStoreId
();
$storeId
=
$payment
->
getOrder
()
->
getStoreId
();
$areaCode
=
$this
->
appState
->
getAreaCode
();
$areaCode
=
$this
->
appState
->
getAreaCode
();
$additionalInformation
=
$payment
->
getAdditionalInformation
();
return
$this
->
adyenRequestsHelper
->
buildRecurringData
([],
$areaCode
,
$storeId
,
$payment
);
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildRecurringData
([],
$areaCode
,
$storeId
,
$additionalInformation
);
return
$request
;
}
}
}
}
Gateway/Request/RecurringVaultDataBuilder.php
View file @
3c5450eb
...
@@ -33,17 +33,20 @@ class RecurringVaultDataBuilder implements BuilderInterface
...
@@ -33,17 +33,20 @@ class RecurringVaultDataBuilder implements BuilderInterface
*/
*/
public
function
build
(
array
$buildSubject
)
public
function
build
(
array
$buildSubject
)
{
{
$re
sult
=
[];
$re
questBody
=
[];
$recurring
=
[
'contract'
=>
\Adyen\Payment\Model\RecurringType
::
RECURRING
];
$recurring
=
[
'contract'
=>
\Adyen\Payment\Model\RecurringType
::
RECURRING
];
$re
sult
[
'recurring'
]
=
$recurring
;
$re
questBody
[
'recurring'
]
=
$recurring
;
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$extensionAttributes
=
$payment
->
getExtensionAttributes
();
$extensionAttributes
=
$payment
->
getExtensionAttributes
();
$paymentToken
=
$extensionAttributes
->
getVaultPaymentToken
();
$paymentToken
=
$extensionAttributes
->
getVaultPaymentToken
();
$result
[
'selectedRecurringDetailReference'
]
=
$paymentToken
->
getGatewayToken
();
$requestBody
[
'selectedRecurringDetailReference'
]
=
$paymentToken
->
getGatewayToken
();
$result
[
'shopperInteraction'
]
=
'ContAuth'
;
$requestBody
[
'shopperInteraction'
]
=
'ContAuth'
;
return
$result
;
$request
[
'body'
]
=
$requestBody
;
return
$request
;
}
}
}
}
Gateway/Request/RefundDataBuilder.php
View file @
3c5450eb
...
@@ -107,7 +107,7 @@ class RefundDataBuilder implements BuilderInterface
...
@@ -107,7 +107,7 @@ class RefundDataBuilder implements BuilderInterface
}
}
// loop over payment methods and refund them all
// loop over payment methods and refund them all
$re
sult
=
[];
$re
questBody
=
[];
foreach
(
$orderPaymentCollection
as
$splitPayment
)
{
foreach
(
$orderPaymentCollection
as
$splitPayment
)
{
// could be that not all the split payments need a refund
// could be that not all the split payments need a refund
if
(
$amount
>
0
)
{
if
(
$amount
>
0
)
{
...
@@ -140,7 +140,7 @@ class RefundDataBuilder implements BuilderInterface
...
@@ -140,7 +140,7 @@ class RefundDataBuilder implements BuilderInterface
'value'
=>
$this
->
adyenHelper
->
formatAmount
(
$modificationAmount
,
$currency
)
'value'
=>
$this
->
adyenHelper
->
formatAmount
(
$modificationAmount
,
$currency
)
];
];
$re
sult
[]
=
[
$re
questBody
[]
=
[
"modificationAmount"
=>
$modificationAmountObject
,
"modificationAmount"
=>
$modificationAmountObject
,
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
"originalReference"
=>
$splitPayment
->
getPspreference
(),
"originalReference"
=>
$splitPayment
->
getPspreference
(),
...
@@ -153,7 +153,7 @@ class RefundDataBuilder implements BuilderInterface
...
@@ -153,7 +153,7 @@ class RefundDataBuilder implements BuilderInterface
$amount
=
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currency
);
$amount
=
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currency
);
$modificationAmount
=
[
'currency'
=>
$currency
,
'value'
=>
$amount
];
$modificationAmount
=
[
'currency'
=>
$currency
,
'value'
=>
$amount
];
$re
sult
=
[
$re
questBody
=
[
[
[
"modificationAmount"
=>
$modificationAmount
,
"modificationAmount"
=>
$modificationAmount
,
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
...
@@ -170,11 +170,13 @@ class RefundDataBuilder implements BuilderInterface
...
@@ -170,11 +170,13 @@ class RefundDataBuilder implements BuilderInterface
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$payment
);
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$payment
);
//There is only one payment, so we add the fields to the first(and only) result
//There is only one payment, so we add the fields to the first(and only) result
$re
sult
[
0
][
"additionalData"
]
=
$openInvoiceFields
;
$re
questBody
[
0
][
"additionalData"
]
=
$openInvoiceFields
;
}
}
}
}
return
$result
;
$request
[
'body'
]
=
$requestBody
;
return
$request
;
}
}
/**
/**
...
...
Api/AdyenPaymentProcessInterface
.php
→
Gateway/Request/ThreeDS2DataBuilder
.php
View file @
3c5450eb
...
@@ -13,22 +13,57 @@
...
@@ -13,22 +13,57 @@
* #############
* #############
* ############
* ############
*
*
* Adyen Payment
Module
* Adyen Payment
module (https://www.adyen.com/)
*
*
* Copyright (c) 2019 Adyen B.V.
* Copyright (c) 2019 Adyen BV (https://www.adyen.com/)
* This file is open source and available under the MIT license.
* See LICENSE.txt for license details.
* See the LICENSE file for more info.
*
*
* Author: Adyen <magento@adyen.com>
* Author: Adyen <magento@adyen.com>
*/
*/
namespace
Adyen\Payment\
Api
;
namespace
Adyen\Payment\
Gateway\Request
;
interface
AdyenPaymentProcessInterface
use
Magento\Payment\Gateway\Request\BuilderInterface
;
class
ThreeDS2DataBuilder
implements
BuilderInterface
{
{
/**
/**
* @param string $payload
* @var \Magento\Framework\App\State
* @return string
*/
private
$appState
;
/**
* @var \Adyen\Payment\Helper\Requests
*/
private
$adyenRequestsHelper
;
/**
* ThreeDS2DataBuilder constructor.
*
* @param \Magento\Framework\Model\Context $context
* @param \Adyen\Payment\Helper\Requests $adyenRequestsHelper
*/
public
function
__construct
(
\Magento\Framework\Model\Context
$context
,
\Adyen\Payment\Helper\Requests
$adyenRequestsHelper
)
{
$this
->
appState
=
$context
->
getAppState
();
$this
->
adyenRequestsHelper
=
$adyenRequestsHelper
;
}
/**
* @param array $buildSubject
* @return array
* @throws \Magento\Framework\Exception\LocalizedException
*/
*/
public
function
initiate
(
$payload
);
public
function
build
(
array
$buildSubject
)
{
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$additionalInformation
=
$payment
->
getAdditionalInformation
();
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildThreeDS2Data
([],
$additionalInformation
);
return
$request
;
}
}
}
Gateway/Request/ThreeDs2DataBuilder.php
0 → 100644
View file @
3c5450eb
<?php
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2015 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/
namespace
Adyen\Payment\Gateway\Request
;
use
Magento\Payment\Gateway\Request\BuilderInterface
;
class
RecurringDataBuilder
implements
BuilderInterface
{
/**
* @var \Magento\Framework\App\State
*/
private
$appState
;
/**
* @var \Adyen\Payment\Helper\Requests
*/
private
$adyenRequestsHelper
;
/**
* RecurringDataBuilder constructor.
*
* @param \Magento\Framework\Model\Context $context
* @param \Adyen\Payment\Helper\Requests $adyenRequestsHelper
*/
public
function
__construct
(
\Magento\Framework\Model\Context
$context
,
\Adyen\Payment\Helper\Requests
$adyenRequestsHelper
)
{
$this
->
appState
=
$context
->
getAppState
();
$this
->
adyenRequestsHelper
=
$adyenRequestsHelper
;
}
/**
* @param array $buildSubject
* @return array
* @throws \Magento\Framework\Exception\LocalizedException
*/
public
function
build
(
array
$buildSubject
)
{
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$storeId
=
$payment
->
getOrder
()
->
getStoreId
();
$areaCode
=
$this
->
appState
->
getAreaCode
();
return
$this
->
adyenRequestsHelper
->
buildRecurringData
([],
$areaCode
,
$storeId
,
$payment
);
}
}
Gateway/Request/VaultDataBuilder.php
View file @
3c5450eb
...
@@ -54,6 +54,8 @@ class VaultDataBuilder implements BuilderInterface
...
@@ -54,6 +54,8 @@ class VaultDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$payment
=
$paymentDataObject
->
getPayment
();
$additionalInformation
=
$payment
->
getAdditionalInformation
();
$additionalInformation
=
$payment
->
getAdditionalInformation
();
return
$this
->
adyenRequestsHelper
->
buildVaultData
([],
$additionalInformation
);
$request
[
'body'
]
=
$this
->
adyenRequestsHelper
->
buildVaultData
([],
$additionalInformation
);
return
$request
;
}
}
}
}
Gateway/Validator/CheckoutResponseValidator.php
View file @
3c5450eb
...
@@ -66,10 +66,19 @@ class CheckoutResponseValidator extends AbstractValidator
...
@@ -66,10 +66,19 @@ class CheckoutResponseValidator extends AbstractValidator
$payment
->
setAdditionalInformation
(
'3dActive'
,
false
);
$payment
->
setAdditionalInformation
(
'3dActive'
,
false
);
$isValid
=
true
;
$isValid
=
true
;
$errorMessages
=
[];
$errorMessages
=
[];
// validate result
// validate result
if
(
isset
(
$response
[
'resultCode'
]))
{
if
(
isset
(
$response
[
'resultCode'
]))
{
switch
(
$response
[
'resultCode'
])
{
switch
(
$response
[
'resultCode'
])
{
case
"IdentifyShopper"
:
$payment
->
setAdditionalInformation
(
'threeDSType'
,
$response
[
'resultCode'
]);
$payment
->
setAdditionalInformation
(
'threeDS2Token'
,
$response
[
'authentication'
][
'threeds2.fingerprintToken'
]);
$payment
->
setAdditionalInformation
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
break
;
case
"ChallengeShopper"
:
$payment
->
setAdditionalInformation
(
'threeDSType'
,
$response
[
'resultCode'
]);
$payment
->
setAdditionalInformation
(
'threeDS2Token'
,
$response
[
'authentication'
][
'threeds2.challengeToken'
]);
$payment
->
setAdditionalInformation
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
break
;
case
"Authorised"
:
case
"Authorised"
:
case
"Received"
:
case
"Received"
:
// For banktransfers store all bankTransfer details
// For banktransfers store all bankTransfer details
...
@@ -93,10 +102,6 @@ class CheckoutResponseValidator extends AbstractValidator
...
@@ -93,10 +102,6 @@ class CheckoutResponseValidator extends AbstractValidator
$payment
->
setAdditionalInformation
(
'cc_type'
,
$ccType
);
$payment
->
setAdditionalInformation
(
'cc_type'
,
$ccType
);
$payment
->
setCcType
(
$ccType
);
$payment
->
setCcType
(
$ccType
);
}
}
$payment
->
setAdditionalInformation
(
'pspReference'
,
$response
[
'pspReference'
]);
break
;
case
"Received"
:
$payment
->
setAdditionalInformation
(
'pspReference'
,
$response
[
'pspReference'
]);
$payment
->
setAdditionalInformation
(
'pspReference'
,
$response
[
'pspReference'
]);
break
;
break
;
case
"PresentToShopper"
:
case
"PresentToShopper"
:
...
@@ -129,6 +134,8 @@ class CheckoutResponseValidator extends AbstractValidator
...
@@ -129,6 +134,8 @@ class CheckoutResponseValidator extends AbstractValidator
break
;
break
;
case
"RedirectShopper"
:
case
"RedirectShopper"
:
$payment
->
setAdditionalInformation
(
'threeDSType'
,
$response
[
'resultCode'
]);
$redirectUrl
=
null
;
$redirectUrl
=
null
;
$paymentData
=
null
;
$paymentData
=
null
;
...
...
Gateway/Validator/ThreeDS2ResponseValidator.php
View file @
3c5450eb
...
@@ -61,13 +61,13 @@ class ThreeDS2ResponseValidator extends AbstractValidator
...
@@ -61,13 +61,13 @@ class ThreeDS2ResponseValidator extends AbstractValidator
if
(
$response
[
'resultCode'
]
==
"IdentifyShopper"
&&
if
(
$response
[
'resultCode'
]
==
"IdentifyShopper"
&&
!
empty
(
$response
[
'authentication'
][
'threeds2.fingerprintToken'
])
!
empty
(
$response
[
'authentication'
][
'threeds2.fingerprintToken'
])
)
{
)
{
$payment
->
setAdditionalInformation
(
'threeDS
2
Type'
,
$response
[
'resultCode'
]);
$payment
->
setAdditionalInformation
(
'threeDSType'
,
$response
[
'resultCode'
]);
$payment
->
setAdditionalInformation
(
'threeDS2Token'
,
$response
[
'authentication'
][
'threeds2.fingerprintToken'
]);
$payment
->
setAdditionalInformation
(
'threeDS2Token'
,
$response
[
'authentication'
][
'threeds2.fingerprintToken'
]);
$payment
->
setAdditionalInformation
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
$payment
->
setAdditionalInformation
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
}
elseif
(
$response
[
'resultCode'
]
==
"ChallengeShopper"
&&
}
elseif
(
$response
[
'resultCode'
]
==
"ChallengeShopper"
&&
!
empty
(
$response
[
'authentication'
][
'threeds2.challengeToken'
])
!
empty
(
$response
[
'authentication'
][
'threeds2.challengeToken'
])
)
{
)
{
$payment
->
setAdditionalInformation
(
'threeDS
2
Type'
,
$response
[
'resultCode'
]);
$payment
->
setAdditionalInformation
(
'threeDSType'
,
$response
[
'resultCode'
]);
$payment
->
setAdditionalInformation
(
'threeDS2Token'
,
$response
[
'authentication'
][
'threeds2.challengeToken'
]);
$payment
->
setAdditionalInformation
(
'threeDS2Token'
,
$response
[
'authentication'
][
'threeds2.challengeToken'
]);
$payment
->
setAdditionalInformation
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
$payment
->
setAdditionalInformation
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
}
else
{
}
else
{
...
...
Helper/Data.php
View file @
3c5450eb
...
@@ -33,8 +33,8 @@ class Data extends AbstractHelper
...
@@ -33,8 +33,8 @@ class Data extends AbstractHelper
const
MODULE_NAME
=
'adyen-magento2'
;
const
MODULE_NAME
=
'adyen-magento2'
;
const
TEST
=
'test'
;
const
TEST
=
'test'
;
const
LIVE
=
'live'
;
const
LIVE
=
'live'
;
const
CHECKOUT_COMPONENT_JS_LIVE
=
'https://checkoutshopper-live.adyen.com/checkoutshopper/sdk/3.
0
.0/adyen.js'
;
const
CHECKOUT_COMPONENT_JS_LIVE
=
'https://checkoutshopper-live.adyen.com/checkoutshopper/sdk/3.
2
.0/adyen.js'
;
const
CHECKOUT_COMPONENT_JS_TEST
=
'https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/3.
0
.0/adyen.js'
;
const
CHECKOUT_COMPONENT_JS_TEST
=
'https://checkoutshopper-test.adyen.com/checkoutshopper/sdk/3.
2
.0/adyen.js'
;
/**
/**
* @var \Magento\Framework\Encryption\EncryptorInterface
* @var \Magento\Framework\Encryption\EncryptorInterface
...
@@ -1834,12 +1834,13 @@ class Data extends AbstractHelper
...
@@ -1834,12 +1834,13 @@ class Data extends AbstractHelper
{
{
$response
=
[
'threeDS2'
=>
false
];
$response
=
[
'threeDS2'
=>
false
];
if
(
!
empty
(
$type
))
{
$response
[
'type'
]
=
$type
;
}
if
(
$type
&&
$token
)
{
if
(
$type
&&
$token
)
{
$response
=
[
$response
[
'threeDS2'
]
=
true
;
"threeDS2"
=>
true
,
$response
[
'token'
]
=
$token
;
"type"
=>
$type
,
"token"
=>
$token
];
}
}
return
json_encode
(
$response
);
return
json_encode
(
$response
);
...
...
Helper/Requests.php
View file @
3c5450eb
...
@@ -72,10 +72,10 @@ class Requests extends AbstractHelper
...
@@ -72,10 +72,10 @@ class Requests extends AbstractHelper
* @param $billingAddress
* @param $billingAddress
* @param $storeId
* @param $storeId
* @param null $payment
* @param null $payment
* @param null $
payload
* @param null $
additionalData
* @return array
* @return array
*/
*/
public
function
buildCustomerData
(
$request
=
[],
$customerId
=
0
,
$billingAddress
,
$storeId
,
$payment
=
null
,
$
payload
=
null
)
public
function
buildCustomerData
(
$request
=
[],
$customerId
=
0
,
$billingAddress
,
$storeId
,
$payment
=
null
,
$
additionalData
=
null
)
{
{
if
(
$customerId
>
0
)
{
if
(
$customerId
>
0
)
{
$request
[
'shopperReference'
]
=
$customerId
;
$request
[
'shopperReference'
]
=
$customerId
;
...
@@ -87,13 +87,13 @@ class Requests extends AbstractHelper
...
@@ -87,13 +87,13 @@ class Requests extends AbstractHelper
}
}
// In case of virtual product and guest checkout there is a workaround to get the guest's email address
// In case of virtual product and guest checkout there is a workaround to get the guest's email address
if
(
!
empty
(
$
payload
[
'additional_data'
]
[
'guestEmail'
]))
{
if
(
!
empty
(
$
additionalData
[
'guestEmail'
]))
{
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
$paymentMethod
)
&&
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
$paymentMethod
)
&&
!
$this
->
adyenHelper
->
isPaymentMethodAfterpayTouchMethod
(
$paymentMethod
)
!
$this
->
adyenHelper
->
isPaymentMethodAfterpayTouchMethod
(
$paymentMethod
)
)
{
)
{
$request
[
'paymentMethod'
][
'personalDetails'
][
'shopperEmail'
]
=
$
payload
[
'additional_data'
]
[
'guestEmail'
];
$request
[
'paymentMethod'
][
'personalDetails'
][
'shopperEmail'
]
=
$
additionalData
[
'guestEmail'
];
}
else
{
}
else
{
$request
[
'shopperEmail'
]
=
$
payload
[
'additional_data'
]
[
'guestEmail'
];
$request
[
'shopperEmail'
]
=
$
additionalData
[
'guestEmail'
];
}
}
}
}
...
@@ -262,20 +262,20 @@ class Requests extends AbstractHelper
...
@@ -262,20 +262,20 @@ class Requests extends AbstractHelper
}
}
/**
/**
* @param $request
* @param
array
$request
* @param $amount
* @param $amount
* @param $currencyCode
* @param $currencyCode
* @param $reference
* @param $reference
* @return mixed
* @param $paymentMethod
* @return array
*/
*/
public
function
buildPaymentData
(
$request
=
[],
$amount
,
$currencyCode
,
$reference
)
public
function
buildPaymentData
(
$request
=
[],
$amount
,
$currencyCode
,
$reference
,
$paymentMethod
)
{
{
$request
[
'amount'
]
=
[
$request
[
'amount'
]
=
[
'currency'
=>
$currencyCode
,
'currency'
=>
$currencyCode
,
'value'
=>
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currencyCode
)
'value'
=>
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currencyCode
)
];
];
$request
[
"reference"
]
=
$reference
;
$request
[
"reference"
]
=
$reference
;
$request
[
"fraudOffset"
]
=
"0"
;
$request
[
"fraudOffset"
]
=
"0"
;
...
@@ -302,23 +302,22 @@ class Requests extends AbstractHelper
...
@@ -302,23 +302,22 @@ class Requests extends AbstractHelper
* @param $store
* @param $store
* @return array
* @return array
*/
*/
public
function
buildThreeDS2Data
(
$request
=
[],
$
payload
,
$store
)
public
function
buildThreeDS2Data
(
$request
=
[],
$
additionalData
)
{
{
$request
[
'additionalData'
][
'allow3DS2'
]
=
true
;
$request
[
'additionalData'
][
'allow3DS2'
]
=
true
;
$request
[
'origin'
]
=
$this
->
adyenHelper
->
getOrigin
();
$request
[
'origin'
]
=
$this
->
adyenHelper
->
getOrigin
();
$request
[
'channel'
]
=
'web'
;
$request
[
'channel'
]
=
'web'
;
$request
[
'browserInfo'
][
'screenWidth'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
SCREEN_WIDTH
];
$request
[
'browserInfo'
][
'screenWidth'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
SCREEN_WIDTH
];
$request
[
'browserInfo'
][
'screenHeight'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
SCREEN_HEIGHT
];
$request
[
'browserInfo'
][
'screenHeight'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
SCREEN_HEIGHT
];
$request
[
'browserInfo'
][
'colorDepth'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
SCREEN_COLOR_DEPTH
];
$request
[
'browserInfo'
][
'colorDepth'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
SCREEN_COLOR_DEPTH
];
$request
[
'browserInfo'
][
'timeZoneOffset'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
TIMEZONE_OFFSET
];
$request
[
'browserInfo'
][
'timeZoneOffset'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
TIMEZONE_OFFSET
];
$request
[
'browserInfo'
][
'language'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
LANGUAGE
];
$request
[
'browserInfo'
][
'language'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
LANGUAGE
];
if
(
$javaEnabled
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
JAVA_ENABLED
])
{
if
(
$javaEnabled
=
$
additionalData
[
AdyenCcDataAssignObserver
::
JAVA_ENABLED
])
{
$request
[
'browserInfo'
][
'javaEnabled'
]
=
$javaEnabled
;
$request
[
'browserInfo'
][
'javaEnabled'
]
=
$javaEnabled
;
}
else
{
}
else
{
$request
[
'browserInfo'
][
'javaEnabled'
]
=
false
;
$request
[
'browserInfo'
][
'javaEnabled'
]
=
false
;
}
}
return
$request
;
return
$request
;
}
}
...
@@ -328,7 +327,7 @@ class Requests extends AbstractHelper
...
@@ -328,7 +327,7 @@ class Requests extends AbstractHelper
* @param $storeId
* @param $storeId
* @param $payment
* @param $payment
*/
*/
public
function
buildRecurringData
(
$request
=
[],
$areaCode
,
int
$storeId
,
$
payload
)
public
function
buildRecurringData
(
$request
=
[],
$areaCode
,
int
$storeId
,
$
additionalData
)
{
{
// If the vault feature is on this logic is handled in the VaultDataBuilder
// If the vault feature is on this logic is handled in the VaultDataBuilder
if
(
!
$this
->
adyenHelper
->
isCreditCardVaultEnabled
())
{
if
(
!
$this
->
adyenHelper
->
isCreditCardVaultEnabled
())
{
...
@@ -352,7 +351,8 @@ class Requests extends AbstractHelper
...
@@ -352,7 +351,8 @@ class Requests extends AbstractHelper
$request
[
'enableRecurring'
]
=
false
;
$request
[
'enableRecurring'
]
=
false
;
}
}
if
(
!
empty
(
$payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
][
AdyenCcDataAssignObserver
::
STORE_CC
])
&&
$payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
][
AdyenCcDataAssignObserver
::
STORE_CC
]
===
true
)
{
// value can be 0,1 or true
if
(
!
empty
(
$additionalData
[
AdyenCcDataAssignObserver
::
STORE_CC
]))
{
$request
[
'paymentMethod'
][
'storeDetails'
]
=
true
;
$request
[
'paymentMethod'
][
'storeDetails'
]
=
true
;
}
}
}
}
...
@@ -363,7 +363,7 @@ class Requests extends AbstractHelper
...
@@ -363,7 +363,7 @@ class Requests extends AbstractHelper
/**
/**
* @param $request
* @param $request
* @param $payment
* @param $payment
* @param $storeId
* @param $storeId
buildCCData
* @return mixed
* @return mixed
*/
*/
public
function
buildCCData
(
$request
=
[],
$payload
,
$storeId
,
$areaCode
)
public
function
buildCCData
(
$request
=
[],
$payload
,
$storeId
,
$areaCode
)
...
@@ -409,6 +409,15 @@ class Requests extends AbstractHelper
...
@@ -409,6 +409,15 @@ class Requests extends AbstractHelper
$request
[
'paymentMethod'
][
'recurringDetailReference'
]
=
$recurringDetailReference
;
$request
[
'paymentMethod'
][
'recurringDetailReference'
]
=
$recurringDetailReference
;
}
}
// set customerInteraction
$recurringContractType
=
$this
->
adyenHelper
->
getAdyenOneclickConfigData
(
'recurring_payment_type'
);
if
(
!
empty
(
$payload
[
'method'
])
&&
$payload
[
'method'
]
==
'adyen_oneclick'
&&
$recurringContractType
==
\Adyen\Payment\Model\RecurringType
::
RECURRING
)
{
$request
[
'shopperInteraction'
]
=
"ContAuth"
;
}
else
{
$request
[
'shopperInteraction'
]
=
"Ecommerce"
;
}
/**
/**
* if MOTO for backend is enabled use MOTO as shopper interaction type
* if MOTO for backend is enabled use MOTO as shopper interaction type
*/
*/
...
@@ -439,7 +448,9 @@ class Requests extends AbstractHelper
...
@@ -439,7 +448,9 @@ class Requests extends AbstractHelper
{
{
if
(
$this
->
adyenHelper
->
isCreditCardVaultEnabled
())
{
if
(
$this
->
adyenHelper
->
isCreditCardVaultEnabled
())
{
if
(
!
empty
(
$payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
][
VaultConfigProvider
::
IS_ACTIVE_CODE
])
&&
if
(
!
empty
(
$payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
][
VaultConfigProvider
::
IS_ACTIVE_CODE
])
&&
$payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
][
VaultConfigProvider
::
IS_ACTIVE_CODE
]
===
true
$payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
][
VaultConfigProvider
::
IS_ACTIVE_CODE
]
===
true
||
!
empty
(
$payload
[
VaultConfigProvider
::
IS_ACTIVE_CODE
])
&&
$payload
[
VaultConfigProvider
::
IS_ACTIVE_CODE
]
===
true
)
{
)
{
// store it only as oneclick otherwise we store oneclick tokens (maestro+bcmc) that will fail
// store it only as oneclick otherwise we store oneclick tokens (maestro+bcmc) that will fail
$request
[
'enableRecurring'
]
=
true
;
$request
[
'enableRecurring'
]
=
true
;
...
@@ -471,4 +482,21 @@ class Requests extends AbstractHelper
...
@@ -471,4 +482,21 @@ class Requests extends AbstractHelper
return
$address
;
return
$address
;
}
}
/**
* Only adds idempotency key if payment method is adyen_hpp for now
*
* @param array $request
* @param $paymentMethod
* @param $idempotencyKey
* @return array
*/
public
function
addIdempotencyKey
(
$request
=
[],
$paymentMethod
,
$idempotencyKey
)
{
if
(
!
empty
(
$paymentMethod
)
&&
$paymentMethod
==
'adyen_hpp'
)
{
$request
[
'idempotencyKey'
]
=
$idempotencyKey
;
}
return
$request
;
}
}
}
Model/AdyenPaymentProcess.php
deleted
100644 → 0
View file @
187e3f09
<?php
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2019 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/
namespace
Adyen\Payment\Model
;
use
\Adyen\Payment\Api\AdyenPaymentProcessInterface
;
class
AdyenPaymentProcess
implements
AdyenPaymentProcessInterface
{
/**
* @var \Magento\Checkout\Model\Session
*/
private
$checkoutSession
;
/**
* @var \Adyen\Payment\Helper\Data
*/
private
$adyenHelper
;
/**
* @var \Adyen\Payment\Helper\Requests
*/
private
$adyenRequestHelper
;
/**
* @var \Magento\Framework\Model\Context
*/
private
$context
;
/**
* @var \Adyen\Payment\Gateway\Http\TransferFactory
*/
private
$transferFactory
;
/**
* @var \Adyen\Payment\Gateway\Http\Client\TransactionPayment
*/
private
$transactionPayment
;
/**
* @var \Adyen\Payment\Gateway\Validator\CheckoutResponseValidator
*/
private
$checkoutResponseValidator
;
/**
* @var \Adyen\Payment\Gateway\Validator\ThreeDS2ResponseValidator
*/
private
$threeDS2ResponseValidator
;
/**
* AdyenPaymentProcess constructor.
*
* @param \Magento\Framework\Model\Context $context
* @param \Magento\Checkout\Model\Session $checkoutSession
* @param \Adyen\Payment\Helper\Data $adyenHelper
* @param \Adyen\Payment\Helper\Requests $adyenRequestHelper
* @param \Adyen\Payment\Gateway\Http\TransferFactory $transferFactory
* @param \Adyen\Payment\Gateway\Http\Client\TransactionPayment $transactionPayment
* @param \Adyen\Payment\Gateway\Validator\CheckoutResponseValidator $checkoutResponseValidator
* @param \Adyen\Payment\Gateway\Validator\ThreeDS2ResponseValidator $threeDS2ResponseValidator
*/
public
function
__construct
(
\Magento\Framework\Model\Context
$context
,
\Magento\Checkout\Model\Session
$checkoutSession
,
\Adyen\Payment\Helper\Data
$adyenHelper
,
\Adyen\Payment\Helper\Requests
$adyenRequestHelper
,
\Adyen\Payment\Gateway\Http\TransferFactory
$transferFactory
,
\Adyen\Payment\Gateway\Http\Client\TransactionPayment
$transactionPayment
,
\Adyen\Payment\Gateway\Validator\CheckoutResponseValidator
$checkoutResponseValidator
,
\Adyen\Payment\Gateway\Validator\ThreeDS2ResponseValidator
$threeDS2ResponseValidator
)
{
$this
->
context
=
$context
;
$this
->
checkoutSession
=
$checkoutSession
;
$this
->
adyenHelper
=
$adyenHelper
;
$this
->
adyenRequestHelper
=
$adyenRequestHelper
;
$this
->
transferFactory
=
$transferFactory
;
$this
->
transactionPayment
=
$transactionPayment
;
$this
->
checkoutResponseValidator
=
$checkoutResponseValidator
;
$this
->
threeDS2ResponseValidator
=
$threeDS2ResponseValidator
;
}
/**
* @api
* @param string $payload
* @return string
* @throws \Magento\Framework\Exception\LocalizedException
*/
public
function
initiate
(
$payload
)
{
// Decode payload from frontend
$payload
=
json_decode
(
$payload
,
true
);
// Validate JSON that has just been parsed if it was in a valid format
if
(
json_last_error
()
!==
JSON_ERROR_NONE
)
{
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
'Error with payment method please select different payment method.'
));
}
// Get payment and cart information from session
$quote
=
$this
->
checkoutSession
->
getQuote
();
$payment
=
$quote
->
getPayment
();
// Init request array
$request
=
[];
// Merchant account data builder
$paymentMethod
=
$payment
->
getMethod
();
$storeId
=
$quote
->
getStoreId
();
$request
=
$this
->
adyenRequestHelper
->
buildMerchantAccountData
(
$request
,
$paymentMethod
,
$storeId
);
// Customer data builder
$customerId
=
$quote
->
getCustomerId
();
$billingAddress
=
$quote
->
getBillingAddress
();
$request
=
$this
->
adyenRequestHelper
->
buildCustomerData
(
$request
,
$customerId
,
$billingAddress
,
$storeId
,
null
,
$payload
);
// Customer Ip data builder
$shopperIp
=
$quote
->
getXForwardedFor
();
$request
=
$this
->
adyenRequestHelper
->
buildCustomerIpData
(
$request
,
$shopperIp
);
// AddressDataBuilder
$shippingAddress
=
$quote
->
getShippingAddress
();
$request
=
$this
->
adyenRequestHelper
->
buildAddressData
(
$request
,
$billingAddress
,
$shippingAddress
);
// PaymentDataBuilder
$currencyCode
=
$quote
->
getQuoteCurrencyCode
();
$amount
=
$quote
->
getGrandTotal
();
// Setting the orderid to null, so that we generate a new one for each /payments call
$quote
->
setReservedOrderId
(
null
);
$reference
=
$quote
->
reserveOrderId
()
->
getReservedOrderId
();
$request
=
$this
->
adyenRequestHelper
->
buildPaymentData
(
$request
,
$amount
,
$currencyCode
,
$reference
);
// Browser data builder
$request
=
$this
->
adyenRequestHelper
->
buildBrowserData
(
$request
);
// 3DS2.0 data builder
$isThreeDS2Enabled
=
$this
->
adyenHelper
->
isCreditCardThreeDS2Enabled
(
$storeId
);
if
(
$isThreeDS2Enabled
)
{
$request
=
$this
->
adyenRequestHelper
->
buildThreeDS2Data
(
$request
,
$payload
,
$quote
->
getStore
());
}
// RecurringDataBuilder
$areaCode
=
$this
->
context
->
getAppState
()
->
getAreaCode
();
$request
=
$this
->
adyenRequestHelper
->
buildRecurringData
(
$request
,
$areaCode
,
$storeId
,
$payload
);
// CcAuthorizationDataBuilder
$request
=
$this
->
adyenRequestHelper
->
buildCCData
(
$request
,
$payload
,
$storeId
,
$areaCode
);
// Vault data builder
$request
=
$this
->
adyenRequestHelper
->
buildVaultData
(
$request
,
$payload
);
// Create and send request
$transferObject
=
$this
->
transferFactory
->
create
(
$request
);
$paymentsResponse
=
$this
->
transactionPayment
->
placeRequest
(
$transferObject
);
// Check if 3DS2.0 validation is needed or not
// In case 3DS2.0 validation is necessary send the type and token back to the frontend
if
(
!
empty
(
$paymentsResponse
[
'resultCode'
]))
{
if
(
$paymentsResponse
[
'resultCode'
]
==
'IdentifyShopper'
||
$paymentsResponse
[
'resultCode'
]
==
'ChallengeShopper'
)
{
if
(
$this
->
threeDS2ResponseValidator
->
validate
(
array
(
"response"
=>
$paymentsResponse
,
"payment"
=>
$payment
))
->
isValid
())
{
$quote
->
save
();
return
$this
->
adyenHelper
->
buildThreeDS2ProcessResponseJson
(
$payment
->
getAdditionalInformation
(
'threeDS2Type'
),
$payment
->
getAdditionalInformation
(
'threeDS2Token'
));
}
}
}
else
{
$errorMsg
=
__
(
'Error with payment method please select different payment method.'
);
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
$errorMsg
));
}
// Save the payments response because we are going to need it during the place order flow
$payment
->
setAdditionalInformation
(
"paymentsResponse"
,
$paymentsResponse
);
// To actually save the additional info changes into the quote
$quote
->
save
();
// Original flow can continue, return to frontend and place the order
return
$this
->
adyenHelper
->
buildThreeDS2ProcessResponseJson
();
}
}
Model/AdyenRequestMerchantSession.php
View file @
3c5450eb
...
@@ -81,7 +81,7 @@ class AdyenRequestMerchantSession implements AdyenRequestMerchantSessionInterfac
...
@@ -81,7 +81,7 @@ class AdyenRequestMerchantSession implements AdyenRequestMerchantSessionInterfac
"displayName":"'
.
$displayName
.
'"
"displayName":"'
.
$displayName
.
'"
}'
;
}'
;
$this
->
_adyenLogger
->
addAdyenDebug
(
"JSON Reques
s
t is: "
.
print_r
(
$data
,
true
));
$this
->
_adyenLogger
->
addAdyenDebug
(
"JSON Request is: "
.
print_r
(
$data
,
true
));
curl_setopt
(
$ch
,
CURLOPT_URL
,
$validationUrl
);
curl_setopt
(
$ch
,
CURLOPT_URL
,
$validationUrl
);
...
...
Model/AdyenThreeDS2Process.php
View file @
3c5450eb
...
@@ -37,6 +37,22 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
...
@@ -37,6 +37,22 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
*/
*/
private
$adyenHelper
;
private
$adyenHelper
;
/**
* @var \Magento\Sales\Model\OrderFactory
*/
private
$orderFactory
;
/**
* @var
*/
private
$order
;
/**
* @var \Adyen\Payment\Logger\AdyenLogger
*/
private
$adyenLogger
;
/**
/**
* AdyenThreeDS2Process constructor.
* AdyenThreeDS2Process constructor.
*
*
...
@@ -45,11 +61,15 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
...
@@ -45,11 +61,15 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
*/
*/
public
function
__construct
(
public
function
__construct
(
\Magento\Checkout\Model\Session
$checkoutSession
,
\Magento\Checkout\Model\Session
$checkoutSession
,
\Adyen\Payment\Helper\Data
$adyenHelper
\Adyen\Payment\Helper\Data
$adyenHelper
,
\Magento\Sales\Model\OrderFactory
$orderFactory
,
\Adyen\Payment\Logger\AdyenLogger
$adyenLogger
)
)
{
{
$this
->
checkoutSession
=
$checkoutSession
;
$this
->
checkoutSession
=
$checkoutSession
;
$this
->
adyenHelper
=
$adyenHelper
;
$this
->
adyenHelper
=
$adyenHelper
;
$this
->
orderFactory
=
$orderFactory
;
$this
->
adyenLogger
=
$adyenLogger
;
}
}
/**
/**
...
@@ -68,8 +88,8 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
...
@@ -68,8 +88,8 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
}
}
// Get payment and cart information from session
// Get payment and cart information from session
$
quote
=
$this
->
checkoutSession
->
getQuote
();
$
order
=
$this
->
getOrder
();
$payment
=
$
quote
->
getPayment
();
$payment
=
$
order
->
getPayment
();
// Init payments/details request
// Init payments/details request
$result
=
[];
$result
=
[];
...
@@ -83,6 +103,7 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
...
@@ -83,6 +103,7 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
// unset payment data from additional information
// unset payment data from additional information
$payment
->
unsAdditionalInformation
(
"threeDS2PaymentData"
);
$payment
->
unsAdditionalInformation
(
"threeDS2PaymentData"
);
}
else
{
}
else
{
$this
->
adyenLogger
->
error
(
"3D secure 2.0 failed, payment data not found"
);
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
'3D secure 2.0 failed, payment data not found'
));
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
'3D secure 2.0 failed, payment data not found'
));
}
}
...
@@ -95,11 +116,12 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
...
@@ -95,11 +116,12 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
// Send the request
// Send the request
try
{
try
{
$client
=
$this
->
adyenHelper
->
initializeAdyenClient
(
$
quote
->
getStoreId
());
$client
=
$this
->
adyenHelper
->
initializeAdyenClient
(
$
order
->
getStoreId
());
$service
=
$this
->
adyenHelper
->
createAdyenCheckoutService
(
$client
);
$service
=
$this
->
adyenHelper
->
createAdyenCheckoutService
(
$client
);
$result
=
$service
->
paymentsDetails
(
$request
);
$result
=
$service
->
paymentsDetails
(
$request
);
}
catch
(
\Adyen\AdyenException
$e
)
{
}
catch
(
\Adyen\AdyenException
$e
)
{
$this
->
adyenLogger
->
error
(
"3D secure 2.0 failed"
.
$e
->
getMessage
());
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
'3D secure 2.0 failed'
));
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
'3D secure 2.0 failed'
));
}
}
...
@@ -111,19 +133,43 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
...
@@ -111,19 +133,43 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
return
$this
->
adyenHelper
->
buildThreeDS2ProcessResponseJson
(
$result
[
'resultCode'
],
$result
[
'authentication'
][
'threeds2.challengeToken'
]);
return
$this
->
adyenHelper
->
buildThreeDS2ProcessResponseJson
(
$result
[
'resultCode'
],
$result
[
'authentication'
][
'threeds2.challengeToken'
]);
}
}
// Payment can get back to the original flow
// Save the payments response because we are going to need it during the place order flow
// Save the payments response because we are going to need it during the place order flow
$payment
->
setAdditionalInformation
(
"paymentsResponse"
,
$result
);
$payment
->
setAdditionalInformation
(
"paymentsResponse"
,
$result
);
// Setting the placeOrder to true enables the process to skip the payments call because the paymentsResponse
// is already in place - only set placeOrder to true when you have the paymentsResponse
$payment
->
setAdditionalInformation
(
'placeOrder'
,
true
);
// To actually save the additional info changes into the quote
// To actually save the additional info changes into the quote
$quote
->
save
();
$order
->
save
();
// 3DS2 flow is done, original place order flow can continue from frontend
$response
=
[];
return
$this
->
adyenHelper
->
buildThreeDS2ProcessResponseJson
();
if
(
$result
[
'resultCode'
]
!=
'Authorised'
)
{
$this
->
checkoutSession
->
restoreQuote
();
// Always cancel the order if the paymenth has failed
if
(
!
$order
->
canCancel
())
{
$order
->
setState
(
\Magento\Sales\Model\Order
::
STATE_NEW
);
}
$order
->
cancel
()
->
save
();
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
'The payment is REFUSED.'
));
}
$response
[
'result'
]
=
$result
[
'resultCode'
];
return
json_encode
(
$response
);
}
/**
* Get order object
*
* @return \Magento\Sales\Model\Order
*/
protected
function
getOrder
()
{
if
(
!
$this
->
order
)
{
$incrementId
=
$this
->
checkoutSession
->
getLastRealOrderId
();
$this
->
order
=
$this
->
orderFactory
->
create
()
->
loadByIncrementId
(
$incrementId
);
}
return
$this
->
order
;
}
}
}
}
Model/Notification.php
View file @
3c5450eb
...
@@ -197,7 +197,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
...
@@ -197,7 +197,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
*
*
* @return int|null Success.
* @return int|null Success.
*/
*/
public
function
getSucess
()
public
function
getSuc
c
ess
()
{
{
return
$this
->
getData
(
self
::
SUCCESS
);
return
$this
->
getData
(
self
::
SUCCESS
);
}
}
...
@@ -259,9 +259,9 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
...
@@ -259,9 +259,9 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
/**
/**
* Gets the AmountValue for the notification.
* Gets the AmountValue for the notification.
*
*
* @return
int
|null AmountValue.
* @return
string
|null AmountValue.
*/
*/
public
function
getAmountCurency
()
public
function
getAmountCur
r
ency
()
{
{
return
$this
->
getData
(
self
::
AMOUNT_CURRENCY
);
return
$this
->
getData
(
self
::
AMOUNT_CURRENCY
);
}
}
...
@@ -280,7 +280,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
...
@@ -280,7 +280,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
/**
/**
* Gets the Reason for the notification.
* Gets the Reason for the notification.
*
*
* @return
int
|null Reason.
* @return
string
|null Reason.
*/
*/
public
function
getReason
()
public
function
getReason
()
{
{
...
...
Observer/AdyenCcDataAssignObserver.php
View file @
3c5450eb
...
@@ -46,6 +46,7 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
...
@@ -46,6 +46,7 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
const
SCREEN_HEIGHT
=
'screen_height'
;
const
SCREEN_HEIGHT
=
'screen_height'
;
const
TIMEZONE_OFFSET
=
'timezone_offset'
;
const
TIMEZONE_OFFSET
=
'timezone_offset'
;
const
LANGUAGE
=
'language'
;
const
LANGUAGE
=
'language'
;
const
GUEST_EMAIL
=
'guestEmail'
;
/**
/**
* @var array
* @var array
...
@@ -65,7 +66,8 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
...
@@ -65,7 +66,8 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
self
::
SCREEN_WIDTH
,
self
::
SCREEN_WIDTH
,
self
::
SCREEN_HEIGHT
,
self
::
SCREEN_HEIGHT
,
self
::
TIMEZONE_OFFSET
,
self
::
TIMEZONE_OFFSET
,
self
::
LANGUAGE
self
::
LANGUAGE
,
self
::
GUEST_EMAIL
];
];
/**
/**
...
@@ -89,7 +91,7 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
...
@@ -89,7 +91,7 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
}
}
foreach
(
$this
->
additionalInformationList
as
$additionalInformationKey
)
{
foreach
(
$this
->
additionalInformationList
as
$additionalInformationKey
)
{
if
(
!
empty
(
$additionalData
[
$additionalInformationKey
]))
{
if
(
isset
(
$additionalData
[
$additionalInformationKey
]))
{
$paymentInfo
->
setAdditionalInformation
(
$paymentInfo
->
setAdditionalInformation
(
$additionalInformationKey
,
$additionalInformationKey
,
$additionalData
[
$additionalInformationKey
]
$additionalData
[
$additionalInformationKey
]
...
...
Plugin/PaymentInformationManagement.php
0 → 100644
View file @
3c5450eb
<?php
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2019 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/
namespace
Adyen\Payment\Plugin
;
use
Adyen\Payment\Model\Ui\AdyenCcConfigProvider
;
use
Adyen\Payment\Model\Ui\AdyenOneclickConfigProvider
;
class
PaymentInformationManagement
{
/**
* @var \Magento\Sales\Api\OrderRepositoryInterface
*/
protected
$orderRepository
;
/**
* @var \Adyen\Payment\Logger\AdyenLogger
*/
protected
$adyenLogger
;
/**
* @var \Adyen\Payment\Helper\Data
*/
protected
$adyenHelper
;
/**
* PaymentInformationManagement constructor.
* @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
* @param \Adyen\Payment\Logger\AdyenLogger $adyenLogger
* @param \Adyen\Payment\Helper\Data $adyenHelper
*/
public
function
__construct
(
\Magento\Sales\Api\OrderRepositoryInterface
$orderRepository
,
\Adyen\Payment\Logger\AdyenLogger
$adyenLogger
,
\Adyen\Payment\Helper\Data
$adyenHelper
)
{
$this
->
orderRepository
=
$orderRepository
;
$this
->
adyenLogger
=
$adyenLogger
;
$this
->
adyenHelper
=
$adyenHelper
;
}
/**
* @param \Magento\Checkout\Api\PaymentInformationManagementInterface $subject
* @param $result
* @return string
* @throws \Magento\Framework\Exception\LocalizedException
*/
public
function
afterSavePaymentInformationAndPlaceOrder
(
\Magento\Checkout\Api\PaymentInformationManagementInterface
$subject
,
$result
)
{
try
{
$order
=
$this
->
orderRepository
->
get
(
$result
);
$payment
=
$order
->
getPayment
();
if
(
$payment
->
getMethod
()
===
AdyenCcConfigProvider
::
CODE
||
$payment
->
getMethod
()
===
AdyenOneclickConfigProvider
::
CODE
)
{
return
$this
->
adyenHelper
->
buildThreeDS2ProcessResponseJson
(
$payment
->
getAdditionalInformation
(
'threeDSType'
),
$payment
->
getAdditionalInformation
(
'threeDS2Token'
));
}
else
{
return
$result
;
}
}
catch
(
NoSuchEntityException
$e
)
{
$this
->
adyenLogger
->
error
(
"Exception: "
.
$e
->
getMessage
());
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
'This order no longer exists.'
));
}
return
$result
;
}
}
composer.json
View file @
3c5450eb
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
"name"
:
"adyen/module-payment"
,
"name"
:
"adyen/module-payment"
,
"description"
:
"Official Magento2 Plugin to connect to Payment Service Provider Adyen."
,
"description"
:
"Official Magento2 Plugin to connect to Payment Service Provider Adyen."
,
"type"
:
"magento2-module"
,
"type"
:
"magento2-module"
,
"version"
:
"
4.5.4
"
,
"version"
:
"
5.0.0
"
,
"license"
:
[
"license"
:
[
"OSL-3.0"
,
"OSL-3.0"
,
"AFL-3.0"
"AFL-3.0"
...
...
etc/adminhtml/di.xml
View file @
3c5450eb
...
@@ -10,7 +10,6 @@
...
@@ -10,7 +10,6 @@
<item
name=
"address"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\AddressDataBuilder
</item>
<item
name=
"address"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\AddressDataBuilder
</item>
<item
name=
"payment"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\PaymentDataBuilder
</item>
<item
name=
"payment"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\PaymentDataBuilder
</item>
<item
name=
"browserinfo"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\BrowserInfoDataBuilder
</item>
<item
name=
"browserinfo"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\BrowserInfoDataBuilder
</item>
<item
name=
"recurring"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\RecurringDataBuilder
</item>
<item
name=
"transaction"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CcBackendAuthorizationDataBuilder
</item>
<item
name=
"transaction"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CcBackendAuthorizationDataBuilder
</item>
<item
name=
"vault"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\VaultDataBuilder
</item>
<item
name=
"vault"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\VaultDataBuilder
</item>
</argument>
</argument>
...
...
etc/adminhtml/system/adyen_cc.xml
View file @
3c5450eb
...
@@ -70,14 +70,6 @@
...
@@ -70,14 +70,6 @@
sortOrder=
"150"
>
sortOrder=
"150"
>
<label>
Advanced Settings
</label>
<label>
Advanced Settings
</label>
<frontend_model>
Magento\Config\Block\System\Config\Form\Fieldset
</frontend_model>
<frontend_model>
Magento\Config\Block\System\Config\Form\Fieldset
</frontend_model>
<field
id=
"enable_moto"
translate=
"label"
type=
"select"
sortOrder=
"10"
showInDefault=
"1"
showInWebsite=
"1"
showInStore=
"1"
>
<label>
Enable MOTO
</label>
<tooltip>
<![CDATA[Important you have to activate MOTO for your account contact magento@adyen.com.]]>
</tooltip>
<source_model>
Magento\Config\Model\Config\Source\Yesno
</source_model>
<config_path>
payment/adyen_cc/enable_moto
</config_path>
</field>
<field
id=
"enable_installments"
translate=
"label"
type=
"select"
sortOrder=
"219"
showInDefault=
"1"
<field
id=
"enable_installments"
translate=
"label"
type=
"select"
sortOrder=
"219"
showInDefault=
"1"
showInWebsite=
"1"
showInStore=
"1"
>
showInWebsite=
"1"
showInStore=
"1"
>
<label>
Enable Installments
</label>
<label>
Enable Installments
</label>
...
...
etc/config.xml
View file @
3c5450eb
...
@@ -47,7 +47,6 @@
...
@@ -47,7 +47,6 @@
<sort_order>
2
</sort_order>
<sort_order>
2
</sort_order>
<cctypes>
AE,VI,MC,DI
</cctypes>
<cctypes>
AE,VI,MC,DI
</cctypes>
<useccv>
1
</useccv>
<useccv>
1
</useccv>
<enable_moto>
0
</enable_moto>
<payment_action>
authorize
</payment_action>
<payment_action>
authorize
</payment_action>
<is_gateway>
1
</is_gateway>
<is_gateway>
1
</is_gateway>
<can_use_checkout>
1
</can_use_checkout>
<can_use_checkout>
1
</can_use_checkout>
...
@@ -91,7 +90,6 @@
...
@@ -91,7 +90,6 @@
<recurring_payment_type>
ONECLICK
</recurring_payment_type>
<recurring_payment_type>
ONECLICK
</recurring_payment_type>
<payment_action>
authorize
</payment_action>
<payment_action>
authorize
</payment_action>
<useccv>
1
</useccv>
<useccv>
1
</useccv>
<enable_moto>
0
</enable_moto>
<is_gateway>
1
</is_gateway>
<is_gateway>
1
</is_gateway>
<can_use_checkout>
1
</can_use_checkout>
<can_use_checkout>
1
</can_use_checkout>
<can_authorize>
1
</can_authorize>
<can_authorize>
1
</can_authorize>
...
...
etc/di.xml
View file @
3c5450eb
...
@@ -550,12 +550,21 @@
...
@@ -550,12 +550,21 @@
<virtualType
name=
"AdyenPaymentCcAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<virtualType
name=
"AdyenPaymentCcAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<arguments>
<arguments>
<argument
name=
"builders"
xsi:type=
"array"
>
<argument
name=
"builders"
xsi:type=
"array"
>
<item
name=
"transaction"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CcAuthorizationDataBuilder
<item
name=
"merchantaccount"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\MerchantAccountDataBuilder
</item>
</item>
<item
name=
"customer"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CustomerDataBuilder
</item>
<item
name=
"customerip"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CustomerIpDataBuilder
</item>
<item
name=
"address"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\AddressDataBuilder
</item>
<item
name=
"payment"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\PaymentDataBuilder
</item>
<item
name=
"browserinfo"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\BrowserInfoDataBuilder
</item>
<item
name=
"recurring"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\RecurringDataBuilder
</item>
<item
name=
"transaction"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CcAuthorizationDataBuilder
</item>
<item
name=
"vault"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\VaultDataBuilder
</item>
<item
name=
"threeds2"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\ThreeDS2DataBuilder
</item>
</argument>
</argument>
</arguments>
</arguments>
</virtualType>
</virtualType>
<virtualType
name=
"AdyenPaymentCcVaultAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<virtualType
name=
"AdyenPaymentCcVaultAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<arguments>
<arguments>
<argument
name=
"builders"
xsi:type=
"array"
>
<argument
name=
"builders"
xsi:type=
"array"
>
...
@@ -589,7 +598,15 @@
...
@@ -589,7 +598,15 @@
<virtualType
name=
"AdyenPaymentOneclickAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<virtualType
name=
"AdyenPaymentOneclickAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<arguments>
<arguments>
<argument
name=
"builders"
xsi:type=
"array"
>
<argument
name=
"builders"
xsi:type=
"array"
>
<item
name=
"transaction"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CcAuthorizationDataBuilder
</item>
<item
name=
"merchantaccount"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\MerchantAccountDataBuilder
</item>
<item
name=
"customer"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CustomerDataBuilder
</item>
<item
name=
"customerip"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\CustomerIpDataBuilder
</item>
<item
name=
"address"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\AddressDataBuilder
</item>
<item
name=
"payment"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\PaymentDataBuilder
</item>
<item
name=
"browserinfo"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\BrowserInfoDataBuilder
</item>
<item
name=
"recurring"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\RecurringDataBuilder
</item>
<item
name=
"oneclick"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\OneclickAuthorizationDataBuilder
</item>
<item
name=
"threeds2"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\ThreeDS2DataBuilder
</item>
</argument>
</argument>
</arguments>
</arguments>
</virtualType>
</virtualType>
...
@@ -1005,8 +1022,6 @@
...
@@ -1005,8 +1022,6 @@
type=
"Adyen\Payment\Model\AdyenRequestMerchantSession"
/>
type=
"Adyen\Payment\Model\AdyenRequestMerchantSession"
/>
<preference
for=
"Adyen\Payment\Api\AdyenInitiateTerminalApiInterface"
<preference
for=
"Adyen\Payment\Api\AdyenInitiateTerminalApiInterface"
type=
"Adyen\Payment\Model\AdyenInitiateTerminalApi"
/>
type=
"Adyen\Payment\Model\AdyenInitiateTerminalApi"
/>
<preference
for=
"Adyen\Payment\Api\AdyenPaymentProcessInterface"
type=
"Adyen\Payment\Model\AdyenPaymentProcess"
/>
<preference
for=
"Adyen\Payment\Api\AdyenThreeDS2ProcessInterface"
<preference
for=
"Adyen\Payment\Api\AdyenThreeDS2ProcessInterface"
type=
"Adyen\Payment\Model\AdyenThreeDS2Process"
/>
type=
"Adyen\Payment\Model\AdyenThreeDS2Process"
/>
<preference
for=
"Adyen\Payment\Api\AdyenOriginKeyInterface"
<preference
for=
"Adyen\Payment\Api\AdyenOriginKeyInterface"
...
@@ -1014,4 +1029,7 @@
...
@@ -1014,4 +1029,7 @@
<type
name=
"Magento\Vault\Api\PaymentTokenRepositoryInterface"
>
<type
name=
"Magento\Vault\Api\PaymentTokenRepositoryInterface"
>
<plugin
name=
"AdyenPaymentVaultDeleteToken"
type=
"Adyen\Payment\Plugin\PaymentVaultDeleteToken"
sortOrder=
"10"
/>
<plugin
name=
"AdyenPaymentVaultDeleteToken"
type=
"Adyen\Payment\Plugin\PaymentVaultDeleteToken"
sortOrder=
"10"
/>
</type>
</type>
</config>
<type
name=
"Magento\Checkout\Api\PaymentInformationManagementInterface"
>
\ No newline at end of file
<plugin
name=
"AdyenPaymentInformationManagementAddPaymentInfo"
type=
"Adyen\Payment\Plugin\PaymentInformationManagement"
/>
</type>
</config>
etc/webapi.xml
View file @
3c5450eb
...
@@ -58,13 +58,6 @@
...
@@ -58,13 +58,6 @@
</resources>
</resources>
</route>
</route>
<route
url=
"/V1/adyen/payment"
method=
"POST"
>
<service
class=
"Adyen\Payment\Api\AdyenPaymentProcessInterface"
method=
"initiate"
/>
<resources>
<resource
ref=
"anonymous"
/>
</resources>
</route>
<route
url=
"/V1/adyen/threeDS2Process"
method=
"POST"
>
<route
url=
"/V1/adyen/threeDS2Process"
method=
"POST"
>
<service
class=
"Adyen\Payment\Api\AdyenThreeDS2ProcessInterface"
method=
"initiate"
/>
<service
class=
"Adyen\Payment\Api\AdyenThreeDS2ProcessInterface"
method=
"initiate"
/>
<resources>
<resources>
...
...
view/adminhtml/templates/form/cc.phtml
View file @
3c5450eb
...
@@ -61,6 +61,23 @@ echo $code; ?>" style="display:none">
...
@@ -61,6 +61,23 @@ echo $code; ?>" style="display:none">
echo
$code
;
?>
-expiryYear"
type=
"hidden"
name=
"payment[expiryYear]"
>
echo
$code
;
?>
-expiryYear"
type=
"hidden"
name=
"payment[expiryYear]"
>
<input
id=
"
<?php
/* @noEscape */
<input
id=
"
<?php
/* @noEscape */
echo
$code
;
?>
-cc_type"
type=
"hidden"
name=
"payment[cc_type]"
>
echo
$code
;
?>
-cc_type"
type=
"hidden"
name=
"payment[cc_type]"
>
<input
id=
"
<?php
/* @noEscape */
echo
$code
;
?>
-store_cc"
type=
"hidden"
name=
"payment[store_cc]"
>
<?php
if
(
$block
->
isVaultEnabled
())
:
?>
<div
class=
"field choice"
>
<input
type=
"checkbox"
id=
"
<?php
/* @noEscape */
echo
$code
;
?>
_vault"
name=
"payment[is_active_payment_token_enabler]"
class=
"checkbox"
/>
<label
class=
"label"
for=
"
<?php
/* @noEscape */
echo
$code
;
?>
_vault"
>
<span>
<?php
echo
$block
->
escapeHtml
(
'Save for later use.'
);
?>
</span>
</label>
</div>
<?php
endif
;
?>
<script>
<script>
require
(
require
(
...
@@ -93,7 +110,7 @@ echo $code; ?>" style="display:none">
...
@@ -93,7 +110,7 @@ echo $code; ?>" style="display:none">
/*
/*
* Initialize secure fields and set up the onChange callback to
* Initialize secure fields and set up the onChange callback to
* - fill the input fields with the encrypted data
* - fill the input fields with the encrypted data
* - show the he
k
lper text when necessary
* - show the helper text when necessary
*/
*/
var
secureFieldsInitialize
=
function
()
{
var
secureFieldsInitialize
=
function
()
{
...
@@ -117,7 +134,8 @@ echo $code; ?>" style="display:none">
...
@@ -117,7 +134,8 @@ echo $code; ?>" style="display:none">
type
:
'
card
'
,
type
:
'
card
'
,
groupTypes
:
ccTypes
,
groupTypes
:
ccTypes
,
hideCVC
:
hideCVC
,
hideCVC
:
hideCVC
,
enableStoreDetails
:
"
<?php
echo
$block
->
allowRecurring
()
&&
!
$block
->
isVaultEnabled
();
?>
"
,
onChange
:
function
(
state
)
{
onChange
:
function
(
state
)
{
// When the state is valid update the input fields
// When the state is valid update the input fields
if
(
state
.
isValid
)
{
if
(
state
.
isValid
)
{
...
@@ -126,6 +144,7 @@ echo $code; ?>" style="display:none">
...
@@ -126,6 +144,7 @@ echo $code; ?>" style="display:none">
jQuery
(
"
#
<?php
/* @noEscape */
echo
$code
;
?>
-expiryMonth
"
).
val
(
state
.
data
.
paymentMethod
.
encryptedExpiryMonth
);
jQuery
(
"
#
<?php
/* @noEscape */
echo
$code
;
?>
-expiryMonth
"
).
val
(
state
.
data
.
paymentMethod
.
encryptedExpiryMonth
);
jQuery
(
"
#
<?php
/* @noEscape */
echo
$code
;
?>
-expiryYear
"
).
val
(
state
.
data
.
paymentMethod
.
encryptedExpiryYear
);
jQuery
(
"
#
<?php
/* @noEscape */
echo
$code
;
?>
-expiryYear
"
).
val
(
state
.
data
.
paymentMethod
.
encryptedExpiryYear
);
jQuery
(
"
#
<?php
/* @noEscape */
echo
$code
;
?>
-cvc
"
).
val
(
state
.
data
.
paymentMethod
.
encryptedSecurityCode
);
jQuery
(
"
#
<?php
/* @noEscape */
echo
$code
;
?>
-cvc
"
).
val
(
state
.
data
.
paymentMethod
.
encryptedSecurityCode
);
jQuery
(
"
#
<?php
/* @noEscape */
echo
$code
;
?>
-store_cc
"
).
val
(
state
.
data
.
storePaymentMethod
);
}
}
},
},
onBrand
:
function
(
state
)
{
onBrand
:
function
(
state
)
{
...
...
view/adminhtml/web/css/order_create_styles.css
View file @
3c5450eb
...
@@ -66,31 +66,38 @@
...
@@ -66,31 +66,38 @@
display
:
inline-block
;
display
:
inline-block
;
font-weight
:
bold
;
font-weight
:
bold
;
}
}
/* Checkout component Adyen v3.
0
.0 styling start */
/* Checkout component Adyen v3.
2
.0 styling start */
.adyen-checkout__field
{
.adyen-checkout__field
{
display
:
block
;
display
:
block
;
margin-bottom
:
16px
margin-bottom
:
16px
;
}
width
:
100%
.adyen-checkout__field--error
input
{
border-color
:
#d10244
;
color
:
#d10244
}
}
.adyen-checkout__field
:last-
child
{
.adyen-checkout__field
:last-
of-type
{
margin-bottom
:
0
margin-bottom
:
0
}
}
.adyen-checkout__label
{
display
:
block
}
.adyen-checkout__helper-text
,
.adyen-checkout__label__text
{
.adyen-checkout__helper-text
,
.adyen-checkout__label__text
{
color
:
#00112c
;
color
:
#00112c
;
display
:
block
;
display
:
block
;
font-size
:
.81em
;
font-size
:
.81em
;
font-weight
:
400
;
font-weight
:
400
;
line-height
:
13px
;
line-height
:
13px
;
padding-bottom
:
8
px
padding-bottom
:
5
px
}
}
.adyen-checkout__helper-text
{
.adyen-checkout__helper-text
{
color
:
#687282
color
:
#687282
}
}
.adyen-checkout__label__text
{
.adyen-checkout__label__text
{
transition
:
color
.2s
ease-out
display
:
block
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
transition
:
color
.1s
ease-out
;
white-space
:
nowrap
}
.adyen-checkout__label__text--error
{
color
:
#d10244
}
}
.adyen-checkout__label--focused
.adyen-checkout__label__text
{
.adyen-checkout__label--focused
.adyen-checkout__label__text
{
color
:
#06f
color
:
#06f
...
@@ -115,9 +122,9 @@
...
@@ -115,9 +122,9 @@
margin-right
:
8px
margin-right
:
8px
}
}
.adyen-checkout__spinner
{
.adyen-checkout__spinner
{
-webkit-animation
:
rotateSpinner
2
s
infinite
linear
;
-webkit-animation
:
rotateSpinner
1.5
s
infinite
linear
;
animation
:
rotateSpinner
2
s
infinite
linear
;
animation
:
rotateSpinner
1.5
s
infinite
linear
;
border
:
2
px
solid
#06f
;
border
:
3
px
solid
#06f
;
border-radius
:
50%
;
border-radius
:
50%
;
border-top-color
:
transparent
;
border-top-color
:
transparent
;
height
:
43px
;
height
:
43px
;
...
@@ -128,6 +135,7 @@
...
@@ -128,6 +135,7 @@
width
:
43px
width
:
43px
}
}
.adyen-checkout__spinner--small
{
.adyen-checkout__spinner--small
{
border-width
:
2px
;
height
:
16px
;
height
:
16px
;
width
:
16px
width
:
16px
}
}
...
@@ -169,15 +177,20 @@
...
@@ -169,15 +177,20 @@
position
:
absolute
position
:
absolute
}
}
.adyen-checkout__radio_group__label
{
.adyen-checkout__radio_group__label
{
color
:
inherit
;
display
:
block
;
display
:
block
;
font-size
:
.81em
;
font-size
:
.81em
;
font-weight
:
400
;
font-weight
:
400
;
line-height
:
16px
;
line-height
:
16px
;
margin-bottom
:
8px
;
margin-bottom
:
8px
;
overflow
:
visible
;
padding-bottom
:
0
;
padding-bottom
:
0
;
padding-left
:
24px
;
padding-left
:
24px
;
position
:
relative
position
:
relative
}
}
.adyen-checkout__label--focused
.adyen-checkout__radio_group__label
{
color
:
inherit
}
.adyen-checkout__radio_group__label
:before
{
.adyen-checkout__radio_group__label
:before
{
background-color
:
#fff
;
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
...
@@ -187,9 +200,14 @@
...
@@ -187,9 +200,14 @@
left
:
0
;
left
:
0
;
position
:
absolute
;
position
:
absolute
;
top
:
0
;
top
:
0
;
transition
:
border-color
.
3
s
ease-out
;
transition
:
border-color
.
2s
ease-out
,
box-shadow
.2
s
ease-out
;
width
:
16px
width
:
16px
}
}
.adyen-checkout__radio_group__label
:hover:before
{
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
;
cursor
:
pointer
}
.adyen-checkout__radio_group__label
:after
{
.adyen-checkout__radio_group__label
:after
{
-webkit-transform
:
scale
(
0
);
-webkit-transform
:
scale
(
0
);
background-color
:
#fff
;
background-color
:
#fff
;
...
@@ -203,9 +221,9 @@
...
@@ -203,9 +221,9 @@
position
:
absolute
;
position
:
absolute
;
top
:
5px
;
top
:
5px
;
transform
:
scale
(
0
);
transform
:
scale
(
0
);
transition
:
-webkit-transform
.
3
s
ease-out
;
transition
:
-webkit-transform
.
2
s
ease-out
;
transition
:
transform
.
3
s
ease-out
;
transition
:
transform
.
2
s
ease-out
;
transition
:
transform
.
3s
ease-out
,
-webkit-transform
.3
s
ease-out
;
transition
:
transform
.
2s
ease-out
,
-webkit-transform
.2
s
ease-out
;
width
:
6px
width
:
6px
}
}
.adyen-checkout__radio_group__label
:hover
{
.adyen-checkout__radio_group__label
:hover
{
...
@@ -215,13 +233,15 @@
...
@@ -215,13 +233,15 @@
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__label--selected
{
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__label--selected
{
background-color
:
#06f
;
background-color
:
#06f
;
border
:
0
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
transition
:
all
.2s
ease-out
transition
:
all
.3s
ease-out
}
}
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:after
{
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:after
{
-webkit-transform
:
scale
(
1
);
-webkit-transform
:
scale
(
1
);
transform
:
scale
(
1
)
transform
:
scale
(
1
)
}
}
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:hover:before
,
.adyen-checkout__radio_group__input
:checked:active
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__input
:checked:focus
+
.adyen-checkout__radio_group__label
:before
{
box-shadow
:
0
0
0
2px
rgba
(
0
,
102
,
255
,
.4
)
}
.adyen-checkout__radio_group__label.adyen-checkout__radio_group__label--invalid
:before
{
.adyen-checkout__radio_group__label.adyen-checkout__radio_group__label--invalid
:before
{
border
:
1px
solid
#d10244
border
:
1px
solid
#d10244
}
}
...
@@ -289,6 +309,14 @@
...
@@ -289,6 +309,14 @@
background-color
:
#06f
;
background-color
:
#06f
;
border
:
1px
solid
#06f
border
:
1px
solid
#06f
}
}
.adyen-checkout__checkbox__input
:hover:not
(
:focus
)+
.adyen-checkout__checkbox__label
:after
{
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
}
.adyen-checkout__checkbox__input
:checked:hover
+
.adyen-checkout__checkbox__label
:after
{
border-color
:
#06f
;
box-shadow
:
0
0
0
2px
rgba
(
0
,
102
,
255
,
.4
)
}
.adyen-checkout__checkbox__input
:focus
+
span
:after
{
.adyen-checkout__checkbox__input
:focus
+
span
:after
{
border
:
1px
solid
#06f
;
border
:
1px
solid
#06f
;
box-shadow
:
0
0
0
2px
#99c2ff
box-shadow
:
0
0
0
2px
#99c2ff
...
@@ -296,15 +324,12 @@
...
@@ -296,15 +324,12 @@
.adyen-checkout__dropdown
{
.adyen-checkout__dropdown
{
font-size
:
1em
;
font-size
:
1em
;
max-width
:
100%
;
max-width
:
100%
;
width
:
200px
width
:
100%
}
.adyen-checkout__dropdown--small
{
width
:
130px
}
.adyen-checkout__dropdown--large
{
width
:
300px
}
}
.adyen-checkout__dropdown__button
{
.adyen-checkout__dropdown__button
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#fff
;
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
border-radius
:
6px
;
...
@@ -312,8 +337,9 @@
...
@@ -312,8 +337,9 @@
height
:
40px
;
height
:
40px
;
line-height
:
20px
;
line-height
:
20px
;
outline
:
0
;
outline
:
0
;
padding
:
9px
2
0px
9px
8
px
;
padding
:
9px
2
4px
9px
12
px
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
user-select
:
none
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__dropdown__button__icon
{
.adyen-checkout__dropdown__button__icon
{
...
@@ -341,15 +367,19 @@
...
@@ -341,15 +367,19 @@
.adyen-checkout__dropdown__list
{
.adyen-checkout__dropdown__list
{
border-radius
:
6px
;
border-radius
:
6px
;
box-shadow
:
0
2px
7px
rgba
(
0
,
15
,
45
,
.3
);
box-shadow
:
0
2px
7px
rgba
(
0
,
15
,
45
,
.3
);
margin-top
:
2px
;
max-height
:
375px
;
max-height
:
360px
;
z-index
:
2
z-index
:
2
}
}
.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active
{
margin-top
:
2px
}
.adyen-checkout__dropdown__element
{
.adyen-checkout__dropdown__element
{
-moz-user-select
:
none
;
-ms-hyphens
:
auto
;
-ms-hyphens
:
auto
;
-ms-user-select
:
none
;
-webkit-hyphens
:
auto
;
-webkit-hyphens
:
auto
;
-webkit-user-select
:
none
;
border
:
1px
solid
transparent
;
border
:
1px
solid
transparent
;
border-bottom-color
:
#e6e9eb
;
cursor
:
pointer
;
cursor
:
pointer
;
font-size
:
.81em
;
font-size
:
.81em
;
hyphens
:
auto
;
hyphens
:
auto
;
...
@@ -357,6 +387,7 @@
...
@@ -357,6 +387,7 @@
outline
:
0
;
outline
:
0
;
padding
:
8px
;
padding
:
8px
;
transition
:
background
.2s
ease-out
,
border-color
.2s
ease-out
;
transition
:
background
.2s
ease-out
,
border-color
.2s
ease-out
;
user-select
:
none
;
word-break
:
break-word
word-break
:
break-word
}
}
.adyen-checkout__dropdown__element
:last-child
{
.adyen-checkout__dropdown__element
:last-child
{
...
@@ -365,10 +396,6 @@
...
@@ -365,10 +396,6 @@
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
,
.adyen-checkout__dropdown__element
:hover
{
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
,
.adyen-checkout__dropdown__element
:hover
{
background
:
rgba
(
230
,
233
,
235
,
.6
)
background
:
rgba
(
230
,
233
,
235
,
.6
)
}
}
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
{
border-bottom-color
:
#06f
;
border-top-color
:
#06f
}
.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active
{
.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active
{
background
:
rgba
(
0
,
102
,
255
,
.1
)
background
:
rgba
(
0
,
102
,
255
,
.1
)
}
}
...
@@ -385,8 +412,16 @@
...
@@ -385,8 +412,16 @@
right
:
32px
right
:
32px
}
}
.adyen-checkout__select-list
{
.adyen-checkout__select-list
{
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
margin
:
0
;
margin
:
0
;
padding
:
0
max-height
:
140px
;
min-height
:
100px
;
min-width
:
300px
;
overflow-y
:
scroll
;
padding
:
0
;
width
:
100%
}
}
.adyen-checkout__select-list__item
{
.adyen-checkout__select-list__item
{
background
:
#fff
;
background
:
#fff
;
...
@@ -413,6 +448,18 @@
...
@@ -413,6 +448,18 @@
.adyen-checkout__select-list__item--selected
:active
,
.adyen-checkout__select-list__item--selected
:focus
,
.adyen-checkout__select-list__item--selected
:hover
{
.adyen-checkout__select-list__item--selected
:active
,
.adyen-checkout__select-list__item--selected
:focus
,
.adyen-checkout__select-list__item--selected
:hover
{
background
:
rgba
(
0
,
102
,
255
,
.15
)
background
:
rgba
(
0
,
102
,
255
,
.15
)
}
}
.adyen-checkout__field-wrapper
{
display
:
flex
}
.adyen-checkout__field--50
{
width
:
50%
}
.adyen-checkout__field--50
:first-child
{
margin-right
:
8px
}
.adyen-checkout__field--50
:nth-child
(
2
)
{
margin-left
:
8px
}
.adyen-checkout__input
{
.adyen-checkout__input
{
background
:
#fff
;
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
...
@@ -426,13 +473,23 @@
...
@@ -426,13 +473,23 @@
padding
:
5px
8px
;
padding
:
5px
8px
;
position
:
relative
;
position
:
relative
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
width
:
200px
width
:
100%
}
.adyen-checkout__input
:hover
{
border-color
:
#99a3ad
}
}
.adyen-checkout__input
:required
{
.adyen-checkout__input
:required
{
box-shadow
:
none
box-shadow
:
none
}
}
.adyen-checkout__input--disabled
,
.adyen-checkout__input
[
readonly
]
{
background
:
#e6e9eb
;
border-color
:
#e6e9eb
}
.adyen-checkout__input--disabled
:hover
{
border-color
:
#e6e9eb
}
.adyen-checkout__input-wrapper
{
.adyen-checkout__input-wrapper
{
display
:
inline-
block
;
display
:
block
;
position
:
relative
position
:
relative
}
}
.adyen-checkout__input-wrapper--block
{
.adyen-checkout__input-wrapper--block
{
...
@@ -453,20 +510,15 @@
...
@@ -453,20 +510,15 @@
.adyen-checkout-input__inline-validation--invalid
{
.adyen-checkout-input__inline-validation--invalid
{
color
:
#d10244
color
:
#d10244
}
}
.adyen-checkout__input--small
{
width
:
134px
}
.adyen-checkout__input--large
{
width
:
300px
}
.adyen-checkout__input--invalid
{
.adyen-checkout__input--invalid
{
border-color
:
#d10244
border-color
:
#d10244
}
}
.adyen-checkout__input--valid
{
.adyen-checkout__input--valid
{
border-bottom-color
:
#0abf53
border-bottom-color
:
#0abf53
}
}
.adyen-checkout__input--error
{
.adyen-checkout__input--error
,
.adyen-checkout__input--error
:hover
,
.adyen-checkout__input--invalid
,
.adyen-checkout__input--invalid
:hover
{
border-color
:
#d10244
border-color
:
#d10244
;
color
:
#d10244
}
}
.adyen-checkout__input
::-webkit-input-placeholder
{
.adyen-checkout__input
::-webkit-input-placeholder
{
color
:
#b9c4c9
;
color
:
#b9c4c9
;
...
@@ -484,22 +536,27 @@
...
@@ -484,22 +536,27 @@
color
:
#b9c4c9
;
color
:
#b9c4c9
;
font-weight
:
200
font-weight
:
200
}
}
.adyen-checkout__input--focus
,
.adyen-checkout__input
:active
,
.adyen-checkout__input
:focus
{
.adyen-checkout__input--focus
,
.adyen-checkout__input
--focus
:hover
,
.adyen-checkout__input
:active
,
.adyen-checkout__input
:active:hover
,
.adyen-checkout__input
:focus
,
.adyen-checkout__input
:focus:hover
{
border
:
1px
solid
#06f
;
border
:
1px
solid
#06f
;
box-shadow
:
0
0
0
2px
#99c2ff
box-shadow
:
0
0
0
2px
#99c2ff
}
}
.adyen-checkout__input
[
readonly
]
{
.adyen-checkout__input
[
readonly
]
,
.adyen-checkout__input
[
readonly
]
:hover
{
background-color
:
#e6e9eb
;
background-color
:
#e6e9eb
;
border-color
:
transparent
;
border-color
:
transparent
;
color
:
#687282
;
color
:
#687282
;
cursor
:
default
cursor
:
default
}
}
.adyen-checkout__fieldset
{
.adyen-checkout__fieldset
{
color
:
#687282
;
display
:
block
;
display
:
block
;
padding-bottom
:
30
px
;
padding-bottom
:
8
px
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__fieldset
:last-of-type
{
padding-bottom
:
0
}
.adyen-checkout__fieldset
+
.adyen-checkout__fieldset
{
margin-top
:
16px
}
.adyen-checkout__fieldset__title
{
.adyen-checkout__fieldset__title
{
color
:
#687282
;
color
:
#687282
;
display
:
block
;
display
:
block
;
...
@@ -507,9 +564,27 @@
...
@@ -507,9 +564,27 @@
font-weight
:
700
;
font-weight
:
700
;
letter-spacing
:
1px
;
letter-spacing
:
1px
;
margin
:
0
;
margin
:
0
;
padding
:
0
0
20
px
;
padding
:
0
0
8
px
;
text-transform
:
uppercase
text-transform
:
uppercase
}
}
.adyen-checkout__field-group
,
.adyen-checkout__fieldset__fields
{
display
:
flex
;
flex-wrap
:
wrap
;
justify-content
:
space-between
;
width
:
100%
}
.adyen-checkout__field-group
:last-of-type
.adyen-checkout__field
{
margin-bottom
:
0
}
.adyen-checkout__field--col-70
{
width
:
calc
(
70%
-
8px
)
}
.adyen-checkout__field--col-30
{
width
:
calc
(
30%
-
8px
)
}
.adyen-checkout__field--col-50
{
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__fieldset--readonly
{
.adyen-checkout__fieldset--readonly
{
color
:
#00112c
;
color
:
#00112c
;
font-size
:
.81em
;
font-size
:
.81em
;
...
@@ -520,94 +595,63 @@
...
@@ -520,94 +595,63 @@
max-width
:
540px
max-width
:
540px
}
}
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
{
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
{
margin
:
0
0
20px
margin
:
0
0
8px
}
.adyen-checkout__link--more-information
{
font-size
:
.81em
}
}
.adyen-checkout__applepay__button
{
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
:only-of-type
{
height
:
40px
;
margin-bottom
:
0
width
:
240px
}
}
.adyen-checkout__
card-input__form
{
.adyen-checkout__
open-invoice
.adyen-checkout__checkbox--consent-checkbox
{
transition
:
opacity
.25s
ease-out
margin
:
0
}
}
.adyen-checkout__
card__exp-cvc
{
.adyen-checkout__
open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
{
display
:
flex
display
:
flex
}
}
.adyen-checkout__card__cardNumber
{
.adyen-checkout__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
>
label
{
max-width
:
400px
margin-right
:
16px
}
.adyen-checkout__card__cardNumber__input
{
padding
:
5px
8px
5px
57px
}
.adyen-checkout__card__exp-date__input--oneclick
{
font-weight
:
400
;
height
:
40px
;
line-height
:
40px
}
.adyen-checkout__card__exp-cvc
.adyen-checkout__field
{
margin-bottom
:
0
;
margin-right
:
32px
}
.adyen-checkout__card-input
.adyen-checkout__store-details
{
margin-top
:
16px
}
}
.adyen-checkout__giropay__results
{
.adyen-checkout__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__label--focused
.adyen-checkout__label__text
,
.adyen-checkout__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__label__text
{
background
:
#fff
;
color
:
#00112c
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
max-height
:
140px
;
min-height
:
100px
;
min-width
:
300px
;
overflow-y
:
scroll
;
width
:
100%
}
}
.adyen-checkout__giropay__no-results
{
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--billingAddress
{
color
:
#687282
;
padding-bottom
:
8px
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__giropay__placeholder
{
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--deliveryAddress
{
color
:
#b9c4c9
;
margin-top
:
24px
;
display
:
block
;
padding-bottom
:
8px
font-weight
:
200
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__giropay__loading
{
.adyen-checkout__open-invoice
.adyen-checkout__input--separateDeliveryAddress
{
display
:
block
;
margin-bottom
:
0
min-height
:
100px
}
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
.adyen-checkout__open-invoice
.adyen-checkout__field--dateOfBirth
{
display
:
inline-block
;
width
:
calc
(
50%
-
8px
)
vertical-align
:
middle
}
}
.adyen-checkout__giropay__loading-text
{
.adyen-checkout__open-invoice
.adyen-checkout__field--country
,
.adyen-checkout__open-invoice
.adyen-checkout__field--street
{
color
:
#687282
;
width
:
calc
(
70%
-
8px
)
font-size
:
.81em
;
line-height
:
16px
;
vertical-align
:
middle
}
}
.adyen-checkout__giropay__error
{
.adyen-checkout__open-invoice
.adyen-checkout__field--houseNumberOrName
,
.adyen-checkout__open-invoice
.adyen-checkout__field--postalCode
{
color
:
#d10244
;
width
:
calc
(
30%
-
8px
)
font-size
:
.81em
}
}
.adyen-checkout__button
{
.adyen-checkout__button
{
background
:
#00112c
;
background
:
#00112c
;
border
:
0
;
border
:
0
;
border-radius
:
6px
;
border-radius
:
6px
;
box-shadow
:
0
3px
4px
rgba
(
0
,
15
,
45
,
.2
);
color
:
#fff
;
color
:
#fff
;
cursor
:
pointer
;
cursor
:
pointer
;
font-size
:
1em
;
font-size
:
1em
;
font-weight
:
7
00
;
font-weight
:
5
00
;
height
:
48px
;
height
:
48px
;
margin
:
0
;
margin
:
0
;
padding
:
15px
;
padding
:
15px
;
transition
:
background
.3s
ease-out
;
text-decoration
:
none
;
transition
:
background
.3s
ease-out
,
box-shadow
.3s
ease-out
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__button--pay
{
margin-top
:
24px
}
.adyen-checkout__button--standalone
{
margin-top
:
0
}
.adyen-checkout__button
:disabled
{
.adyen-checkout__button
:disabled
{
-moz-user-select
:
all
;
-moz-user-select
:
all
;
-ms-user-select
:
all
;
-ms-user-select
:
all
;
...
@@ -617,176 +661,255 @@
...
@@ -617,176 +661,255 @@
cursor
:
not-allowed
;
cursor
:
not-allowed
;
user-select
:
all
user-select
:
all
}
}
.adyen-checkout__button
:focus
{
box-shadow
:
0
0
0
2px
#99c2ff
;
outline
:
0
}
.adyen-checkout__button
:hover
{
background
:
#1c3045
;
box-shadow
:
0
0
,
0
2px
4px
-1px
rgba
(
0
,
0
,
0
,
.2
),
0
4px
5px
0
rgba
(
0
,
0
,
0
,
.14
)
}
.adyen-checkout__button
:active
{
background
:
#3a4a5c
}
.adyen-checkout__button
:hover:focus
{
box-shadow
:
0
0
0
2px
#99c2ff
,
0
3px
4px
rgba
(
0
,
15
,
45
,
.2
)
}
.adyen-checkout__button--loading
{
.adyen-checkout__button--loading
{
-moz-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#687282
;
background
:
#687282
;
box-shadow
:
none
;
box-shadow
:
none
;
outline
:
0
;
pointer-events
:
none
;
pointer-events
:
none
;
user-select
:
none
user-select
:
none
}
}
.adyen-checkout__button
.adyen-checkout__spinner
{
.adyen-checkout__button
.adyen-checkout__spinner
{
border-color
:
transparent
#fff
#fff
;
border-color
:
transparent
#fff
#fff
border-width
:
3px
}
}
.adyen-checkout__button__content
{
.adyen-checkout__button__content
{
align-items
:
center
;
align-items
:
center
;
display
:
flex
;
display
:
flex
;
justify-content
:
center
justify-content
:
center
}
}
.adyen-checkout__phone-input
{
.adyen-checkout__button__icon
{
display
:
flex
margin-right
:
12px
}
.adyen-checkout__phone-input__prefix
{
margin-bottom
:
0
;
margin-right
:
.5em
}
.adyen-checkout__input--phone-number
{
margin-bottom
:
0
}
}
.adyen-checkout__iban-input__number
{
.adyen-checkout__button__text
{
padding
:
5px
36px
5px
8px
;
display
:
block
;
text-transform
:
uppercase
justify-content
:
center
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
}
.adyen-checkout__threeds2__challenge
,
.adyen-checkout__threeds2__challenge-container
{
.adyen-checkout__button.adyen-checkout__button--inline
{
background-color
:
transparent
;
box-sizing
:
border-box
;
display
:
block
;
display
:
block
;
overflow
:
auto
;
font-size
:
.81em
;
width
:
100%
height
:
auto
;
padding
:
10px
8px
;
width
:
auto
}
}
.adyen-checkout__threeds2__challenge-container--01
{
.adyen-checkout__button.adyen-checkout__button--secondary
{
height
:
400px
;
background
:
rgba
(
0
,
102
,
255
,
.1
);
width
:
250px
border
:
1px
solid
transparent
;
color
:
#06f
;
padding
:
10px
12px
}
}
.adyen-checkout__
threeds2__challenge-container--02
{
.adyen-checkout__
button.adyen-checkout__button--secondary
:hover
{
height
:
400px
;
background
:
rgba
(
0
,
102
,
255
,
.2
)
;
width
:
390px
box-shadow
:
none
}
}
.adyen-checkout__
threeds2__challenge-container--03
{
.adyen-checkout__
button.adyen-checkout__button--secondary
:active
,
.adyen-checkout__button.adyen-checkout__button--secondary
:active:hover
{
height
:
600px
;
background
:
rgba
(
0
,
102
,
255
,
.3
)
;
width
:
500px
box-shadow
:
none
}
}
.adyen-checkout__
threeds2__challenge-container--04
{
.adyen-checkout__
button.adyen-checkout__button--completed
,
.adyen-checkout__button.adyen-checkout__button--completed
:active
,
.adyen-checkout__button.adyen-checkout__button--completed
:active:hover
,
.adyen-checkout__button.adyen-checkout__button--completed
:hover
{
height
:
400px
;
background
:
#0abf53
;
width
:
600px
color
:
#fff
}
}
.adyen-checkout__
threeds2_challenge-container--05
{
.adyen-checkout__
button.adyen-checkout__button--completed
.adyen-checkout__button__icon
{
height
:
100%
;
-webkit-filter
:
brightness
(
0
)
invert
(
1
)
;
width
:
100%
filter
:
brightness
(
0
)
invert
(
1
)
}
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
{
.adyen-checkout__applepay__button
{
overflow
:
hidden
;
height
:
40px
;
padding-top
:
56.25%
;
width
:
240px
position
:
relative
}
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
.adyen-checkout__iframe--threeDSIframe
{
.adyen-checkout__dropin
.adyen-checkout__applepay__button
{
border
:
0
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__qr-loader
{
.adyen-checkout__card-input__form
{
background
:
#fff
;
transition
:
opacity
.25s
ease-out
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
padding
:
40px
;
text-align
:
center
}
}
.adyen-checkout__qr-loader--app
{
.adyen-checkout__card__cardNumber
{
border
:
0
;
max-width
:
400px
border-radius
:
0
;
padding
:
0
}
}
.adyen-checkout__qr-loader__brand-logo
{
.adyen-checkout__card__cardNumber__input
{
max-height
:
50px
;
padding
:
5px
8px
width
:
110px
}
}
.adyen-checkout__qr-loader__subtitle
{
.adyen-checkout__card__exp-date__input--oneclick
{
margin-top
:
32px
font-weight
:
400
;
line-height
:
30px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
}
.adyen-checkout__qr-loader__payment_amount
,
.adyen-checkout__qr-loader__subtitle
{
.adyen-checkout__card__holderName
,
.adyen-checkout__field--expiryDate
,
.adyen-checkout__field--storedCard
{
color
:
#00112c
;
margin-bottom
:
0
font-size
:
1em
;
line-height
:
19px
}
}
.adyen-checkout__
qr-loader__payment_amount
{
.adyen-checkout__
card__holderName
,
.adyen-checkout__store-details
{
font-weight
:
700
margin-top
:
16px
}
}
.adyen-checkout__qr-loader__progress
{
.adyen-checkout__field--cardNumber
.adyen-checkout__input--error
.adyen-checkout__card__cardNumber__brandIcon
{
background
:
#d4d9db
;
display
:
none
border-radius
:
25px
;
height
:
4px
;
margin
:
32px
auto
12px
;
padding-right
:
3%
;
width
:
152px
}
}
.adyen-checkout__qr-loader__percentage
{
.adyen-checkout__field--cardNumber
.adyen-checkout__input--valid
:not
(
.adyen-checkout__card__cardNumber__input--noBrand
)+
.adyen-checkout-input__inline-validation--valid
{
background
:
#06f
;
display
:
none
border-radius
:
25px
;
display
:
block
;
height
:
100%
}
}
.adyen-checkout__
qr-loader__countdown
{
.adyen-checkout__
giropay__no-results
{
color
:
#687282
;
color
:
#687282
;
font-size
:
.81em
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__qr-loader
>
.adyen-checkout__spinner__wrapper
{
.adyen-checkout__giropay__placeholder
{
margin
:
60px
0
color
:
#b9c4c9
;
display
:
block
;
font-weight
:
200
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__qr-loader__separator__label
{
.adyen-checkout__giropay__loading
{
background
:
#fff
;
display
:
block
;
border-radius
:
100%
;
min-height
:
100px
color
:
#687282
;
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
display
:
inline-block
;
display
:
inline-block
;
height
:
34px
;
vertical-align
:
middle
line-height
:
34px
;
position
:
relative
;
width
:
34px
;
z-index
:
1
}
}
.adyen-checkout__
qr-loader__separator__line
{
.adyen-checkout__
giropay__loading-text
{
-webkit-transform
:
translateY
(
-17px
)
;
color
:
#687282
;
border-top
:
1px
solid
#d4d9db
;
font-size
:
.81em
;
display
:
block
;
line-height
:
16px
;
transform
:
translateY
(
-17px
)
vertical-align
:
middle
}
}
.adyen-checkout__button.adyen-checkout__button--qr-loader
{
.adyen-checkout__giropay__error
{
display
:
block
;
color
:
#d10244
;
text-decoration
:
none
font-size
:
.81em
}
.adyen-checkout__dropin
.gpay-button.long
{
height
:
48px
;
padding
:
15px
24px
13px
;
transition
:
background-color
.3s
ease-out
,
box-shadow
.3s
ease-out
;
width
:
100%
}
.adyen-checkout__field--issuer-list
{
margin-bottom
:
0
}
.adyen-checkout__econtext-input__field
{
display
:
flex
;
flex-wrap
:
wrap
}
.adyen-checkout__econtext-input__field
.adyen-checkout__field--firstName
,
.adyen-checkout__econtext-input__field
.adyen-checkout__field--lastName
{
max-width
:
100%
;
min-width
:
250px
;
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__econtext-input__field
.adyen-checkout__field--firstName
{
margin-right
:
16px
}
}
.adyen-checkout__voucher-result
{
.adyen-checkout__voucher-result
{
background
:
#fff
;
border-radius
:
12px
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
p
adding
:
20px
16px
56px
;
p
osition
:
relative
;
text-align
:
center
text-align
:
center
}
}
.adyen-checkout__voucher-result__bottom
,
.adyen-checkout__voucher-result__top
{
background
:
#fff
;
border
:
1px
solid
#d4d9db
}
.adyen-checkout__voucher-result__top
{
border-bottom
:
0
;
border-radius
:
12px
12px
0
0
;
padding
:
40px
0
24px
}
.adyen-checkout__voucher-result__bottom
{
border-radius
:
0
0
12px
12px
;
border-top
:
0
}
.adyen-checkout__voucher-result__separator
{
align-items
:
center
;
background
:
#fff
;
display
:
flex
;
height
:
13px
;
margin
:
0
auto
;
position
:
relative
;
width
:
calc
(
100%
-
14px
)
}
.adyen-checkout__voucher-result__separator
:after
,
.adyen-checkout__voucher-result__separator
:before
{
background-image
:
url
(
data
:
image
/
svg
+
xml
;
base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDApIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMGw1IDIgMS41IDRIN1YwSDB6bTAgMTNsNS0yIDEuNS00SDd2NkgweiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik02LjQyMyA2LjVDNi40MjMgMy4zMTIgMy43ODMuNzU2LjUuNTE4YzMuMzg2LjIzNiA2IDIuODU1IDYgNS45ODIgMCAzLjEyNy0yLjYxNCA1Ljc0Ni02IDUuOTgzdi0uMDAxYzMuMjg0LS4yMzcgNS45MjMtMi43OTQgNS45MjMtNS45ODJ6IiBzdHJva2U9IiNENEQ5REIiLz48cGF0aCBmaWxsPSIjRDREOURCIiBkPSJNMCAwaDF2MUgwek0wIDEyaDF2MUgweiIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAwIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDd2MTNIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=)
}
.adyen-checkout__voucher-result__separator
:before
{
background-position
:
100%
;
background-repeat
:
no-repeat
;
content
:
""
;
height
:
13px
;
left
:
-7px
;
position
:
absolute
;
top
:
0
;
width
:
7px
}
.adyen-checkout__voucher-result__separator
:after
{
-webkit-transform
:
rotate
(
-180deg
);
background-position
:
100%
;
background-repeat
:
no-repeat
;
content
:
""
;
height
:
13px
;
position
:
absolute
;
right
:
-7px
;
top
:
0
;
transform
:
rotate
(
-180deg
);
width
:
7px
}
.adyen-checkout__voucher-result__separator__inner
{
border-top
:
1px
solid
#e6e9eb
;
width
:
100%
}
.adyen-checkout__voucher-result__image
{
.adyen-checkout__voucher-result__image
{
align-items
:
center
;
align-items
:
center
;
display
:
flex
;
display
:
flex
;
justify-content
:
center
;
justify-content
:
center
;
margin-bottom
:
16
px
;
margin-bottom
:
40
px
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__voucher-result__image__wrapper
{
.adyen-checkout__voucher-result__image__wrapper
{
display
:
inline-block
;
display
:
block
;
padding
:
8px
;
height
:
48px
;
width
:
120px
margin
:
0
24px
;
position
:
relative
}
.adyen-checkout__voucher-result__image__wrapper
:after
{
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
border-radius
:
3px
;
content
:
""
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
width
:
100%
}
}
.adyen-checkout__voucher-result__image__wrapper
:nth-child
(
2
)
{
.adyen-checkout__voucher-result__image__wrapper
:nth-child
(
2
)
:before
{
border-left
:
1px
solid
#d4d9db
border-left
:
1px
solid
#d4d9db
;
content
:
""
;
height
:
64px
;
left
:
-24.5px
;
position
:
absolute
;
top
:
-8px
;
width
:
1px
}
}
.adyen-checkout__voucher-result__image__brand
,
.adyen-checkout__voucher-result__image__issuer
{
.adyen-checkout__voucher-result__image__brand
,
.adyen-checkout__voucher-result__image__issuer
{
height
:
34px
border-radius
:
3px
;
}
height
:
48px
.adyen-checkout__voucher-result__image__brand
{
height
:
60px
}
}
.adyen-checkout__voucher-result__introduction
{
.adyen-checkout__voucher-result__introduction
{
color
:
#00112c
;
color
:
#00112c
;
...
@@ -818,52 +941,67 @@
...
@@ -818,52 +941,67 @@
display
:
block
;
display
:
block
;
font-weight
:
400
;
font-weight
:
400
;
left
:
0
;
left
:
0
;
line-height
:
19px
;
margin
:
0
auto
;
margin
:
0
auto
;
position
:
absolute
;
position
:
absolute
;
right
:
0
;
right
:
0
;
top
:
-
14
px
;
top
:
-
2
px
;
user-select
:
none
;
user-select
:
none
;
width
:
auto
width
:
auto
}
}
.adyen-checkout__voucher-result__code__label
:before
{
content
:
""
;
position
:
absolute
}
.adyen-checkout__voucher-result__code__label__text
{
.adyen-checkout__voucher-result__code__label__text
{
background
:
#fff
;
background
:
#fff
;
color
:
#00112c
;
color
:
#00112c
;
font-size
:
13px
;
font-size
:
13px
;
letter-spacing
:
normal
;
line-height
:
1
;
padding
:
0
8px
padding
:
0
8px
}
}
.adyen-checkout__voucher-result__code__barcode
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
display
:
block
;
height
:
56px
;
margin
:
0
auto
8px
;
max-width
:
100%
;
user-select
:
none
}
.adyen-checkout__voucher-result__code
{
.adyen-checkout__voucher-result__code
{
-moz-user-select
:
all
;
-moz-user-select
:
all
;
-ms-user-select
:
all
;
-ms-user-select
:
all
;
-webkit-user-select
:
all
;
-webkit-user-select
:
all
;
border
:
1px
solid
#e6e9eb
;
border-width
:
1px
0
;
border-radius
:
6px
;
color
:
#00112c
;
color
:
#00112c
;
display
:
inline-block
;
display
:
inline-block
;
font-size
:
1.5em
;
font-size
:
1.5em
;
font-weight
:
700
;
font-weight
:
700
;
letter-spacing
:
1px
;
letter-spacing
:
1px
;
line-height
:
19px
;
line-height
:
1.2
;
margin
:
20px
auto
16px
;
margin
:
0
auto
;
max-width
:
100%
;
padding
:
16px
48px
;
min-width
:
200px
;
padding
:
28px
48px
24px
;
position
:
relative
;
position
:
relative
;
text-align
:
center
;
text-align
:
center
;
user-select
:
all
;
user-select
:
all
;
width
:
300px
width
:
100%
;
word-break
:
break-word
}
}
.adyen-checkout__voucher-result__details
{
.adyen-checkout__voucher-result__details
{
list-style
:
none
;
list-style
:
none
;
margin
:
8px
auto
0
;
margin
:
-1px
auto
0
;
max-width
:
300px
;
padding
:
0
padding
:
0
}
}
.adyen-checkout__voucher-result__details__item
{
.adyen-checkout__voucher-result__details__item
{
border-top
:
1px
solid
#e6e9eb
;
color
:
#00112c
;
color
:
#00112c
;
display
:
flex
;
display
:
flex
;
font-size
:
.81em
;
font-size
:
.81em
;
justify-content
:
space-between
;
justify-content
:
space-between
;
margin-bottom
:
16
px
;
padding
:
16px
24
px
;
word-break
:
break-word
word-break
:
break-word
}
}
.adyen-checkout__voucher-result__details__item
:last-child
{
.adyen-checkout__voucher-result__details__item
:last-child
{
...
@@ -878,9 +1016,189 @@
...
@@ -878,9 +1016,189 @@
max-width
:
50%
;
max-width
:
50%
;
text-align
:
right
text-align
:
right
}
}
.adyen-checkout__payment-method
{
.adyen-checkout__voucher-result__actions
{
align-items
:
center
;
display
:
flex
;
justify-content
:
center
;
list-style
:
none
;
margin
:
0
auto
32px
;
max-width
:
100%
;
min-width
:
200px
;
padding
:
0
;
width
:
300px
}
.adyen-checkout__voucher-result__actions__item
{
margin
:
0
4px
}
.adyen-checkout__link--more-information
{
display
:
block
;
font-size
:
.81em
;
font-weight
:
400
;
margin
:
16px
0
;
text-align
:
center
}
.adyen-checkout__phone-input__container
{
display
:
flex
}
.adyen-checkout__phone-input__prefix
{
margin-bottom
:
0
;
margin-right
:
.5em
;
width
:
30%
}
.adyen-checkout__input--phone-number
{
margin-bottom
:
0
;
width
:
70%
}
.adyen-checkout__iban-input__number
{
padding
:
5px
36px
5px
8px
;
text-transform
:
uppercase
}
.adyen-checkout__threeds2__challenge
,
.adyen-checkout__threeds2__challenge-container
{
background-color
:
transparent
;
box-sizing
:
border-box
;
display
:
block
;
overflow
:
auto
;
width
:
100%
}
.adyen-checkout__threeds2__challenge-container--01
{
height
:
400px
;
width
:
250px
}
.adyen-checkout__threeds2__challenge-container--02
{
height
:
400px
;
width
:
390px
}
.adyen-checkout__threeds2__challenge-container--03
{
height
:
600px
;
width
:
500px
}
.adyen-checkout__threeds2__challenge-container--04
{
height
:
400px
;
width
:
600px
}
.adyen-checkout__threeds2_challenge-container--05
{
height
:
100%
;
width
:
100%
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
{
overflow
:
hidden
;
padding-top
:
56.25%
;
position
:
relative
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
.adyen-checkout__iframe--threeDSIframe
{
border
:
0
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
width
:
100%
}
.adyen-checkout__qr-loader
{
background
:
#fff
;
background
:
#fff
;
border
:
1px
solid
#d4d9db
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
padding
:
40px
;
text-align
:
center
}
.adyen-checkout__qr-loader--app
{
border
:
0
;
border-radius
:
0
;
padding
:
0
}
.adyen-checkout__qr-loader__brand-logo
{
max-height
:
50px
;
width
:
110px
}
.adyen-checkout__qr-loader__subtitle
{
margin-top
:
32px
}
.adyen-checkout__qr-loader__subtitle--result
{
margin-bottom
:
32px
}
.adyen-checkout__qr-loader__payment_amount
,
.adyen-checkout__qr-loader__subtitle
{
color
:
#00112c
;
font-size
:
1em
;
line-height
:
19px
}
.adyen-checkout__qr-loader__icon
{
height
:
88px
;
width
:
88px
}
.adyen-checkout__qr-loader__icon--result
{
margin-bottom
:
100px
}
.adyen-checkout__qr-loader__payment_amount
{
font-weight
:
700
}
.adyen-checkout__qr-loader__progress
{
background
:
#d4d9db
;
border-radius
:
24px
;
height
:
4px
;
margin
:
32px
auto
12px
;
padding-right
:
3%
;
width
:
152px
}
.adyen-checkout__qr-loader__percentage
{
background
:
#06f
;
border-radius
:
24px
;
display
:
block
;
height
:
100%
}
.adyen-checkout__qr-loader__countdown
{
color
:
#687282
;
font-size
:
.81em
}
.adyen-checkout__qr-loader
>
.adyen-checkout__spinner__wrapper
{
margin
:
60px
0
}
.adyen-checkout__qr-loader__separator__label
{
background
:
#fff
;
border-radius
:
50%
;
color
:
#687282
;
display
:
inline-block
;
height
:
34px
;
line-height
:
34px
;
position
:
relative
;
width
:
34px
;
z-index
:
1
}
.adyen-checkout__qr-loader__separator__line
{
-webkit-transform
:
translateY
(
-17px
);
border-top
:
1px
solid
#d4d9db
;
display
:
block
;
transform
:
translateY
(
-17px
)
}
.adyen-checkout__button.adyen-checkout__button--qr-loader
{
display
:
block
;
text-decoration
:
none
}
.adyen-checkout__doku-input__field
{
display
:
flex
;
flex-wrap
:
wrap
}
.adyen-checkout__doku-input__field
.adyen-checkout__field--firstName
,
.adyen-checkout__doku-input__field
.adyen-checkout__field--lastName
{
max-width
:
100%
;
min-width
:
250px
;
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__doku-input__field
.adyen-checkout__field--firstName
{
margin-right
:
16px
}
.adyen-checkout__voucher-result--boletobancario
.adyen-checkout__voucher-result__code
{
font-size
:
.81em
;
line-height
:
19px
;
padding
:
24px
;
word-break
:
break-all
}
.adyen-checkout__voucher-result--oxxo
.adyen-checkout__voucher-result__code
{
font-size
:
.81em
;
line-height
:
19px
;
padding
:
24px
;
word-break
:
break-all
}
.adyen-checkout__payment-method
{
background
:
#fff
;
border
:
1px
solid
#e6e9eb
;
cursor
:
pointer
;
cursor
:
pointer
;
margin-top
:
-1px
;
margin-top
:
-1px
;
position
:
relative
;
position
:
relative
;
...
@@ -891,13 +1209,13 @@
...
@@ -891,13 +1209,13 @@
outline
:
0
outline
:
0
}
}
.adyen-checkout__payment-method--selected
+
.adyen-checkout__payment-method
,
.adyen-checkout__payment-method
:first-child
{
.adyen-checkout__payment-method--selected
+
.adyen-checkout__payment-method
,
.adyen-checkout__payment-method
:first-child
{
border-top-left-radius
:
6
px
;
border-top-left-radius
:
12
px
;
border-top-right-radius
:
6
px
;
border-top-right-radius
:
12
px
;
margin-top
:
0
margin-top
:
0
}
}
.adyen-checkout__payment-method--next-selected
,
.adyen-checkout__payment-method
:last-child
{
.adyen-checkout__payment-method--next-selected
,
.adyen-checkout__payment-method
:last-child
{
border-bottom-left-radius
:
6
px
;
border-bottom-left-radius
:
12
px
;
border-bottom-right-radius
:
6
px
;
border-bottom-right-radius
:
12
px
;
margin-bottom
:
0
margin-bottom
:
0
}
}
.adyen-checkout__payment-method--loading
{
.adyen-checkout__payment-method--loading
{
...
@@ -907,31 +1225,51 @@
...
@@ -907,31 +1225,51 @@
opacity
:
.9
opacity
:
.9
}
}
.adyen-checkout__payment-method--disabling
{
.adyen-checkout__payment-method--disabling
{
opacity
:
.
5
opacity
:
.
3
}
}
.adyen-checkout__payment-method__header
{
.adyen-checkout__payment-method__header
{
align-items
:
center
;
align-items
:
center
;
color
:
#00112c
;
color
:
#00112c
;
display
:
flex
;
display
:
flex
;
flex-wrap
:
nowrap
;
font-size
:
1em
;
font-size
:
1em
;
font-weight
:
400
;
font-weight
:
400
;
padding
:
16px
;
justify-content
:
space-between
;
padding
:
16px
16px
16px
48px
;
position
:
relative
;
position
:
relative
;
transition
:
background
.1s
ease-out
;
transition
:
background
.1s
ease-out
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__payment-method--standalone
.adyen-checkout__payment-method__header
{
padding
:
16px
}
.adyen-checkout__payment-method__header__title
{
align-items
:
center
;
display
:
flex
;
flex-shrink
:
0
;
margin-right
:
16px
;
max-width
:
100%
}
.adyen-checkout__payment-method__surcharge
{
.adyen-checkout__payment-method__surcharge
{
color
:
#687282
;
color
:
#687282
;
margin-left
:
5px
margin-left
:
5px
}
}
.adyen-checkout__payment-method--selected
{
.adyen-checkout__payment-method--selected
{
background
:
#f7f8f9
;
background
:
#f7f8f9
;
border
:
1px
solid
#
d4d9d
b
;
border
:
1px
solid
#
e6e9e
b
;
border-radius
:
6
px
;
border-radius
:
12
px
;
cursor
:
default
;
cursor
:
default
;
margin
:
8px
0
;
margin
:
8px
0
;
transition
:
margin
.15s
cubic-bezier
(
.4
,
0
,
.2
,
1
)
0ms
,
opacity
.3s
ease-out
transition
:
margin
.15s
cubic-bezier
(
.4
,
0
,
.2
,
1
)
0ms
,
opacity
.3s
ease-out
}
}
.adyen-checkout__payment-method--selected
.adyen-checkout__payment-method__header
{
flex-wrap
:
wrap
}
.adyen-checkout__payment-method__name
{
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
.adyen-checkout__payment-method__name--selected
{
.adyen-checkout__payment-method__name--selected
{
font-weight
:
500
font-weight
:
500
}
}
...
@@ -939,11 +1277,17 @@
...
@@ -939,11 +1277,17 @@
padding
:
0
16px
padding
:
0
16px
}
}
.adyen-checkout__payment-method__details__content
{
.adyen-checkout__payment-method__details__content
{
margin
:
6px
0
22
px
margin
:
0
0
16
px
}
}
.adyen-checkout__payment-method__image__wrapper
{
.adyen-checkout__payment-method__image__wrapper
{
height
:
26px
;
height
:
26px
;
position
:
relative
opacity
:
0
;
position
:
relative
;
transition
:
opacity
.15s
ease-out
;
width
:
40px
}
.adyen-checkout__payment-method__image__wrapper--loaded
{
opacity
:
1
}
}
.adyen-checkout__payment-method__image__wrapper
:after
{
.adyen-checkout__payment-method__image__wrapper
:after
{
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
...
@@ -958,12 +1302,47 @@
...
@@ -958,12 +1302,47 @@
.adyen-checkout__payment-method__image
{
.adyen-checkout__payment-method__image
{
border-radius
:
3px
border-radius
:
3px
}
}
.adyen-checkout__payment-method__brands
{
display
:
flex
;
flex-basis
:
auto
;
flex-shrink
:
1
;
flex-wrap
:
wrap
;
height
:
16px
;
margin
:
4px
0
;
overflow
:
hidden
;
text-align
:
right
}
.adyen-checkout__payment-method--selected
.adyen-checkout__payment-method__brands
{
height
:
auto
;
overflow
:
visible
;
text-align
:
left
}
.adyen-checkout__payment-method__brands
.adyen-checkout__payment-method__image__wrapper
{
display
:
inline-block
;
height
:
16px
;
margin-right
:
4px
;
transition
:
opacity
.2s
ease-out
;
width
:
24px
}
.adyen-checkout__payment-method__brands
.adyen-checkout__payment-method__image__wrapper
:last-child
{
margin
:
0
}
.adyen-checkout__payment-method--selected
.adyen-checkout__payment-method__brands
.adyen-checkout__payment-method__image__wrapper
{
margin-bottom
:
4px
}
.adyen-checkout__payment-method__brands
img
{
height
:
16px
;
width
:
24px
}
.adyen-checkout__payment-method__image__wrapper--disabled
{
opacity
:
.25
}
.adyen-checkout__payment-method__disable-confirmation
{
.adyen-checkout__payment-method__disable-confirmation
{
align-items
:
center
;
align-items
:
center
;
background
:
#e6e9eb
;
background
:
#e6e9eb
;
color
:
#00112c
;
color
:
#00112c
;
display
:
flex
;
display
:
flex
;
font-size
:
.94
em
;
font-size
:
1
em
;
justify-content
:
space-between
;
justify-content
:
space-between
;
margin-bottom
:
10px
;
margin-bottom
:
10px
;
padding
:
8px
16px
padding
:
8px
16px
...
@@ -994,18 +1373,19 @@
...
@@ -994,18 +1373,19 @@
background-color
:
#fff
;
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
50%
;
border-radius
:
50%
;
box-shadow
:
inset
0
1px
3px
rgba
(
0
,
27
,
43
,
.15
)
;
height
:
16px
;
height
:
18
px
;
left
:
16
px
;
position
:
absolute
;
position
:
absolute
;
right
:
20px
;
transition
:
border-color
.2s
ease-out
,
box-shadow
.2s
ease-out
;
transition
:
border-color
.3s
ease-out
;
width
:
16px
width
:
18px
}
.adyen-checkout__payment-method--standalone
.adyen-checkout__payment-method__radio
{
display
:
none
}
}
.adyen-checkout__payment-method__radio
:after
{
.adyen-checkout__payment-method__radio
:after
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
0
);
-webkit-transform
:
translateY
(
-50%
)
scale
(
0
);
background-color
:
#fff
;
background-color
:
#fff
;
border-radius
:
50%
;
border-radius
:
50%
;
box-shadow
:
0
1px
1px
rgba
(
0
,
15
,
45
,
.25
);
content
:
""
;
content
:
""
;
display
:
block
;
display
:
block
;
height
:
6px
;
height
:
6px
;
...
@@ -1021,31 +1401,31 @@
...
@@ -1021,31 +1401,31 @@
width
:
6px
width
:
6px
}
}
.adyen-checkout__payment-method__radio
:hover
{
.adyen-checkout__payment-method__radio
:hover
{
border-color
:
#06f
;
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
;
cursor
:
pointer
cursor
:
pointer
}
}
.adyen-checkout__payment-method__radio--selected
{
.adyen-checkout__payment-method__radio--selected
{
background-color
:
#06f
;
background-color
:
#06f
;
border
:
0
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
transition
:
all
.3s
ease-out
transition
:
all
.3s
ease-out
}
}
.adyen-checkout__payment-method__radio--selected
:hover
{
box-shadow
:
0
0
0
2px
rgba
(
0
,
102
,
255
,
.4
)
}
.adyen-checkout__payment-method__radio--selected
:after
{
.adyen-checkout__payment-method__radio--selected
:after
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
1
);
-webkit-transform
:
translateY
(
-50%
)
scale
(
1
);
transform
:
translateY
(
-50%
)
scale
(
1
)
transform
:
translateY
(
-50%
)
scale
(
1
)
}
}
.adyen-checkout__button--pay
{
margin-bottom
:
16px
}
.adyen-checkout__status
{
.adyen-checkout__status
{
align-items
:
center
;
align-items
:
center
;
background-color
:
#fff
;
background-color
:
#fff
;
border
:
1px
solid
#d4d9db
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
border-radius
:
6px
;
color
:
#001
b2b
;
color
:
#001
12c
;
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
font-size
:
1
6px
;
font-size
:
1
em
;
height
:
350px
;
height
:
350px
;
justify-content
:
center
;
justify-content
:
center
;
margin
:
0
;
margin
:
0
;
...
@@ -1072,4 +1452,5 @@
...
@@ -1072,4 +1452,5 @@
.adyen-checkout__link
:hover
{
.adyen-checkout__link
:hover
{
text-decoration
:
underline
text-decoration
:
underline
}
}
/* Checkout component Adyen styling end */
/* Checkout component Adyen styling end */
view/base/web/images/logos/boekenbon.png
0 → 100644
View file @
3c5450eb
20.4 KB
view/base/web/images/logos/directdebit_GB.png
0 → 100644
View file @
3c5450eb
1.86 KB
view/base/web/images/logos/klarna_paynow.png
0 → 100644
View file @
3c5450eb
819 Bytes
view/base/web/images/logos/vvvcadeaubon.png
0 → 100644
View file @
3c5450eb
2.84 KB
view/frontend/web/css/styles.css
View file @
3c5450eb
...
@@ -206,44 +206,55 @@
...
@@ -206,44 +206,55 @@
/* General styling for checkout */
/* General styling for checkout */
.payment-method-content
.field
input
,
.payment-method-content
.field
select
{
.payment-method-content
.field
input
,
.payment-method-content
.field
select
{
max-width
:
168
px
;
max-width
:
250
px
;
}
}
.adyen-checkout__link
adyen-checkout__link--more-information
{
.adyen-checkout__link
adyen-checkout__link--more-information
{
margin-bottom
:
10px
;
margin-bottom
:
10px
;
}
}
.checkout-component-dock
{
max-width
:
250px
;
margin-bottom
:
10px
;
}
.message.error.hpp-message
{
.message.error.hpp-message
{
margin-top
:
10px
;
margin-top
:
10px
;
display
:
none
;
display
:
none
;
}
}
/* Checkout component Adyen v3.2.0 styling start */
/* Checkout component Adyen v3.0.0 styling start */
.adyen-checkout__field
{
.adyen-checkout__field
{
display
:
block
;
display
:
block
;
margin-bottom
:
16px
margin-bottom
:
16px
;
}
width
:
100%
.adyen-checkout__field--error
input
{
border-color
:
#d10244
;
color
:
#d10244
}
}
.adyen-checkout__field
:last-
child
{
.adyen-checkout__field
:last-
of-type
{
margin-bottom
:
0
margin-bottom
:
0
}
}
.adyen-checkout__label
{
display
:
block
}
.adyen-checkout__helper-text
,
.adyen-checkout__label__text
{
.adyen-checkout__helper-text
,
.adyen-checkout__label__text
{
color
:
#00112c
;
color
:
#00112c
;
display
:
block
;
display
:
block
;
font-size
:
.81em
;
font-size
:
.81em
;
font-weight
:
400
;
font-weight
:
400
;
line-height
:
13px
;
line-height
:
13px
;
padding-bottom
:
8
px
padding-bottom
:
5
px
}
}
.adyen-checkout__helper-text
{
.adyen-checkout__helper-text
{
color
:
#687282
color
:
#687282
}
}
.adyen-checkout__label__text
{
.adyen-checkout__label__text
{
transition
:
color
.2s
ease-out
display
:
block
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
transition
:
color
.1s
ease-out
;
white-space
:
nowrap
}
.adyen-checkout__label__text--error
{
color
:
#d10244
}
}
.adyen-checkout__label--focused
.adyen-checkout__label__text
{
.adyen-checkout__label--focused
.adyen-checkout__label__text
{
color
:
#06f
color
:
#06f
...
@@ -268,9 +279,9 @@
...
@@ -268,9 +279,9 @@
margin-right
:
8px
margin-right
:
8px
}
}
.adyen-checkout__spinner
{
.adyen-checkout__spinner
{
-webkit-animation
:
rotateSpinner
2
s
infinite
linear
;
-webkit-animation
:
rotateSpinner
1.5
s
infinite
linear
;
animation
:
rotateSpinner
2
s
infinite
linear
;
animation
:
rotateSpinner
1.5
s
infinite
linear
;
border
:
2
px
solid
#06f
;
border
:
3
px
solid
#06f
;
border-radius
:
50%
;
border-radius
:
50%
;
border-top-color
:
transparent
;
border-top-color
:
transparent
;
height
:
43px
;
height
:
43px
;
...
@@ -281,6 +292,7 @@
...
@@ -281,6 +292,7 @@
width
:
43px
width
:
43px
}
}
.adyen-checkout__spinner--small
{
.adyen-checkout__spinner--small
{
border-width
:
2px
;
height
:
16px
;
height
:
16px
;
width
:
16px
width
:
16px
}
}
...
@@ -322,15 +334,20 @@
...
@@ -322,15 +334,20 @@
position
:
absolute
position
:
absolute
}
}
.adyen-checkout__radio_group__label
{
.adyen-checkout__radio_group__label
{
color
:
inherit
;
display
:
block
;
display
:
block
;
font-size
:
.81em
;
font-size
:
.81em
;
font-weight
:
400
;
font-weight
:
400
;
line-height
:
16px
;
line-height
:
16px
;
margin-bottom
:
8px
;
margin-bottom
:
8px
;
overflow
:
visible
;
padding-bottom
:
0
;
padding-bottom
:
0
;
padding-left
:
24px
;
padding-left
:
24px
;
position
:
relative
position
:
relative
}
}
.adyen-checkout__label--focused
.adyen-checkout__radio_group__label
{
color
:
inherit
}
.adyen-checkout__radio_group__label
:before
{
.adyen-checkout__radio_group__label
:before
{
background-color
:
#fff
;
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
...
@@ -340,9 +357,14 @@
...
@@ -340,9 +357,14 @@
left
:
0
;
left
:
0
;
position
:
absolute
;
position
:
absolute
;
top
:
0
;
top
:
0
;
transition
:
border-color
.
3
s
ease-out
;
transition
:
border-color
.
2s
ease-out
,
box-shadow
.2
s
ease-out
;
width
:
16px
width
:
16px
}
}
.adyen-checkout__radio_group__label
:hover:before
{
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
;
cursor
:
pointer
}
.adyen-checkout__radio_group__label
:after
{
.adyen-checkout__radio_group__label
:after
{
-webkit-transform
:
scale
(
0
);
-webkit-transform
:
scale
(
0
);
background-color
:
#fff
;
background-color
:
#fff
;
...
@@ -356,9 +378,9 @@
...
@@ -356,9 +378,9 @@
position
:
absolute
;
position
:
absolute
;
top
:
5px
;
top
:
5px
;
transform
:
scale
(
0
);
transform
:
scale
(
0
);
transition
:
-webkit-transform
.
3
s
ease-out
;
transition
:
-webkit-transform
.
2
s
ease-out
;
transition
:
transform
.
3
s
ease-out
;
transition
:
transform
.
2
s
ease-out
;
transition
:
transform
.
3s
ease-out
,
-webkit-transform
.3
s
ease-out
;
transition
:
transform
.
2s
ease-out
,
-webkit-transform
.2
s
ease-out
;
width
:
6px
width
:
6px
}
}
.adyen-checkout__radio_group__label
:hover
{
.adyen-checkout__radio_group__label
:hover
{
...
@@ -368,13 +390,15 @@
...
@@ -368,13 +390,15 @@
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__label--selected
{
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__label--selected
{
background-color
:
#06f
;
background-color
:
#06f
;
border
:
0
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
transition
:
all
.2s
ease-out
transition
:
all
.3s
ease-out
}
}
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:after
{
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:after
{
-webkit-transform
:
scale
(
1
);
-webkit-transform
:
scale
(
1
);
transform
:
scale
(
1
)
transform
:
scale
(
1
)
}
}
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:hover:before
,
.adyen-checkout__radio_group__input
:checked:active
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__input
:checked:focus
+
.adyen-checkout__radio_group__label
:before
{
box-shadow
:
0
0
0
2px
rgba
(
0
,
102
,
255
,
.4
)
}
.adyen-checkout__radio_group__label.adyen-checkout__radio_group__label--invalid
:before
{
.adyen-checkout__radio_group__label.adyen-checkout__radio_group__label--invalid
:before
{
border
:
1px
solid
#d10244
border
:
1px
solid
#d10244
}
}
...
@@ -442,6 +466,14 @@
...
@@ -442,6 +466,14 @@
background-color
:
#06f
;
background-color
:
#06f
;
border
:
1px
solid
#06f
border
:
1px
solid
#06f
}
}
.adyen-checkout__checkbox__input
:hover:not
(
:focus
)+
.adyen-checkout__checkbox__label
:after
{
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
}
.adyen-checkout__checkbox__input
:checked:hover
+
.adyen-checkout__checkbox__label
:after
{
border-color
:
#06f
;
box-shadow
:
0
0
0
2px
rgba
(
0
,
102
,
255
,
.4
)
}
.adyen-checkout__checkbox__input
:focus
+
span
:after
{
.adyen-checkout__checkbox__input
:focus
+
span
:after
{
border
:
1px
solid
#06f
;
border
:
1px
solid
#06f
;
box-shadow
:
0
0
0
2px
#99c2ff
box-shadow
:
0
0
0
2px
#99c2ff
...
@@ -449,15 +481,12 @@
...
@@ -449,15 +481,12 @@
.adyen-checkout__dropdown
{
.adyen-checkout__dropdown
{
font-size
:
1em
;
font-size
:
1em
;
max-width
:
100%
;
max-width
:
100%
;
width
:
200px
width
:
100%
}
.adyen-checkout__dropdown--small
{
width
:
130px
}
.adyen-checkout__dropdown--large
{
width
:
300px
}
}
.adyen-checkout__dropdown__button
{
.adyen-checkout__dropdown__button
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#fff
;
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
border-radius
:
6px
;
...
@@ -465,8 +494,9 @@
...
@@ -465,8 +494,9 @@
height
:
40px
;
height
:
40px
;
line-height
:
20px
;
line-height
:
20px
;
outline
:
0
;
outline
:
0
;
padding
:
9px
2
0px
9px
8
px
;
padding
:
9px
2
4px
9px
12
px
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
user-select
:
none
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__dropdown__button__icon
{
.adyen-checkout__dropdown__button__icon
{
...
@@ -494,15 +524,19 @@
...
@@ -494,15 +524,19 @@
.adyen-checkout__dropdown__list
{
.adyen-checkout__dropdown__list
{
border-radius
:
6px
;
border-radius
:
6px
;
box-shadow
:
0
2px
7px
rgba
(
0
,
15
,
45
,
.3
);
box-shadow
:
0
2px
7px
rgba
(
0
,
15
,
45
,
.3
);
margin-top
:
2px
;
max-height
:
375px
;
max-height
:
360px
;
z-index
:
2
z-index
:
2
}
}
.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active
{
margin-top
:
2px
}
.adyen-checkout__dropdown__element
{
.adyen-checkout__dropdown__element
{
-moz-user-select
:
none
;
-ms-hyphens
:
auto
;
-ms-hyphens
:
auto
;
-ms-user-select
:
none
;
-webkit-hyphens
:
auto
;
-webkit-hyphens
:
auto
;
-webkit-user-select
:
none
;
border
:
1px
solid
transparent
;
border
:
1px
solid
transparent
;
border-bottom-color
:
#e6e9eb
;
cursor
:
pointer
;
cursor
:
pointer
;
font-size
:
.81em
;
font-size
:
.81em
;
hyphens
:
auto
;
hyphens
:
auto
;
...
@@ -510,6 +544,7 @@
...
@@ -510,6 +544,7 @@
outline
:
0
;
outline
:
0
;
padding
:
8px
;
padding
:
8px
;
transition
:
background
.2s
ease-out
,
border-color
.2s
ease-out
;
transition
:
background
.2s
ease-out
,
border-color
.2s
ease-out
;
user-select
:
none
;
word-break
:
break-word
word-break
:
break-word
}
}
.adyen-checkout__dropdown__element
:last-child
{
.adyen-checkout__dropdown__element
:last-child
{
...
@@ -518,10 +553,6 @@
...
@@ -518,10 +553,6 @@
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
,
.adyen-checkout__dropdown__element
:hover
{
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
,
.adyen-checkout__dropdown__element
:hover
{
background
:
rgba
(
230
,
233
,
235
,
.6
)
background
:
rgba
(
230
,
233
,
235
,
.6
)
}
}
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
{
border-bottom-color
:
#06f
;
border-top-color
:
#06f
}
.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active
{
.adyen-checkout__dropdown__element.adyen-checkout__dropdown__element--active
{
background
:
rgba
(
0
,
102
,
255
,
.1
)
background
:
rgba
(
0
,
102
,
255
,
.1
)
}
}
...
@@ -538,8 +569,16 @@
...
@@ -538,8 +569,16 @@
right
:
32px
right
:
32px
}
}
.adyen-checkout__select-list
{
.adyen-checkout__select-list
{
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
margin
:
0
;
margin
:
0
;
padding
:
0
max-height
:
140px
;
min-height
:
100px
;
min-width
:
300px
;
overflow-y
:
scroll
;
padding
:
0
;
width
:
100%
}
}
.adyen-checkout__select-list__item
{
.adyen-checkout__select-list__item
{
background
:
#fff
;
background
:
#fff
;
...
@@ -566,6 +605,18 @@
...
@@ -566,6 +605,18 @@
.adyen-checkout__select-list__item--selected
:active
,
.adyen-checkout__select-list__item--selected
:focus
,
.adyen-checkout__select-list__item--selected
:hover
{
.adyen-checkout__select-list__item--selected
:active
,
.adyen-checkout__select-list__item--selected
:focus
,
.adyen-checkout__select-list__item--selected
:hover
{
background
:
rgba
(
0
,
102
,
255
,
.15
)
background
:
rgba
(
0
,
102
,
255
,
.15
)
}
}
.adyen-checkout__field-wrapper
{
display
:
flex
}
.adyen-checkout__field--50
{
width
:
50%
}
.adyen-checkout__field--50
:first-child
{
margin-right
:
8px
}
.adyen-checkout__field--50
:nth-child
(
2
)
{
margin-left
:
8px
}
.adyen-checkout__input
{
.adyen-checkout__input
{
background
:
#fff
;
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
...
@@ -579,13 +630,23 @@
...
@@ -579,13 +630,23 @@
padding
:
5px
8px
;
padding
:
5px
8px
;
position
:
relative
;
position
:
relative
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
transition
:
border
.2s
ease-out
,
box-shadow
.2s
ease-out
;
width
:
200px
width
:
100%
}
.adyen-checkout__input
:hover
{
border-color
:
#99a3ad
}
}
.adyen-checkout__input
:required
{
.adyen-checkout__input
:required
{
box-shadow
:
none
box-shadow
:
none
}
}
.adyen-checkout__input--disabled
,
.adyen-checkout__input
[
readonly
]
{
background
:
#e6e9eb
;
border-color
:
#e6e9eb
}
.adyen-checkout__input--disabled
:hover
{
border-color
:
#e6e9eb
}
.adyen-checkout__input-wrapper
{
.adyen-checkout__input-wrapper
{
display
:
inline-
block
;
display
:
block
;
position
:
relative
position
:
relative
}
}
.adyen-checkout__input-wrapper--block
{
.adyen-checkout__input-wrapper--block
{
...
@@ -606,20 +667,15 @@
...
@@ -606,20 +667,15 @@
.adyen-checkout-input__inline-validation--invalid
{
.adyen-checkout-input__inline-validation--invalid
{
color
:
#d10244
color
:
#d10244
}
}
.adyen-checkout__input--small
{
width
:
134px
}
.adyen-checkout__input--large
{
width
:
300px
}
.adyen-checkout__input--invalid
{
.adyen-checkout__input--invalid
{
border-color
:
#d10244
border-color
:
#d10244
}
}
.adyen-checkout__input--valid
{
.adyen-checkout__input--valid
{
border-bottom-color
:
#0abf53
border-bottom-color
:
#0abf53
}
}
.adyen-checkout__input--error
{
.adyen-checkout__input--error
,
.adyen-checkout__input--error
:hover
,
.adyen-checkout__input--invalid
,
.adyen-checkout__input--invalid
:hover
{
border-color
:
#d10244
border-color
:
#d10244
;
color
:
#d10244
}
}
.adyen-checkout__input
::-webkit-input-placeholder
{
.adyen-checkout__input
::-webkit-input-placeholder
{
color
:
#b9c4c9
;
color
:
#b9c4c9
;
...
@@ -637,22 +693,27 @@
...
@@ -637,22 +693,27 @@
color
:
#b9c4c9
;
color
:
#b9c4c9
;
font-weight
:
200
font-weight
:
200
}
}
.adyen-checkout__input--focus
,
.adyen-checkout__input
:active
,
.adyen-checkout__input
:focus
{
.adyen-checkout__input--focus
,
.adyen-checkout__input
--focus
:hover
,
.adyen-checkout__input
:active
,
.adyen-checkout__input
:active:hover
,
.adyen-checkout__input
:focus
,
.adyen-checkout__input
:focus:hover
{
border
:
1px
solid
#06f
;
border
:
1px
solid
#06f
;
box-shadow
:
0
0
0
2px
#99c2ff
box-shadow
:
0
0
0
2px
#99c2ff
}
}
.adyen-checkout__input
[
readonly
]
{
.adyen-checkout__input
[
readonly
]
,
.adyen-checkout__input
[
readonly
]
:hover
{
background-color
:
#e6e9eb
;
background-color
:
#e6e9eb
;
border-color
:
transparent
;
border-color
:
transparent
;
color
:
#687282
;
color
:
#687282
;
cursor
:
default
cursor
:
default
}
}
.adyen-checkout__fieldset
{
.adyen-checkout__fieldset
{
color
:
#687282
;
display
:
block
;
display
:
block
;
padding-bottom
:
30
px
;
padding-bottom
:
8
px
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__fieldset
:last-of-type
{
padding-bottom
:
0
}
.adyen-checkout__fieldset
+
.adyen-checkout__fieldset
{
margin-top
:
16px
}
.adyen-checkout__fieldset__title
{
.adyen-checkout__fieldset__title
{
color
:
#687282
;
color
:
#687282
;
display
:
block
;
display
:
block
;
...
@@ -660,9 +721,27 @@
...
@@ -660,9 +721,27 @@
font-weight
:
700
;
font-weight
:
700
;
letter-spacing
:
1px
;
letter-spacing
:
1px
;
margin
:
0
;
margin
:
0
;
padding
:
0
0
20
px
;
padding
:
0
0
8
px
;
text-transform
:
uppercase
text-transform
:
uppercase
}
}
.adyen-checkout__field-group
,
.adyen-checkout__fieldset__fields
{
display
:
flex
;
flex-wrap
:
wrap
;
justify-content
:
space-between
;
width
:
100%
}
.adyen-checkout__field-group
:last-of-type
.adyen-checkout__field
{
margin-bottom
:
0
}
.adyen-checkout__field--col-70
{
width
:
calc
(
70%
-
8px
)
}
.adyen-checkout__field--col-30
{
width
:
calc
(
30%
-
8px
)
}
.adyen-checkout__field--col-50
{
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__fieldset--readonly
{
.adyen-checkout__fieldset--readonly
{
color
:
#00112c
;
color
:
#00112c
;
font-size
:
.81em
;
font-size
:
.81em
;
...
@@ -673,94 +752,63 @@
...
@@ -673,94 +752,63 @@
max-width
:
540px
max-width
:
540px
}
}
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
{
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
{
margin
:
0
0
20px
margin
:
0
0
8px
}
.adyen-checkout__link--more-information
{
font-size
:
.81em
}
}
.adyen-checkout__applepay__button
{
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
:only-of-type
{
height
:
40px
;
margin-bottom
:
0
width
:
240px
}
}
.adyen-checkout__
card-input__form
{
.adyen-checkout__
open-invoice
.adyen-checkout__checkbox--consent-checkbox
{
transition
:
opacity
.25s
ease-out
margin
:
0
}
}
.adyen-checkout__
card__exp-cvc
{
.adyen-checkout__
open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
{
display
:
flex
display
:
flex
}
}
.adyen-checkout__card__cardNumber
{
.adyen-checkout__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
>
label
{
max-width
:
400px
margin-right
:
16px
}
.adyen-checkout__card__cardNumber__input
{
padding
:
5px
8px
5px
57px
}
.adyen-checkout__card__exp-date__input--oneclick
{
font-weight
:
400
;
height
:
40px
;
line-height
:
40px
}
}
.adyen-checkout__card__exp-cvc
.adyen-checkout__field
{
.adyen-checkout__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__label--focused
.adyen-checkout__label__text
,
.adyen-checkout__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__label__text
{
margin-bottom
:
0
;
color
:
#00112c
margin-right
:
32px
}
.adyen-checkout__card-input
.adyen-checkout__store-details
{
margin-top
:
16px
}
.adyen-checkout__giropay__results
{
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
max-height
:
140px
;
min-height
:
100px
;
min-width
:
300px
;
overflow-y
:
scroll
;
width
:
100%
}
}
.adyen-checkout__giropay__no-results
{
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--billingAddress
{
color
:
#687282
;
padding-bottom
:
8px
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__giropay__placeholder
{
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--deliveryAddress
{
color
:
#b9c4c9
;
margin-top
:
24px
;
display
:
block
;
padding-bottom
:
8px
font-weight
:
200
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__giropay__loading
{
.adyen-checkout__open-invoice
.adyen-checkout__input--separateDeliveryAddress
{
display
:
block
;
margin-bottom
:
0
min-height
:
100px
}
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
.adyen-checkout__open-invoice
.adyen-checkout__field--dateOfBirth
{
display
:
inline-block
;
width
:
calc
(
50%
-
8px
)
vertical-align
:
middle
}
}
.adyen-checkout__giropay__loading-text
{
.adyen-checkout__open-invoice
.adyen-checkout__field--country
,
.adyen-checkout__open-invoice
.adyen-checkout__field--street
{
color
:
#687282
;
width
:
calc
(
70%
-
8px
)
font-size
:
.81em
;
line-height
:
16px
;
vertical-align
:
middle
}
}
.adyen-checkout__giropay__error
{
.adyen-checkout__open-invoice
.adyen-checkout__field--houseNumberOrName
,
.adyen-checkout__open-invoice
.adyen-checkout__field--postalCode
{
color
:
#d10244
;
width
:
calc
(
30%
-
8px
)
font-size
:
.81em
}
}
.adyen-checkout__button
{
.adyen-checkout__button
{
background
:
#00112c
;
background
:
#00112c
;
border
:
0
;
border
:
0
;
border-radius
:
6px
;
border-radius
:
6px
;
box-shadow
:
0
3px
4px
rgba
(
0
,
15
,
45
,
.2
);
color
:
#fff
;
color
:
#fff
;
cursor
:
pointer
;
cursor
:
pointer
;
font-size
:
1em
;
font-size
:
1em
;
font-weight
:
7
00
;
font-weight
:
5
00
;
height
:
48px
;
height
:
48px
;
margin
:
0
;
margin
:
0
;
padding
:
15px
;
padding
:
15px
;
transition
:
background
.3s
ease-out
;
text-decoration
:
none
;
transition
:
background
.3s
ease-out
,
box-shadow
.3s
ease-out
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__button--pay
{
margin-top
:
24px
}
.adyen-checkout__button--standalone
{
margin-top
:
0
}
.adyen-checkout__button
:disabled
{
.adyen-checkout__button
:disabled
{
-moz-user-select
:
all
;
-moz-user-select
:
all
;
-ms-user-select
:
all
;
-ms-user-select
:
all
;
...
@@ -770,176 +818,255 @@
...
@@ -770,176 +818,255 @@
cursor
:
not-allowed
;
cursor
:
not-allowed
;
user-select
:
all
user-select
:
all
}
}
.adyen-checkout__button
:focus
{
box-shadow
:
0
0
0
2px
#99c2ff
;
outline
:
0
}
.adyen-checkout__button
:hover
{
background
:
#1c3045
;
box-shadow
:
0
0
,
0
2px
4px
-1px
rgba
(
0
,
0
,
0
,
.2
),
0
4px
5px
0
rgba
(
0
,
0
,
0
,
.14
)
}
.adyen-checkout__button
:active
{
background
:
#3a4a5c
}
.adyen-checkout__button
:hover:focus
{
box-shadow
:
0
0
0
2px
#99c2ff
,
0
3px
4px
rgba
(
0
,
15
,
45
,
.2
)
}
.adyen-checkout__button--loading
{
.adyen-checkout__button--loading
{
-moz-user-select
:
none
;
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#687282
;
background
:
#687282
;
box-shadow
:
none
;
box-shadow
:
none
;
outline
:
0
;
pointer-events
:
none
;
pointer-events
:
none
;
user-select
:
none
user-select
:
none
}
}
.adyen-checkout__button
.adyen-checkout__spinner
{
.adyen-checkout__button
.adyen-checkout__spinner
{
border-color
:
transparent
#fff
#fff
;
border-color
:
transparent
#fff
#fff
border-width
:
3px
}
}
.adyen-checkout__button__content
{
.adyen-checkout__button__content
{
align-items
:
center
;
align-items
:
center
;
display
:
flex
;
display
:
flex
;
justify-content
:
center
justify-content
:
center
}
}
.adyen-checkout__phone-input
{
.adyen-checkout__button__icon
{
display
:
flex
margin-right
:
12px
}
.adyen-checkout__phone-input__prefix
{
margin-bottom
:
0
;
margin-right
:
.5em
}
.adyen-checkout__input--phone-number
{
margin-bottom
:
0
}
}
.adyen-checkout__iban-input__number
{
.adyen-checkout__button__text
{
padding
:
5px
36px
5px
8px
;
display
:
block
;
text-transform
:
uppercase
justify-content
:
center
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
}
.adyen-checkout__threeds2__challenge
,
.adyen-checkout__threeds2__challenge-container
{
.adyen-checkout__button.adyen-checkout__button--inline
{
background-color
:
transparent
;
box-sizing
:
border-box
;
display
:
block
;
display
:
block
;
overflow
:
auto
;
font-size
:
.81em
;
width
:
100%
height
:
auto
;
padding
:
10px
8px
;
width
:
auto
}
}
.adyen-checkout__threeds2__challenge-container--01
{
.adyen-checkout__button.adyen-checkout__button--secondary
{
height
:
400px
;
background
:
rgba
(
0
,
102
,
255
,
.1
);
width
:
250px
border
:
1px
solid
transparent
;
color
:
#06f
;
padding
:
10px
12px
}
}
.adyen-checkout__
threeds2__challenge-container--02
{
.adyen-checkout__
button.adyen-checkout__button--secondary
:hover
{
height
:
400px
;
background
:
rgba
(
0
,
102
,
255
,
.2
)
;
width
:
390px
box-shadow
:
none
}
}
.adyen-checkout__
threeds2__challenge-container--03
{
.adyen-checkout__
button.adyen-checkout__button--secondary
:active
,
.adyen-checkout__button.adyen-checkout__button--secondary
:active:hover
{
height
:
600px
;
background
:
rgba
(
0
,
102
,
255
,
.3
)
;
width
:
500px
box-shadow
:
none
}
}
.adyen-checkout__
threeds2__challenge-container--04
{
.adyen-checkout__
button.adyen-checkout__button--completed
,
.adyen-checkout__button.adyen-checkout__button--completed
:active
,
.adyen-checkout__button.adyen-checkout__button--completed
:active:hover
,
.adyen-checkout__button.adyen-checkout__button--completed
:hover
{
height
:
400px
;
background
:
#0abf53
;
width
:
600px
color
:
#fff
}
}
.adyen-checkout__
threeds2_challenge-container--05
{
.adyen-checkout__
button.adyen-checkout__button--completed
.adyen-checkout__button__icon
{
height
:
100%
;
-webkit-filter
:
brightness
(
0
)
invert
(
1
)
;
width
:
100%
filter
:
brightness
(
0
)
invert
(
1
)
}
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
{
.adyen-checkout__applepay__button
{
overflow
:
hidden
;
height
:
40px
;
padding-top
:
56.25%
;
width
:
240px
position
:
relative
}
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
.adyen-checkout__iframe--threeDSIframe
{
.adyen-checkout__dropin
.adyen-checkout__applepay__button
{
border
:
0
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__qr-loader
{
.adyen-checkout__card-input__form
{
background
:
#fff
;
transition
:
opacity
.25s
ease-out
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
padding
:
40px
;
text-align
:
center
}
}
.adyen-checkout__qr-loader--app
{
.adyen-checkout__card__cardNumber
{
border
:
0
;
max-width
:
400px
border-radius
:
0
;
padding
:
0
}
}
.adyen-checkout__qr-loader__brand-logo
{
.adyen-checkout__card__cardNumber__input
{
max-height
:
50px
;
padding
:
5px
8px
width
:
110px
}
}
.adyen-checkout__qr-loader__subtitle
{
.adyen-checkout__card__exp-date__input--oneclick
{
margin-top
:
32px
font-weight
:
400
;
line-height
:
30px
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
}
.adyen-checkout__qr-loader__payment_amount
,
.adyen-checkout__qr-loader__subtitle
{
.adyen-checkout__card__holderName
,
.adyen-checkout__field--expiryDate
,
.adyen-checkout__field--storedCard
{
color
:
#00112c
;
margin-bottom
:
0
font-size
:
1em
;
line-height
:
19px
}
}
.adyen-checkout__
qr-loader__payment_amount
{
.adyen-checkout__
card__holderName
,
.adyen-checkout__store-details
{
font-weight
:
700
margin-top
:
16px
}
}
.adyen-checkout__qr-loader__progress
{
.adyen-checkout__field--cardNumber
.adyen-checkout__input--error
.adyen-checkout__card__cardNumber__brandIcon
{
background
:
#d4d9db
;
display
:
none
border-radius
:
25px
;
height
:
4px
;
margin
:
32px
auto
12px
;
padding-right
:
3%
;
width
:
152px
}
}
.adyen-checkout__qr-loader__percentage
{
.adyen-checkout__field--cardNumber
.adyen-checkout__input--valid
:not
(
.adyen-checkout__card__cardNumber__input--noBrand
)+
.adyen-checkout-input__inline-validation--valid
{
background
:
#06f
;
display
:
none
border-radius
:
25px
;
display
:
block
;
height
:
100%
}
}
.adyen-checkout__
qr-loader__countdown
{
.adyen-checkout__
giropay__no-results
{
color
:
#687282
;
color
:
#687282
;
font-size
:
.81em
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__qr-loader
>
.adyen-checkout__spinner__wrapper
{
.adyen-checkout__giropay__placeholder
{
margin
:
60px
0
color
:
#b9c4c9
;
display
:
block
;
font-weight
:
200
;
padding
:
0
0
0
2px
}
}
.adyen-checkout__qr-loader__separator__label
{
.adyen-checkout__giropay__loading
{
background
:
#fff
;
display
:
block
;
border-radius
:
100%
;
min-height
:
100px
color
:
#687282
;
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
display
:
inline-block
;
display
:
inline-block
;
height
:
34px
;
vertical-align
:
middle
line-height
:
34px
;
position
:
relative
;
width
:
34px
;
z-index
:
1
}
}
.adyen-checkout__
qr-loader__separator__line
{
.adyen-checkout__
giropay__loading-text
{
-webkit-transform
:
translateY
(
-17px
)
;
color
:
#687282
;
border-top
:
1px
solid
#d4d9db
;
font-size
:
.81em
;
display
:
block
;
line-height
:
16px
;
transform
:
translateY
(
-17px
)
vertical-align
:
middle
}
}
.adyen-checkout__button.adyen-checkout__button--qr-loader
{
.adyen-checkout__giropay__error
{
display
:
block
;
color
:
#d10244
;
text-decoration
:
none
font-size
:
.81em
}
.adyen-checkout__dropin
.gpay-button.long
{
height
:
48px
;
padding
:
15px
24px
13px
;
transition
:
background-color
.3s
ease-out
,
box-shadow
.3s
ease-out
;
width
:
100%
}
.adyen-checkout__field--issuer-list
{
margin-bottom
:
0
}
.adyen-checkout__econtext-input__field
{
display
:
flex
;
flex-wrap
:
wrap
}
.adyen-checkout__econtext-input__field
.adyen-checkout__field--firstName
,
.adyen-checkout__econtext-input__field
.adyen-checkout__field--lastName
{
max-width
:
100%
;
min-width
:
250px
;
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__econtext-input__field
.adyen-checkout__field--firstName
{
margin-right
:
16px
}
}
.adyen-checkout__voucher-result
{
.adyen-checkout__voucher-result
{
background
:
#fff
;
border-radius
:
12px
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
p
adding
:
20px
16px
56px
;
p
osition
:
relative
;
text-align
:
center
text-align
:
center
}
}
.adyen-checkout__voucher-result__bottom
,
.adyen-checkout__voucher-result__top
{
background
:
#fff
;
border
:
1px
solid
#d4d9db
}
.adyen-checkout__voucher-result__top
{
border-bottom
:
0
;
border-radius
:
12px
12px
0
0
;
padding
:
40px
0
24px
}
.adyen-checkout__voucher-result__bottom
{
border-radius
:
0
0
12px
12px
;
border-top
:
0
}
.adyen-checkout__voucher-result__separator
{
align-items
:
center
;
background
:
#fff
;
display
:
flex
;
height
:
13px
;
margin
:
0
auto
;
position
:
relative
;
width
:
calc
(
100%
-
14px
)
}
.adyen-checkout__voucher-result__separator
:after
,
.adyen-checkout__voucher-result__separator
:before
{
background-image
:
url
(
data
:
image
/
svg
+
xml
;
base64,PHN2ZyB3aWR0aD0iNyIgaGVpZ2h0PSIxMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBjbGlwLXBhdGg9InVybCgjY2xpcDApIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMGw1IDIgMS41IDRIN1YwSDB6bTAgMTNsNS0yIDEuNS00SDd2NkgweiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGQ9Ik02LjQyMyA2LjVDNi40MjMgMy4zMTIgMy43ODMuNzU2LjUuNTE4YzMuMzg2LjIzNiA2IDIuODU1IDYgNS45ODIgMCAzLjEyNy0yLjYxNCA1Ljc0Ni02IDUuOTgzdi0uMDAxYzMuMjg0LS4yMzcgNS45MjMtMi43OTQgNS45MjMtNS45ODJ6IiBzdHJva2U9IiNENEQ5REIiLz48cGF0aCBmaWxsPSIjRDREOURCIiBkPSJNMCAwaDF2MUgwek0wIDEyaDF2MUgweiIvPjwvZz48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAwIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDd2MTNIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4=)
}
.adyen-checkout__voucher-result__separator
:before
{
background-position
:
100%
;
background-repeat
:
no-repeat
;
content
:
""
;
height
:
13px
;
left
:
-7px
;
position
:
absolute
;
top
:
0
;
width
:
7px
}
.adyen-checkout__voucher-result__separator
:after
{
-webkit-transform
:
rotate
(
-180deg
);
background-position
:
100%
;
background-repeat
:
no-repeat
;
content
:
""
;
height
:
13px
;
position
:
absolute
;
right
:
-7px
;
top
:
0
;
transform
:
rotate
(
-180deg
);
width
:
7px
}
.adyen-checkout__voucher-result__separator__inner
{
border-top
:
1px
solid
#e6e9eb
;
width
:
100%
}
.adyen-checkout__voucher-result__image
{
.adyen-checkout__voucher-result__image
{
align-items
:
center
;
align-items
:
center
;
display
:
flex
;
display
:
flex
;
justify-content
:
center
;
justify-content
:
center
;
margin-bottom
:
16
px
;
margin-bottom
:
40
px
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__voucher-result__image__wrapper
{
.adyen-checkout__voucher-result__image__wrapper
{
display
:
inline-block
;
display
:
block
;
padding
:
8px
;
height
:
48px
;
width
:
120px
margin
:
0
24px
;
position
:
relative
}
.adyen-checkout__voucher-result__image__wrapper
:after
{
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
border-radius
:
3px
;
content
:
""
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
width
:
100%
}
}
.adyen-checkout__voucher-result__image__wrapper
:nth-child
(
2
)
{
.adyen-checkout__voucher-result__image__wrapper
:nth-child
(
2
)
:before
{
border-left
:
1px
solid
#d4d9db
border-left
:
1px
solid
#d4d9db
;
content
:
""
;
height
:
64px
;
left
:
-24.5px
;
position
:
absolute
;
top
:
-8px
;
width
:
1px
}
}
.adyen-checkout__voucher-result__image__brand
,
.adyen-checkout__voucher-result__image__issuer
{
.adyen-checkout__voucher-result__image__brand
,
.adyen-checkout__voucher-result__image__issuer
{
height
:
34px
border-radius
:
3px
;
}
height
:
48px
.adyen-checkout__voucher-result__image__brand
{
height
:
60px
}
}
.adyen-checkout__voucher-result__introduction
{
.adyen-checkout__voucher-result__introduction
{
color
:
#00112c
;
color
:
#00112c
;
...
@@ -971,52 +1098,67 @@
...
@@ -971,52 +1098,67 @@
display
:
block
;
display
:
block
;
font-weight
:
400
;
font-weight
:
400
;
left
:
0
;
left
:
0
;
line-height
:
19px
;
margin
:
0
auto
;
margin
:
0
auto
;
position
:
absolute
;
position
:
absolute
;
right
:
0
;
right
:
0
;
top
:
-
14
px
;
top
:
-
2
px
;
user-select
:
none
;
user-select
:
none
;
width
:
auto
width
:
auto
}
}
.adyen-checkout__voucher-result__code__label
:before
{
content
:
""
;
position
:
absolute
}
.adyen-checkout__voucher-result__code__label__text
{
.adyen-checkout__voucher-result__code__label__text
{
background
:
#fff
;
background
:
#fff
;
color
:
#00112c
;
color
:
#00112c
;
font-size
:
13px
;
font-size
:
13px
;
letter-spacing
:
normal
;
line-height
:
1
;
padding
:
0
8px
padding
:
0
8px
}
}
.adyen-checkout__voucher-result__code__barcode
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
display
:
block
;
height
:
56px
;
margin
:
0
auto
8px
;
max-width
:
100%
;
user-select
:
none
}
.adyen-checkout__voucher-result__code
{
.adyen-checkout__voucher-result__code
{
-moz-user-select
:
all
;
-moz-user-select
:
all
;
-ms-user-select
:
all
;
-ms-user-select
:
all
;
-webkit-user-select
:
all
;
-webkit-user-select
:
all
;
border
:
1px
solid
#e6e9eb
;
border-width
:
1px
0
;
border-radius
:
6px
;
color
:
#00112c
;
color
:
#00112c
;
display
:
inline-block
;
display
:
inline-block
;
font-size
:
1.5em
;
font-size
:
1.5em
;
font-weight
:
700
;
font-weight
:
700
;
letter-spacing
:
1px
;
letter-spacing
:
1px
;
line-height
:
19px
;
line-height
:
1.2
;
margin
:
20px
auto
16px
;
margin
:
0
auto
;
max-width
:
100%
;
padding
:
16px
48px
;
min-width
:
200px
;
padding
:
28px
48px
24px
;
position
:
relative
;
position
:
relative
;
text-align
:
center
;
text-align
:
center
;
user-select
:
all
;
user-select
:
all
;
width
:
300px
width
:
100%
;
word-break
:
break-word
}
}
.adyen-checkout__voucher-result__details
{
.adyen-checkout__voucher-result__details
{
list-style
:
none
;
list-style
:
none
;
margin
:
8px
auto
0
;
margin
:
-1px
auto
0
;
max-width
:
300px
;
padding
:
0
padding
:
0
}
}
.adyen-checkout__voucher-result__details__item
{
.adyen-checkout__voucher-result__details__item
{
border-top
:
1px
solid
#e6e9eb
;
color
:
#00112c
;
color
:
#00112c
;
display
:
flex
;
display
:
flex
;
font-size
:
.81em
;
font-size
:
.81em
;
justify-content
:
space-between
;
justify-content
:
space-between
;
margin-bottom
:
16
px
;
padding
:
16px
24
px
;
word-break
:
break-word
word-break
:
break-word
}
}
.adyen-checkout__voucher-result__details__item
:last-child
{
.adyen-checkout__voucher-result__details__item
:last-child
{
...
@@ -1031,9 +1173,189 @@
...
@@ -1031,9 +1173,189 @@
max-width
:
50%
;
max-width
:
50%
;
text-align
:
right
text-align
:
right
}
}
.adyen-checkout__payment-method
{
.adyen-checkout__voucher-result__actions
{
align-items
:
center
;
display
:
flex
;
justify-content
:
center
;
list-style
:
none
;
margin
:
0
auto
32px
;
max-width
:
100%
;
min-width
:
200px
;
padding
:
0
;
width
:
300px
}
.adyen-checkout__voucher-result__actions__item
{
margin
:
0
4px
}
.adyen-checkout__link--more-information
{
display
:
block
;
font-size
:
.81em
;
font-weight
:
400
;
margin
:
16px
0
;
text-align
:
center
}
.adyen-checkout__phone-input__container
{
display
:
flex
}
.adyen-checkout__phone-input__prefix
{
margin-bottom
:
0
;
margin-right
:
.5em
;
width
:
30%
}
.adyen-checkout__input--phone-number
{
margin-bottom
:
0
;
width
:
70%
}
.adyen-checkout__iban-input__number
{
padding
:
5px
36px
5px
8px
;
text-transform
:
uppercase
}
.adyen-checkout__threeds2__challenge
,
.adyen-checkout__threeds2__challenge-container
{
background-color
:
transparent
;
box-sizing
:
border-box
;
display
:
block
;
overflow
:
auto
;
width
:
100%
}
.adyen-checkout__threeds2__challenge-container--01
{
height
:
400px
;
width
:
250px
}
.adyen-checkout__threeds2__challenge-container--02
{
height
:
400px
;
width
:
390px
}
.adyen-checkout__threeds2__challenge-container--03
{
height
:
600px
;
width
:
500px
}
.adyen-checkout__threeds2__challenge-container--04
{
height
:
400px
;
width
:
600px
}
.adyen-checkout__threeds2_challenge-container--05
{
height
:
100%
;
width
:
100%
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
{
overflow
:
hidden
;
padding-top
:
56.25%
;
position
:
relative
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
.adyen-checkout__iframe--threeDSIframe
{
border
:
0
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
width
:
100%
}
.adyen-checkout__qr-loader
{
background
:
#fff
;
background
:
#fff
;
border
:
1px
solid
#d4d9db
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
padding
:
40px
;
text-align
:
center
}
.adyen-checkout__qr-loader--app
{
border
:
0
;
border-radius
:
0
;
padding
:
0
}
.adyen-checkout__qr-loader__brand-logo
{
max-height
:
50px
;
width
:
110px
}
.adyen-checkout__qr-loader__subtitle
{
margin-top
:
32px
}
.adyen-checkout__qr-loader__subtitle--result
{
margin-bottom
:
32px
}
.adyen-checkout__qr-loader__payment_amount
,
.adyen-checkout__qr-loader__subtitle
{
color
:
#00112c
;
font-size
:
1em
;
line-height
:
19px
}
.adyen-checkout__qr-loader__icon
{
height
:
88px
;
width
:
88px
}
.adyen-checkout__qr-loader__icon--result
{
margin-bottom
:
100px
}
.adyen-checkout__qr-loader__payment_amount
{
font-weight
:
700
}
.adyen-checkout__qr-loader__progress
{
background
:
#d4d9db
;
border-radius
:
24px
;
height
:
4px
;
margin
:
32px
auto
12px
;
padding-right
:
3%
;
width
:
152px
}
.adyen-checkout__qr-loader__percentage
{
background
:
#06f
;
border-radius
:
24px
;
display
:
block
;
height
:
100%
}
.adyen-checkout__qr-loader__countdown
{
color
:
#687282
;
font-size
:
.81em
}
.adyen-checkout__qr-loader
>
.adyen-checkout__spinner__wrapper
{
margin
:
60px
0
}
.adyen-checkout__qr-loader__separator__label
{
background
:
#fff
;
border-radius
:
50%
;
color
:
#687282
;
display
:
inline-block
;
height
:
34px
;
line-height
:
34px
;
position
:
relative
;
width
:
34px
;
z-index
:
1
}
.adyen-checkout__qr-loader__separator__line
{
-webkit-transform
:
translateY
(
-17px
);
border-top
:
1px
solid
#d4d9db
;
display
:
block
;
transform
:
translateY
(
-17px
)
}
.adyen-checkout__button.adyen-checkout__button--qr-loader
{
display
:
block
;
text-decoration
:
none
}
.adyen-checkout__doku-input__field
{
display
:
flex
;
flex-wrap
:
wrap
}
.adyen-checkout__doku-input__field
.adyen-checkout__field--firstName
,
.adyen-checkout__doku-input__field
.adyen-checkout__field--lastName
{
max-width
:
100%
;
min-width
:
250px
;
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__doku-input__field
.adyen-checkout__field--firstName
{
margin-right
:
16px
}
.adyen-checkout__voucher-result--boletobancario
.adyen-checkout__voucher-result__code
{
font-size
:
.81em
;
line-height
:
19px
;
padding
:
24px
;
word-break
:
break-all
}
.adyen-checkout__voucher-result--oxxo
.adyen-checkout__voucher-result__code
{
font-size
:
.81em
;
line-height
:
19px
;
padding
:
24px
;
word-break
:
break-all
}
.adyen-checkout__payment-method
{
background
:
#fff
;
border
:
1px
solid
#e6e9eb
;
cursor
:
pointer
;
cursor
:
pointer
;
margin-top
:
-1px
;
margin-top
:
-1px
;
position
:
relative
;
position
:
relative
;
...
@@ -1044,13 +1366,13 @@
...
@@ -1044,13 +1366,13 @@
outline
:
0
outline
:
0
}
}
.adyen-checkout__payment-method--selected
+
.adyen-checkout__payment-method
,
.adyen-checkout__payment-method
:first-child
{
.adyen-checkout__payment-method--selected
+
.adyen-checkout__payment-method
,
.adyen-checkout__payment-method
:first-child
{
border-top-left-radius
:
6
px
;
border-top-left-radius
:
12
px
;
border-top-right-radius
:
6
px
;
border-top-right-radius
:
12
px
;
margin-top
:
0
margin-top
:
0
}
}
.adyen-checkout__payment-method--next-selected
,
.adyen-checkout__payment-method
:last-child
{
.adyen-checkout__payment-method--next-selected
,
.adyen-checkout__payment-method
:last-child
{
border-bottom-left-radius
:
6
px
;
border-bottom-left-radius
:
12
px
;
border-bottom-right-radius
:
6
px
;
border-bottom-right-radius
:
12
px
;
margin-bottom
:
0
margin-bottom
:
0
}
}
.adyen-checkout__payment-method--loading
{
.adyen-checkout__payment-method--loading
{
...
@@ -1060,31 +1382,51 @@
...
@@ -1060,31 +1382,51 @@
opacity
:
.9
opacity
:
.9
}
}
.adyen-checkout__payment-method--disabling
{
.adyen-checkout__payment-method--disabling
{
opacity
:
.
5
opacity
:
.
3
}
}
.adyen-checkout__payment-method__header
{
.adyen-checkout__payment-method__header
{
align-items
:
center
;
align-items
:
center
;
color
:
#00112c
;
color
:
#00112c
;
display
:
flex
;
display
:
flex
;
flex-wrap
:
nowrap
;
font-size
:
1em
;
font-size
:
1em
;
font-weight
:
400
;
font-weight
:
400
;
padding
:
16px
;
justify-content
:
space-between
;
padding
:
16px
16px
16px
48px
;
position
:
relative
;
position
:
relative
;
transition
:
background
.1s
ease-out
;
transition
:
background
.1s
ease-out
;
width
:
100%
width
:
100%
}
}
.adyen-checkout__payment-method--standalone
.adyen-checkout__payment-method__header
{
padding
:
16px
}
.adyen-checkout__payment-method__header__title
{
align-items
:
center
;
display
:
flex
;
flex-shrink
:
0
;
margin-right
:
16px
;
max-width
:
100%
}
.adyen-checkout__payment-method__surcharge
{
.adyen-checkout__payment-method__surcharge
{
color
:
#687282
;
color
:
#687282
;
margin-left
:
5px
margin-left
:
5px
}
}
.adyen-checkout__payment-method--selected
{
.adyen-checkout__payment-method--selected
{
background
:
#f7f8f9
;
background
:
#f7f8f9
;
border
:
1px
solid
#
d4d9d
b
;
border
:
1px
solid
#
e6e9e
b
;
border-radius
:
6
px
;
border-radius
:
12
px
;
cursor
:
default
;
cursor
:
default
;
margin
:
8px
0
;
margin
:
8px
0
;
transition
:
margin
.15s
cubic-bezier
(
.4
,
0
,
.2
,
1
)
0ms
,
opacity
.3s
ease-out
transition
:
margin
.15s
cubic-bezier
(
.4
,
0
,
.2
,
1
)
0ms
,
opacity
.3s
ease-out
}
}
.adyen-checkout__payment-method--selected
.adyen-checkout__payment-method__header
{
flex-wrap
:
wrap
}
.adyen-checkout__payment-method__name
{
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
.adyen-checkout__payment-method__name--selected
{
.adyen-checkout__payment-method__name--selected
{
font-weight
:
500
font-weight
:
500
}
}
...
@@ -1092,11 +1434,17 @@
...
@@ -1092,11 +1434,17 @@
padding
:
0
16px
padding
:
0
16px
}
}
.adyen-checkout__payment-method__details__content
{
.adyen-checkout__payment-method__details__content
{
margin
:
6px
0
22
px
margin
:
0
0
16
px
}
}
.adyen-checkout__payment-method__image__wrapper
{
.adyen-checkout__payment-method__image__wrapper
{
height
:
26px
;
height
:
26px
;
position
:
relative
opacity
:
0
;
position
:
relative
;
transition
:
opacity
.15s
ease-out
;
width
:
40px
}
.adyen-checkout__payment-method__image__wrapper--loaded
{
opacity
:
1
}
}
.adyen-checkout__payment-method__image__wrapper
:after
{
.adyen-checkout__payment-method__image__wrapper
:after
{
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
...
@@ -1111,12 +1459,47 @@
...
@@ -1111,12 +1459,47 @@
.adyen-checkout__payment-method__image
{
.adyen-checkout__payment-method__image
{
border-radius
:
3px
border-radius
:
3px
}
}
.adyen-checkout__payment-method__brands
{
display
:
flex
;
flex-basis
:
auto
;
flex-shrink
:
1
;
flex-wrap
:
wrap
;
height
:
16px
;
margin
:
4px
0
;
overflow
:
hidden
;
text-align
:
right
}
.adyen-checkout__payment-method--selected
.adyen-checkout__payment-method__brands
{
height
:
auto
;
overflow
:
visible
;
text-align
:
left
}
.adyen-checkout__payment-method__brands
.adyen-checkout__payment-method__image__wrapper
{
display
:
inline-block
;
height
:
16px
;
margin-right
:
4px
;
transition
:
opacity
.2s
ease-out
;
width
:
24px
}
.adyen-checkout__payment-method__brands
.adyen-checkout__payment-method__image__wrapper
:last-child
{
margin
:
0
}
.adyen-checkout__payment-method--selected
.adyen-checkout__payment-method__brands
.adyen-checkout__payment-method__image__wrapper
{
margin-bottom
:
4px
}
.adyen-checkout__payment-method__brands
img
{
height
:
16px
;
width
:
24px
}
.adyen-checkout__payment-method__image__wrapper--disabled
{
opacity
:
.25
}
.adyen-checkout__payment-method__disable-confirmation
{
.adyen-checkout__payment-method__disable-confirmation
{
align-items
:
center
;
align-items
:
center
;
background
:
#e6e9eb
;
background
:
#e6e9eb
;
color
:
#00112c
;
color
:
#00112c
;
display
:
flex
;
display
:
flex
;
font-size
:
.94
em
;
font-size
:
1
em
;
justify-content
:
space-between
;
justify-content
:
space-between
;
margin-bottom
:
10px
;
margin-bottom
:
10px
;
padding
:
8px
16px
padding
:
8px
16px
...
@@ -1147,18 +1530,19 @@
...
@@ -1147,18 +1530,19 @@
background-color
:
#fff
;
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
50%
;
border-radius
:
50%
;
box-shadow
:
inset
0
1px
3px
rgba
(
0
,
27
,
43
,
.15
)
;
height
:
16px
;
height
:
18
px
;
left
:
16
px
;
position
:
absolute
;
position
:
absolute
;
right
:
20px
;
transition
:
border-color
.2s
ease-out
,
box-shadow
.2s
ease-out
;
transition
:
border-color
.3s
ease-out
;
width
:
16px
width
:
18px
}
.adyen-checkout__payment-method--standalone
.adyen-checkout__payment-method__radio
{
display
:
none
}
}
.adyen-checkout__payment-method__radio
:after
{
.adyen-checkout__payment-method__radio
:after
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
0
);
-webkit-transform
:
translateY
(
-50%
)
scale
(
0
);
background-color
:
#fff
;
background-color
:
#fff
;
border-radius
:
50%
;
border-radius
:
50%
;
box-shadow
:
0
1px
1px
rgba
(
0
,
15
,
45
,
.25
);
content
:
""
;
content
:
""
;
display
:
block
;
display
:
block
;
height
:
6px
;
height
:
6px
;
...
@@ -1174,31 +1558,31 @@
...
@@ -1174,31 +1558,31 @@
width
:
6px
width
:
6px
}
}
.adyen-checkout__payment-method__radio
:hover
{
.adyen-checkout__payment-method__radio
:hover
{
border-color
:
#06f
;
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
;
cursor
:
pointer
cursor
:
pointer
}
}
.adyen-checkout__payment-method__radio--selected
{
.adyen-checkout__payment-method__radio--selected
{
background-color
:
#06f
;
background-color
:
#06f
;
border
:
0
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
transition
:
all
.3s
ease-out
transition
:
all
.3s
ease-out
}
}
.adyen-checkout__payment-method__radio--selected
:hover
{
box-shadow
:
0
0
0
2px
rgba
(
0
,
102
,
255
,
.4
)
}
.adyen-checkout__payment-method__radio--selected
:after
{
.adyen-checkout__payment-method__radio--selected
:after
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
1
);
-webkit-transform
:
translateY
(
-50%
)
scale
(
1
);
transform
:
translateY
(
-50%
)
scale
(
1
)
transform
:
translateY
(
-50%
)
scale
(
1
)
}
}
.adyen-checkout__button--pay
{
margin-bottom
:
16px
}
.adyen-checkout__status
{
.adyen-checkout__status
{
align-items
:
center
;
align-items
:
center
;
background-color
:
#fff
;
background-color
:
#fff
;
border
:
1px
solid
#d4d9db
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
border-radius
:
6px
;
color
:
#001
b2b
;
color
:
#001
12c
;
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
font-size
:
1
6px
;
font-size
:
1
em
;
height
:
350px
;
height
:
350px
;
justify-content
:
center
;
justify-content
:
center
;
margin
:
0
;
margin
:
0
;
...
@@ -1225,6 +1609,7 @@
...
@@ -1225,6 +1609,7 @@
.adyen-checkout__link
:hover
{
.adyen-checkout__link
:hover
{
text-decoration
:
underline
text-decoration
:
underline
}
}
/* Checkout component Adyen styling end */
/* Checkout component Adyen styling end */
/* never show the close button as this will result in errors */
/* never show the close button as this will result in errors */
...
...
view/frontend/web/js/model/threeds2.js
View file @
3c5450eb
...
@@ -10,23 +10,6 @@ define(
...
@@ -10,23 +10,6 @@ define(
function
(
urlBuilder
,
storage
)
{
function
(
urlBuilder
,
storage
)
{
'
use strict
'
;
'
use strict
'
;
return
{
return
{
/**
* Create a Payment to define if 3DS 2.0 flow needs to be activated
* @param response
*/
processPayment
:
function
(
data
)
{
var
payload
=
{
"
payload
"
:
JSON
.
stringify
(
data
)
};
var
serviceUrl
=
urlBuilder
.
createUrl
(
'
/adyen/payment
'
,
{});
return
storage
.
post
(
serviceUrl
,
JSON
.
stringify
(
payload
),
true
);
},
/**
/**
* The results that the 3DS2 components returns in the onComplete callback needs to be sent to the
* The results that the 3DS2 components returns in the onComplete callback needs to be sent to the
* backend to the /adyen/threeDS2Process endpoint and based on the response render a new threeDS2
* backend to the /adyen/threeDS2Process endpoint and based on the response render a new threeDS2
...
...
view/frontend/web/js/view/payment/adyen-methods.js
View file @
3c5450eb
...
@@ -72,12 +72,13 @@ define(
...
@@ -72,12 +72,13 @@ define(
checkoutCardComponentScriptTag
.
id
=
"
AdyenCheckoutCardComponentScript
"
;
checkoutCardComponentScriptTag
.
id
=
"
AdyenCheckoutCardComponentScript
"
;
checkoutCardComponentScriptTag
.
src
=
self
.
getCheckoutCardComponentSource
();
checkoutCardComponentScriptTag
.
src
=
self
.
getCheckoutCardComponentSource
();
checkoutCardComponentScriptTag
.
type
=
"
text/javascript
"
;
checkoutCardComponentScriptTag
.
type
=
"
text/javascript
"
;
document
.
body
.
appendChild
(
checkoutCardComponentScriptTag
);
document
.
head
.
appendChild
(
checkoutCardComponentScriptTag
);
if
(
this
.
isGooglePayEnabled
())
{
if
(
this
.
isGooglePayEnabled
())
{
var
googlepayscript
=
document
.
createElement
(
'
script
'
);
var
googlepayscript
=
document
.
createElement
(
'
script
'
);
googlepayscript
.
src
=
"
https://pay.google.com/gp/p/js/pay.js
"
;
googlepayscript
.
src
=
"
https://pay.google.com/gp/p/js/pay.js
"
;
googlepayscript
.
type
=
"
text/javascript
"
;
googlepayscript
.
type
=
"
text/javascript
"
;
document
.
body
.
appendChild
(
googlepayscript
);
document
.
head
.
appendChild
(
googlepayscript
);
}
}
},
},
getCheckoutCardComponentSource
:
function
()
{
getCheckoutCardComponentSource
:
function
()
{
...
...
view/frontend/web/js/view/payment/method-renderer/adyen-cc-method.js
View file @
3c5450eb
...
@@ -37,9 +37,10 @@ define(
...
@@ -37,9 +37,10 @@ define(
'
Magento_Paypal/js/action/set-payment-method
'
,
'
Magento_Paypal/js/action/set-payment-method
'
,
'
Magento_Checkout/js/action/select-payment-method
'
,
'
Magento_Checkout/js/action/select-payment-method
'
,
'
Adyen_Payment/js/threeds2-js-utils
'
,
'
Adyen_Payment/js/threeds2-js-utils
'
,
'
Adyen_Payment/js/model/threeds2
'
'
Adyen_Payment/js/model/threeds2
'
,
'
Magento_Checkout/js/model/error-processor
'
],
],
function
(
$
,
ko
,
Component
,
customer
,
creditCardData
,
additionalValidators
,
quote
,
installmentsHelper
,
url
,
VaultEnabler
,
urlBuilder
,
storage
,
fullScreenLoader
,
setPaymentMethodAction
,
selectPaymentMethodAction
,
threeDS2Utils
,
threeds2
)
{
function
(
$
,
ko
,
Component
,
customer
,
creditCardData
,
additionalValidators
,
quote
,
installmentsHelper
,
url
,
VaultEnabler
,
urlBuilder
,
storage
,
fullScreenLoader
,
setPaymentMethodAction
,
selectPaymentMethodAction
,
threeDS2Utils
,
threeds2
,
errorProcessor
)
{
'
use strict
'
;
'
use strict
'
;
...
@@ -65,10 +66,7 @@ define(
...
@@ -65,10 +66,7 @@ define(
// initialize adyen component for general use
// initialize adyen component for general use
this
.
checkout
=
new
AdyenCheckout
({
this
.
checkout
=
new
AdyenCheckout
({
locale
:
this
.
getLocale
(),
locale
:
this
.
getLocale
()
risk
:
{
enabled
:
false
}
});
});
return
this
;
return
this
;
...
@@ -195,7 +193,6 @@ define(
...
@@ -195,7 +193,6 @@ define(
*/
*/
renderThreeDS2Component
:
function
(
type
,
token
)
{
renderThreeDS2Component
:
function
(
type
,
token
)
{
var
self
=
this
;
var
self
=
this
;
var
threeDS2Node
=
document
.
getElementById
(
'
threeDS2Container
'
);
var
threeDS2Node
=
document
.
getElementById
(
'
threeDS2Container
'
);
if
(
type
==
"
IdentifyShopper
"
)
{
if
(
type
==
"
IdentifyShopper
"
)
{
...
@@ -203,9 +200,11 @@ define(
...
@@ -203,9 +200,11 @@ define(
.
create
(
'
threeDS2DeviceFingerprint
'
,
{
.
create
(
'
threeDS2DeviceFingerprint
'
,
{
fingerprintToken
:
token
,
fingerprintToken
:
token
,
onComplete
:
function
(
result
)
{
onComplete
:
function
(
result
)
{
self
.
threeDS2IdentifyComponent
.
unmount
();
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
messageContainer
);
self
.
isPlaceOrderActionAllowed
(
true
);
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
fullScreenLoader
.
stopLoader
();
});
});
...
@@ -237,18 +236,19 @@ define(
...
@@ -237,18 +236,19 @@ define(
challengeToken
:
token
,
challengeToken
:
token
,
size
:
'
05
'
,
size
:
'
05
'
,
onComplete
:
function
(
result
)
{
onComplete
:
function
(
result
)
{
self
.
threeDS2ChallengeComponent
.
unmount
();
self
.
closeModal
(
popupModal
);
self
.
closeModal
(
popupModal
);
fullScreenLoader
.
startLoader
();
fullScreenLoader
.
startLoader
();
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
);
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
);
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
messageContainer
);
self
.
isPlaceOrderActionAllowed
(
true
);
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
fullScreenLoader
.
stopLoader
();
});
});
},
},
onError
:
function
(
error
)
{
onError
:
function
(
error
)
{
self
.
closeModal
(
popupModal
);
console
.
log
(
JSON
.
stringify
(
error
));
console
.
log
(
JSON
.
stringify
(
error
));
}
}
});
});
...
@@ -263,6 +263,7 @@ define(
...
@@ -263,6 +263,7 @@ define(
popupModal
.
modal
(
"
closeModal
"
);
popupModal
.
modal
(
"
closeModal
"
);
$
(
'
.threeDS2Modal
'
).
remove
();
$
(
'
.threeDS2Modal
'
).
remove
();
$
(
'
.modals-overlay
'
).
remove
();
$
(
'
.modals-overlay
'
).
remove
();
$
(
'
body
'
).
removeClass
(
'
_has-modal
'
);
// reconstruct the threeDS2Modal container again otherwise component can not find the threeDS2Modal
// reconstruct the threeDS2Modal container again otherwise component can not find the threeDS2Modal
$
(
'
#threeDS2Wrapper
'
).
append
(
"
<div id=
\"
threeDS2Modal
\"
>
"
+
$
(
'
#threeDS2Wrapper
'
).
append
(
"
<div id=
\"
threeDS2Modal
\"
>
"
+
...
@@ -270,11 +271,10 @@ define(
...
@@ -270,11 +271,10 @@ define(
"
</div>
"
);
"
</div>
"
);
},
},
/**
/**
* Builds the payment details part of the payment information reqeust
* Get data for place order
*
* @returns {{method: *}}
* @returns {{method: *, additional_data: {cc_type: *, number: *, cvc: *, expiryMonth: *, expiryYear: *, holderName: *, store_cc: (boolean|*), number_of_installments: *, java_enabled: () => boolean, screen_color_depth: number, screen_width, screen_height, timezone_offset: *, language: *}}}
*/
*/
get
Cc
Data
:
function
()
{
getData
:
function
()
{
const
browserInfo
=
threeDS2Utils
.
getBrowserInfo
();
const
browserInfo
=
threeDS2Utils
.
getBrowserInfo
();
var
data
=
{
var
data
=
{
...
@@ -297,24 +297,9 @@ define(
...
@@ -297,24 +297,9 @@ define(
'
language
'
:
browserInfo
.
language
'
language
'
:
browserInfo
.
language
}
}
};
};
this
.
vaultEnabler
.
visitAdditionalData
(
data
);
this
.
vaultEnabler
.
visitAdditionalData
(
data
);
return
data
;
return
data
;
},
},
/**
* Get data for place order
* @returns {{method: *}}
*/
getData
:
function
()
{
return
{
'
method
'
:
this
.
item
.
method
,
additional_data
:
{
'
cc_type
'
:
this
.
creditCardType
(),
'
store_cc
'
:
this
.
storeCc
,
'
number_of_installments
'
:
this
.
installment
()
}
};
},
/**
/**
* Returns state of place order button
* Returns state of place order button
* @returns {boolean}
* @returns {boolean}
...
@@ -342,13 +327,20 @@ define(
...
@@ -342,13 +327,20 @@ define(
fullScreenLoader
.
startLoader
();
fullScreenLoader
.
startLoader
();
self
.
isPlaceOrderActionAllowed
(
false
);
self
.
isPlaceOrderActionAllowed
(
false
);
threeds2
.
processPayment
(
this
.
getCcData
()).
done
(
function
(
responseJSON
)
{
self
.
getPlaceOrderDeferredObject
()
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
);
.
fail
(
}).
error
(
function
()
{
function
()
{
fullScreenLoader
.
stopLoader
();
fullScreenLoader
.
stopLoader
();
self
.
isPlaceOrderActionAllowed
(
true
);
self
.
isPlaceOrderActionAllowed
(
true
);
});
}
).
done
(
function
(
response
)
{
self
.
afterPlaceOrder
();
self
.
validateThreeDS2OrPlaceOrder
(
response
);
}
);
}
}
return
false
;
},
},
/**
/**
* Based on the response we can start a 3DS2 validation or place the order
* Based on the response we can start a 3DS2 validation or place the order
...
@@ -356,30 +348,14 @@ define(
...
@@ -356,30 +348,14 @@ define(
*/
*/
validateThreeDS2OrPlaceOrder
:
function
(
responseJSON
)
{
validateThreeDS2OrPlaceOrder
:
function
(
responseJSON
)
{
var
self
=
this
;
var
self
=
this
;
var
response
=
JSON
.
parse
(
responseJSON
);
var
response
=
JSON
.
parse
(
responseJSON
);
if
(
!!
response
.
threeDS2
)
{
if
(
!!
response
.
threeDS2
)
{
// render component
// render component
self
.
renderThreeDS2Component
(
response
.
type
,
response
.
token
);
self
.
renderThreeDS2Component
(
response
.
type
,
response
.
token
);
}
else
{
}
else
{
self
.
getPlaceOrderDeferredObject
()
window
.
location
.
replace
(
url
.
build
(
.
fail
(
window
.
checkoutConfig
.
payment
[
quote
.
paymentMethod
().
method
].
redirectUrl
)
function
()
{
fullScreenLoader
.
stopLoader
();
self
.
isPlaceOrderActionAllowed
(
true
);
}
).
done
(
function
()
{
self
.
afterPlaceOrder
();
if
(
self
.
redirectAfterPlaceOrder
)
{
// use custom redirect Link for supporting 3D secure
window
.
location
.
replace
(
url
.
build
(
window
.
checkoutConfig
.
payment
[
quote
.
paymentMethod
().
method
].
redirectUrl
)
);
}
}
);
);
}
}
},
},
...
...
view/frontend/web/js/view/payment/method-renderer/adyen-hpp-method.js
View file @
3c5450eb
...
@@ -82,10 +82,7 @@ define(
...
@@ -82,10 +82,7 @@ define(
* @type {AdyenCheckout}
* @type {AdyenCheckout}
*/
*/
self
.
checkoutComponent
=
new
AdyenCheckout
({
self
.
checkoutComponent
=
new
AdyenCheckout
({
locale
:
self
.
getLocale
(),
locale
:
self
.
getLocale
()
risk
:
{
enabled
:
false
}
});
});
// reset variable:
// reset variable:
...
...
view/frontend/web/js/view/payment/method-renderer/adyen-oneclick-method.js
View file @
3c5450eb
...
@@ -39,9 +39,10 @@ define(
...
@@ -39,9 +39,10 @@ define(
'
Magento_Checkout/js/model/url-builder
'
,
'
Magento_Checkout/js/model/url-builder
'
,
'
mage/storage
'
,
'
mage/storage
'
,
'
Magento_Checkout/js/action/place-order
'
,
'
Magento_Checkout/js/action/place-order
'
,
'
Adyen_Payment/js/model/threeds2
'
'
Adyen_Payment/js/model/threeds2
'
,
'
Magento_Checkout/js/model/error-processor
'
],
],
function
(
ko
,
_
,
$
,
Component
,
selectPaymentMethodAction
,
additionalValidators
,
quote
,
checkoutData
,
redirectOnSuccessAction
,
layout
,
Messages
,
url
,
threeDS2Utils
,
fullScreenLoader
,
setPaymentMethodAction
,
urlBuilder
,
storage
,
placeOrderAction
,
threeds2
)
{
function
(
ko
,
_
,
$
,
Component
,
selectPaymentMethodAction
,
additionalValidators
,
quote
,
checkoutData
,
redirectOnSuccessAction
,
layout
,
Messages
,
url
,
threeDS2Utils
,
fullScreenLoader
,
setPaymentMethodAction
,
urlBuilder
,
storage
,
placeOrderAction
,
threeds2
,
errorProcessor
)
{
'
use strict
'
;
'
use strict
'
;
...
@@ -200,16 +201,19 @@ define(
...
@@ -200,16 +201,19 @@ define(
fullScreenLoader
.
startLoader
();
fullScreenLoader
.
startLoader
();
self
.
isPlaceOrderActionAllowed
(
false
);
self
.
isPlaceOrderActionAllowed
(
false
);
threeds2
.
processPayment
(
this
.
getCcData
()).
done
(
function
(
responseJSON
)
{
self
.
getPlaceOrderDeferredObject
()
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
);
.
fail
(
}).
error
(
function
()
{
function
()
{
fullScreenLoader
.
stopLoader
();
fullScreenLoader
.
stopLoader
();
self
.
isPlaceOrderActionAllowed
(
true
);
self
.
isPlaceOrderActionAllowed
(
true
);
});
}
).
done
(
return
false
;
function
(
response
)
{
self
.
afterPlaceOrder
();
self
.
validateThreeDS2OrPlaceOrder
(
response
);
}
);
}
}
return
false
;
return
false
;
},
},
...
@@ -276,32 +280,6 @@ define(
...
@@ -276,32 +280,6 @@ define(
window
.
adyencheckout
=
oneClickCard
;
window
.
adyencheckout
=
oneClickCard
;
},
},
/**
* Builds the payment details part of the payment information reqeust
*
* @returns {{method: *, additional_data: {card_brand: *, cc_type: *, number: *, cvc: *, expiryMonth: *, expiryYear: *, holderName: *, store_cc: (boolean|*), number_of_installments: *, java_enabled: boolean, screen_color_depth: number, screen_width, screen_height, timezone_offset: *}}}
*/
getCcData
:
function
()
{
var
self
=
this
;
var
browserInfo
=
threeDS2Utils
.
getBrowserInfo
();
var
data
=
{
'
method
'
:
self
.
method
,
additional_data
:
{
'
variant
'
:
variant
(),
'
recurring_detail_reference
'
:
recurringDetailReference
(),
'
store_cc
'
:
true
,
'
number_of_installments
'
:
numberOfInstallments
(),
'
cvc
'
:
self
.
encryptedCreditCardVerificationNumber
,
'
java_enabled
'
:
browserInfo
.
javaEnabled
,
'
screen_color_depth
'
:
browserInfo
.
colorDepth
,
'
screen_width
'
:
browserInfo
.
screenWidth
,
'
screen_height
'
:
browserInfo
.
screenHeight
,
'
timezone_offset
'
:
browserInfo
.
timeZoneOffset
,
'
language
'
:
browserInfo
.
language
}
};
return
data
;
},
/**
/**
* Based on the response we can start a 3DS2 validation or place the order
* Based on the response we can start a 3DS2 validation or place the order
* @param responseJSON
* @param responseJSON
...
@@ -314,17 +292,7 @@ define(
...
@@ -314,17 +292,7 @@ define(
// render component
// render component
self
.
renderThreeDS2Component
(
response
.
type
,
response
.
token
);
self
.
renderThreeDS2Component
(
response
.
type
,
response
.
token
);
}
else
{
}
else
{
this
.
getPlaceOrderDeferredObject
()
window
.
location
.
replace
(
url
.
build
(
window
.
checkoutConfig
.
payment
[
quote
.
paymentMethod
().
method
].
redirectUrl
));
.
fail
(
function
()
{
self
.
isPlaceOrderActionAllowed
(
true
);
}
).
done
(
function
()
{
self
.
afterPlaceOrder
();
window
.
location
.
replace
(
url
.
build
(
window
.
checkoutConfig
.
payment
[
quote
.
paymentMethod
().
method
].
redirectUrl
));
}
);
}
}
},
},
/**
/**
...
@@ -349,7 +317,8 @@ define(
...
@@ -349,7 +317,8 @@ define(
onComplete
:
function
(
result
)
{
onComplete
:
function
(
result
)
{
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
getMessageContainer
());
self
.
isPlaceOrderActionAllowed
(
true
);
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
fullScreenLoader
.
stopLoader
();
});
});
...
@@ -380,7 +349,8 @@ define(
...
@@ -380,7 +349,8 @@ define(
fullScreenLoader
.
startLoader
();
fullScreenLoader
.
startLoader
();
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
getMessageContainer
());
self
.
isPlaceOrderActionAllowed
(
true
);
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
fullScreenLoader
.
stopLoader
();
});
});
...
@@ -421,14 +391,22 @@ define(
...
@@ -421,14 +391,22 @@ define(
*/
*/
getData
:
function
()
{
getData
:
function
()
{
var
self
=
this
;
var
self
=
this
;
var
browserInfo
=
threeDS2Utils
.
getBrowserInfo
();
return
{
return
{
"
method
"
:
self
.
method
,
"
method
"
:
self
.
method
,
additional_data
:
{
additional_data
:
{
variant
:
variant
(),
variant
:
variant
(),
recurring_detail_reference
:
recurringDetailReference
(),
recurring_detail_reference
:
recurringDetailReference
(),
store_cc
:
true
,
number_of_installments
:
numberOfInstallments
(),
number_of_installments
:
numberOfInstallments
(),
cvc
:
self
.
encryptedCreditCardVerificationNumber
cvc
:
self
.
encryptedCreditCardVerificationNumber
,
java_enabled
:
browserInfo
.
javaEnabled
,
screen_color_depth
:
browserInfo
.
colorDepth
,
screen_width
:
browserInfo
.
screenWidth
,
screen_height
:
browserInfo
.
screenHeight
,
timezone_offset
:
browserInfo
.
timeZoneOffset
,
language
:
browserInfo
.
language
}
}
};
};
},
},
...
...
view/frontend/web/template/payment/cc-form.html
View file @
3c5450eb
...
@@ -74,7 +74,7 @@
...
@@ -74,7 +74,7 @@
<!-- /ko -->
<!-- /ko -->
<div
class=
"field number cardContainerField"
>
<div
class=
"field number cardContainerField"
>
<div
afterRender=
"renderSecureFields()"
data-bind=
"attr: { id: 'cardContainer'}"
></div>
<div
class=
"checkout-component-dock"
afterRender=
"renderSecureFields()"
data-bind=
"attr: { id: 'cardContainer'}"
></div>
</div>
</div>
<div
id=
"threeDS2Wrapper"
>
<div
id=
"threeDS2Wrapper"
>
...
...
view/frontend/web/template/payment/google-pay-form.html
View file @
3c5450eb
...
@@ -51,7 +51,7 @@
...
@@ -51,7 +51,7 @@
<!--/ko-->
<!--/ko-->
</div>
</div>
<div
class=
"field number googlePay"
>
<div
class=
"field number googlePay"
>
<div
afterRender=
"renderGooglePay()"
data-bind=
"attr: { id: 'googlePay'}"
>
<div
class=
"checkout-component-dock"
afterRender=
"renderGooglePay()"
data-bind=
"attr: { id: 'googlePay'}"
>
<!-- ko ifnot: isGooglePayAllowed() -->
<!-- ko ifnot: isGooglePayAllowed() -->
Google Pay is not available
Google Pay is not available
<!--/ko-->
</div>
<!--/ko-->
</div>
...
...
view/frontend/web/template/payment/hpp-form.html
View file @
3c5450eb
...
@@ -55,7 +55,7 @@
...
@@ -55,7 +55,7 @@
<fieldset
class=
"fieldset"
data-bind=
'attr: {id: "payment_fieldset_" + $parent.getCode() + "_" + value}'
>
<fieldset
class=
"fieldset"
data-bind=
'attr: {id: "payment_fieldset_" + $parent.getCode() + "_" + value}'
>
<!-- ko if: hasIssuersAvailable() -->
<!-- ko if: hasIssuersAvailable() -->
<!-- ko if: isIdeal() -->
<!-- ko if: isIdeal() -->
<div
afterRender=
"renderIdealComponent()"
data-bind=
"attr: { id: 'iDealContainer'}"
></div>
<div
class=
"checkout-component-dock"
afterRender=
"renderIdealComponent()"
data-bind=
"attr: { id: 'iDealContainer'}"
></div>
<!--/ko-->
<!--/ko-->
<!-- ko ifnot: isIdeal() -->
<!-- ko ifnot: isIdeal() -->
<label
data-bind=
"attr: {'for': 'issuerId'}"
class=
"label"
>
<label
data-bind=
"attr: {'for': 'issuerId'}"
class=
"label"
>
...
@@ -101,7 +101,7 @@
...
@@ -101,7 +101,7 @@
</div>
</div>
<!--/ko-->
<!--/ko-->
<div
afterRender=
"renderKlarnaComponent()"
data-bind=
"attr: { id: 'klarnaContainer'}"
></div>
<div
class=
"checkout-component-dock"
afterRender=
"renderKlarnaComponent()"
data-bind=
"attr: { id: 'klarnaContainer'}"
></div>
<!--/ko-->
<!--/ko-->
<!-- ko if: isPaymentMethodAfterPay() -->
<!-- ko if: isPaymentMethodAfterPay() -->
...
@@ -128,7 +128,7 @@
...
@@ -128,7 +128,7 @@
</div>
</div>
<!--/ko-->
<!--/ko-->
<div
afterRender=
"renderAfterPayComponent()"
data-bind=
"attr: { id: 'afterPayContainer'}"
></div>
<div
class=
"checkout-component-dock"
afterRender=
"renderAfterPayComponent()"
data-bind=
"attr: { id: 'afterPayContainer'}"
></div>
<!--/ko-->
<!--/ko-->
<!-- ko if: isPaymentMethodOtherOpenInvoiceMethod() -->
<!-- ko if: isPaymentMethodOtherOpenInvoiceMethod() -->
...
@@ -218,7 +218,7 @@
...
@@ -218,7 +218,7 @@
<!--/ko-->
<!--/ko-->
<!-- ko if: isSepaDirectDebit() -->
<!-- ko if: isSepaDirectDebit() -->
<div
afterRender=
"renderSepaDirectDebitComponent()"
data-bind=
"attr: { id: 'sepaDirectDebitContainer'}"
></div>
<div
class=
"checkout-component-dock"
afterRender=
"renderSepaDirectDebitComponent()"
data-bind=
"attr: { id: 'sepaDirectDebitContainer'}"
></div>
<!--/ko-->
<!--/ko-->
<!-- ko if: isAch() -->
<!-- ko if: isAch() -->
...
...
view/frontend/web/template/payment/oneclick-form.html
View file @
3c5450eb
...
@@ -81,7 +81,7 @@
...
@@ -81,7 +81,7 @@
</div>
</div>
</div>
</div>
<div
afterRender=
"renderSecureCVC()"
data-bind=
"attr: { id: 'cvcContainer-' + value}"
></div>
<div
class=
"checkout-component-dock"
afterRender=
"renderSecureCVC()"
data-bind=
"attr: { id: 'cvcContainer-' + value}"
></div>
<!--/ko-->
<!--/ko-->
<!-- ko if: agreement_data.bank -->
<!-- ko if: agreement_data.bank -->
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment