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
Show 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 @@
**Plugin version**
: x.y.z
**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
-->
\ No newline at end of file
Api/Data/InvoiceInterface.php
View file @
3c5450eb
Api/Data/NotificationInterface.php
View file @
3c5450eb
...
...
@@ -25,10 +25,10 @@ namespace Adyen\Payment\Api\Data;
interface
NotificationInterface
{
/**#@+
/**
* Constants for keys of data array. Identical to the name of the getter in snake case.
*/
/*
* Entity ID.
*/
...
...
@@ -66,7 +66,7 @@ interface NotificationInterface
*/
const
AMOUNT_CURRENCY
=
'amount_currency'
;
/*
* r
eason
* R
eason
*/
const
REASON
=
'reason'
;
/*
...
...
@@ -74,7 +74,7 @@ interface NotificationInterface
*/
const
LIVE
=
'live'
;
/*
*
Liv
e
*
Don
e
*/
const
DONE
=
'done'
;
/*
...
...
@@ -109,7 +109,7 @@ interface NotificationInterface
/**
* Gets the Pspreference for the notification.
*
* @return
int
|null Pspreference.
* @return
string
|null Pspreference.
*/
public
function
getPspreference
();
...
...
@@ -133,14 +133,14 @@ interface NotificationInterface
/**
* Gets the OriginalReference for the notification.
*
* @return
int
|null OriginalReference.
* @return
string
|null OriginalReference.
*/
public
function
getOriginalReference
();
/**
* Gets the Merchantreference for the notification.
*
* @return
int
|null MerchantReference.
* @return
string
|null MerchantReference.
*/
public
function
getMerchantReference
();
...
...
@@ -155,7 +155,7 @@ interface NotificationInterface
/**
* Gets the Eventcode for the notification.
*
* @return
int
|null Eventcode.
* @return
string
|null Eventcode.
*/
public
function
getEventCode
();
...
...
@@ -172,7 +172,7 @@ interface NotificationInterface
*
* @return int|null Success.
*/
public
function
getSucess
();
public
function
getSuc
c
ess
();
/**
* Sets Success.
...
...
@@ -185,7 +185,7 @@ interface NotificationInterface
/**
* Gets the Paymentmethod for the notification.
*
* @return
int
|null PaymentMethod.
* @return
string
|null PaymentMethod.
*/
public
function
getPaymentMethod
();
...
...
@@ -213,11 +213,11 @@ interface NotificationInterface
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.
...
...
Api/Data/OrderPaymentInterface.php
View file @
3c5450eb
...
...
@@ -25,10 +25,10 @@ namespace Adyen\Payment\Api\Data;
interface
OrderPaymentInterface
{
/**#@+
/**
* Constants for keys of data array. Identical to the name of the getter in snake case.
*/
/*
* 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
*/
protected
function
_prepareArrayRow
(
\Magento\Framework\DataObject
$row
)
{
$install
l
ments
=
$row
->
getInstallments
();
$installments
=
$row
->
getInstallments
();
$options
=
[];
if
(
$install
l
ments
)
{
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$install
l
ments
)]
if
(
$installments
)
{
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$installments
)]
=
'selected="selected"'
;
$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
*/
protected
function
_prepareArrayRow
(
\Magento\Framework\DataObject
$row
)
{
$install
l
ments
=
$row
->
getInstallments
();
$installments
=
$row
->
getInstallments
();
$options
=
[];
if
(
$install
l
ments
)
{
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$install
l
ments
)]
if
(
$installments
)
{
$options
[
'option_'
.
$this
->
getNumberOfInstallmentsRenderer
()
->
calcOptionHash
(
$installments
)]
=
'selected="selected"'
;
}
$row
->
setData
(
'option_extra_attrs'
,
$options
);
...
...
Block/Form/Cc.php
View file @
3c5450eb
...
...
@@ -99,15 +99,10 @@ class Cc extends \Magento\Payment\Block\Form\Cc
*/
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
)
{
$this
->
getCheckoutSession
();
$store
=
$this
->
checkoutSession
->
getQuote
()
->
getStore
();
$enableMoto
=
$this
->
adyenHelper
->
getAdyenCcConfigDataFlag
(
'enable_moto'
,
$store
->
getId
());
if
(
$enableMoto
)
{
return
false
;
}
}
return
true
;
}
...
...
@@ -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
*/
...
...
@@ -141,4 +136,26 @@ class Cc extends \Magento\Payment\Block\Form\Cc
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
protected
$_sessionQuote
;
/**
*
Cc
constructor.
*
Oneclick
constructor.
*
* @param \Magento\Framework\View\Element\Template\Context $context
* @param \Magento\Payment\Model\Config $paymentConfig
...
...
Block/Info/Cc.php
View file @
3c5450eb
...
...
@@ -32,9 +32,10 @@ class Cc extends AbstractInfo
protected
$_template
=
'Adyen_Payment::info/adyen_cc.phtml'
;
/**
* Return credit car
t
type
* Return credit car
d
type
*
* @return string
* @throws \Magento\Framework\Exception\LocalizedException
*/
public
function
getCcTypeName
()
{
...
...
Block/Info/Hpp.php
View file @
3c5450eb
...
...
@@ -49,7 +49,7 @@ class Hpp extends AbstractInfo
}
/**
* Get all
m
ultibanco related data
* Get all
M
ultibanco related data
*
* @return array
* @throws \Magento\Framework\Exception\LocalizedException
...
...
Controller/Process/Result.php
View file @
3c5450eb
...
...
@@ -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
* @return bool
...
...
Gateway/Http/Client/TransactionAuthorization.php
View file @
3c5450eb
...
...
@@ -69,8 +69,13 @@ class TransactionAuthorization implements ClientInterface
public
function
placeRequest
(
\Magento\Payment\Gateway\Http\TransferInterface
$transferObject
)
{
$request
=
$transferObject
->
getBody
();
$headers
=
$transferObject
->
getHeaders
();
$requestOptions
[
'idempotencyKey'
]
=
$request
[
'reference'
];
$requestOptions
=
[];
if
(
!
empty
(
$headers
[
'idempotencyKey'
]))
{
$requestOptions
[
'idempotencyKey'
]
=
$headers
[
'idempotencyKey'
];
}
// call lib
$service
=
new
\Adyen\Service\Payment
(
$this
->
_client
);
...
...
Gateway/Http/Client/TransactionPayment.php
View file @
3c5450eb
...
...
@@ -55,6 +55,7 @@ class TransactionPayment implements ClientInterface
public
function
placeRequest
(
\Magento\Payment\Gateway\Http\TransferInterface
$transferObject
)
{
$request
=
$transferObject
->
getBody
();
$headers
=
$transferObject
->
getHeaders
();
// If the payments call is already done return the request
if
(
!
empty
(
$request
[
'resultCode'
]))
{
...
...
@@ -65,7 +66,12 @@ class TransactionPayment implements ClientInterface
$client
=
$this
->
adyenHelper
->
initializeAdyenClient
();
$service
=
new
\Adyen\Service\Checkout
(
$client
);
$requestOptions
[
'idempotencyKey'
]
=
$request
[
'reference'
];
$requestOptions
=
[];
if
(
!
empty
(
$headers
[
'idempotencyKey'
]))
{
$requestOptions
[
'idempotencyKey'
]
=
$headers
[
'idempotencyKey'
];
}
try
{
$response
=
$service
->
payments
(
$request
,
$requestOptions
);
...
...
Gateway/Http/TransferFactory.php
View file @
3c5450eb
...
...
@@ -52,8 +52,14 @@ class TransferFactory implements TransferFactoryInterface
*/
public
function
create
(
array
$request
)
{
return
$this
->
transferBuilder
->
setBody
(
$request
)
if
(
!
empty
(
$request
[
'headers'
]))
{
$this
->
transferBuilder
->
setHeaders
(
$request
[
'headers'
]);
}
$transfer
=
$this
->
transferBuilder
->
setBody
(
$request
[
'body'
])
->
build
();
return
$transfer
;
}
}
Gateway/Request/AddressDataBuilder.php
View file @
3c5450eb
...
...
@@ -61,6 +61,8 @@ class AddressDataBuilder implements BuilderInterface
$billingAddress
=
$order
->
getBillingAddress
();
$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
public
function
build
(
array
$buildSubject
)
{
$request
=
[];
$request
Body
=
[];
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$token
=
$payment
->
getAdditionalInformation
(
'token'
);
$request
[
'paymentMethod'
][
'type'
]
=
'applepay'
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
'applepay'
;
// get payment data
if
(
$token
)
{
...
...
@@ -68,7 +68,7 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
$paymentData
=
$parsedToken
->
token
->
paymentData
;
try
{
$paymentData
=
base64_encode
(
json_encode
(
$paymentData
));
$request
[
'paymentMethod'
][
'applepay.token'
]
=
$paymentData
;
$requestBody
[
'paymentMethod'
][
'applepay.token'
]
=
$paymentData
;
}
catch
(
\Exception
$exception
)
{
$this
->
_adyenLogger
->
addAdyenDebug
(
"exception: "
.
$exception
->
getMessage
());
}
...
...
@@ -76,6 +76,8 @@ class ApplePayAuthorizationDataBuilder implements BuilderInterface
$this
->
_adyenLogger
->
addAdyenDebug
(
"PaymentToken is empty"
);
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
}
}
Gateway/Request/BrowserInfoDataBuilder.php
View file @
3c5450eb
...
...
@@ -52,6 +52,7 @@ class BrowserInfoDataBuilder implements BuilderInterface
*/
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
$payment
=
$paymentDataObject
->
getPayment
();
$pspReference
=
$payment
->
getCcTransId
();
return
[
$request
[
'body'
]
=
[
"reference"
=>
$order
->
getOrderIncrementId
(),
"originalReference"
=>
$pspReference
];
return
$request
;
}
}
Gateway/Request/CaptureDataBuilder.php
View file @
3c5450eb
...
...
@@ -67,7 +67,7 @@ class CaptureDataBuilder implements BuilderInterface
$amount
=
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currency
);
$modificationAmount
=
[
'currency'
=>
$currency
,
'value'
=>
$amount
];
$request
=
[
$request
Body
=
[
"modificationAmount"
=>
$modificationAmount
,
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
"originalReference"
=>
$pspReference
...
...
@@ -79,9 +79,11 @@ class CaptureDataBuilder implements BuilderInterface
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
$brandCode
))
{
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$payment
);
$request
[
"additionalData"
]
=
$openInvoiceFields
;
$request
Body
[
"additionalData"
]
=
$openInvoiceFields
;
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
}
...
...
Gateway/Request/CcAuthorizationDataBuilder.php
View file @
3c5450eb
...
...
@@ -15,7 +15,7 @@
*
* 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.
*
* Author: Adyen <magento@adyen.com>
...
...
@@ -24,32 +24,52 @@
namespace
Adyen\Payment\Gateway\Request
;
use
Magento\Payment\Gateway\Request\BuilderInterface
;
use
Adyen\Payment\Observer\AdyenCcDataAssignObserver
;
class
CcAuthorizationDataBuilder
implements
BuilderInterface
{
/**
* @param array $buildSubject
* @return array|mixed
* @throws \Magento\Framework\Exception\LocalizedException
* @return mixed
*/
public
function
build
(
array
$buildSubject
)
{
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
//
retrieve payments response which we already got and saved in the payment controller
if
(
$response
=
$payment
->
getAdditionalInformation
(
"paymentsResponse"
))
{
// the payments response needs to be passed to the next process because after this point we don't have
// access to the payment object therefore to the additionalInformation array
$request
=
$response
;
// Remove from additional data
$
payment
->
unsAdditionalInformation
(
"paymentsResponse"
)
;
}
else
{
$errorMsg
=
__
(
'Error with payment method please select different payment method.'
);
throw
new
\Magento\Framework\Exception\LocalizedException
(
__
(
$errorMsg
))
;
$requestBody
=
[];
//
If ccType is set use this. For bcmc you need bcmc otherwise it will fail
$requestBody
[
'paymentMethod'
][
'type'
]
=
"scheme"
;
if
(
$cardNumber
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
))
{
$requestBody
[
'paymentMethod'
][
'encryptedCardNumber'
]
=
$cardNumber
;
}
if
(
$expiryMonth
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_MONTH
))
{
$
requestBody
[
'paymentMethod'
][
'encryptedExpiryMonth'
]
=
$expiryMonth
;
}
if
(
$expiryYear
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_EXPIRY_YEAR
))
{
$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
;
}
}
\ No newline at end of file
Gateway/Request/CcBackendAuthorizationDataBuilder.php
View file @
3c5450eb
...
...
@@ -63,23 +63,23 @@ class CcBackendAuthorizationDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$order
=
$paymentDataObject
->
getOrder
();
$storeId
=
$order
->
getStoreId
();
$request
=
[];
$request
Body
=
[];
// 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
))
{
$request
[
'paymentMethod'
][
'encryptedCardNumber'
]
=
$cardNumber
;
$request
Body
[
'paymentMethod'
][
'encryptedCardNumber'
]
=
$cardNumber
;
}
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
))
{
$request
[
'paymentMethod'
][
'encryptedExpiryYear'
]
=
$expiryYear
;
$request
Body
[
'paymentMethod'
][
'encryptedExpiryYear'
]
=
$expiryYear
;
}
if
(
$holderName
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
HOLDER_NAME
))
{
$request
[
'paymentMethod'
][
'holderName'
]
=
$holderName
;
$request
Body
[
'paymentMethod'
][
'holderName'
]
=
$holderName
;
}
if
(
$securityCode
=
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
))
{
$request
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
$request
Body
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
}
// Remove from additional data
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_CREDIT_CARD_NUMBER
);
...
...
@@ -88,20 +88,27 @@ class CcBackendAuthorizationDataBuilder implements BuilderInterface
$payment
->
unsAdditionalInformation
(
AdyenCcDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
);
$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
);
if
(
$this
->
appState
->
getAreaCode
()
===
\Magento\Backend\App\Area\FrontNameResolver
::
AREA_CODE
&&
$enableMoto
)
{
$request
[
'shopperInteraction'
]
=
"Moto"
;
}
$requestBody
[
'shopperInteraction'
]
=
"Moto"
;
// if installments is set add it into the request
if
(
$payment
->
getAdditionalInformation
(
AdyenCcDataAssignObserver
::
NUMBER_OF_INSTALLMENTS
)
&&
$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
;
}
}
Gateway/Request/CheckoutDataBuilder.php
View file @
3c5450eb
...
...
@@ -69,31 +69,31 @@ class CheckoutDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$order
=
$payment
->
getOrder
();
$storeId
=
$order
->
getStoreId
();
$request
=
[];
$request
Body
=
[];
// do not send email
$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
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
if
(
$payment
->
getAdditionalInformation
(
"bankAccountNumber"
))
{
$request
[
'bankAccount'
][
'bankAccountNumber'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountNumber"
);
$request
Body
[
'bankAccount'
][
'bankAccountNumber'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountNumber"
);
}
if
(
$payment
->
getAdditionalInformation
(
"bankLocationId"
))
{
$request
[
'bankAccount'
][
'bankLocationId'
]
=
$payment
->
getAdditionalInformation
(
"bankLocationId"
);
$request
Body
[
'bankAccount'
][
'bankLocationId'
]
=
$payment
->
getAdditionalInformation
(
"bankLocationId"
);
}
if
(
$payment
->
getAdditionalInformation
(
"bankAccountOwnerName"
))
{
$request
[
'bankAccount'
][
'ownerName'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountOwnerName"
);
$request
Body
[
'bankAccount'
][
'ownerName'
]
=
$payment
->
getAdditionalInformation
(
"bankAccountOwnerName"
);
}
// Additional data for open invoice payment
...
...
@@ -101,31 +101,31 @@ class CheckoutDataBuilder implements BuilderInterface
$order
->
setCustomerGender
(
\Adyen\Payment\Model\Gender
::
getMagentoGenderFromAdyenGender
(
$payment
->
getAdditionalInformation
(
"gender"
))
);
$request
[
'paymentMethod'
][
'personalDetails'
][
'gender'
]
=
$payment
->
getAdditionalInformation
(
"gender"
);
$requestBody
[
'paymentMethod'
][
'personalDetails'
][
'gender'
]
=
$payment
->
getAdditionalInformation
(
"gender"
);
}
if
(
$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"
))
{
$order
->
getBillingAddress
()
->
setTelephone
(
$payment
->
getAdditionalInformation
(
"telephone"
));
$request
[
'paymentMethod'
][
'personalDetails'
][
'telephoneNumber'
]
=
$payment
->
getAdditionalInformation
(
"telephone"
);
$requestBody
[
'paymentMethod'
][
'personalDetails'
][
'telephoneNumber'
]
=
$payment
->
getAdditionalInformation
(
"telephone"
);
}
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
if
(
$payment
->
getAdditionalInformation
(
"ownerName"
))
{
$request
[
'paymentMethod'
][
'sepa.ownerName'
]
=
$payment
->
getAdditionalInformation
(
"ownerName"
);
$request
Body
[
'paymentMethod'
][
'sepa.ownerName'
]
=
$payment
->
getAdditionalInformation
(
"ownerName"
);
}
if
(
$payment
->
getAdditionalInformation
(
"ibanNumber"
))
{
$request
[
'paymentMethod'
][
'sepa.ibanNumber'
]
=
$payment
->
getAdditionalInformation
(
"ibanNumber"
);
$request
Body
[
'paymentMethod'
][
'sepa.ibanNumber'
]
=
$payment
->
getAdditionalInformation
(
"ibanNumber"
);
}
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
...
...
@@ -137,27 +137,27 @@ class CheckoutDataBuilder implements BuilderInterface
)
)
{
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$order
);
$request
=
array_merge
(
$request
,
$openInvoiceFields
);
$requestBody
=
array_merge
(
$requestBody
,
$openInvoiceFields
);
}
// Ratepay specific Fingerprint
if
(
$payment
->
getAdditionalInformation
(
"df_value"
)
&&
$this
->
adyenHelper
->
isPaymentMethodRatepayMethod
(
$payment
->
getAdditionalInformation
(
AdyenHppDataAssignObserver
::
BRAND_CODE
)
))
{
$request
[
'deviceFingerprint'
]
=
$payment
->
getAdditionalInformation
(
"df_value"
);
$request
Body
[
'deviceFingerprint'
]
=
$payment
->
getAdditionalInformation
(
"df_value"
);
}
//Boleto data
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"
))
{
$request
[
'shopperName'
][
'firstName'
]
=
$payment
->
getAdditionalInformation
(
"firstname"
);
$request
Body
[
'shopperName'
][
'firstName'
]
=
$payment
->
getAdditionalInformation
(
"firstname"
);
}
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
)
{
...
...
@@ -165,11 +165,11 @@ class CheckoutDataBuilder implements BuilderInterface
$boletoTypes
=
explode
(
','
,
$boletoTypes
);
if
(
count
(
$boletoTypes
)
==
1
)
{
$request
[
'selectedBrand'
]
=
$boletoTypes
[
0
];
$request
[
'paymentMethod'
][
'type'
]
=
$boletoTypes
[
0
];
$request
Body
[
'selectedBrand'
]
=
$boletoTypes
[
0
];
$request
Body
[
'paymentMethod'
][
'type'
]
=
$boletoTypes
[
0
];
}
else
{
$request
[
'selectedBrand'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
$request
[
'paymentMethod'
][
'type'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
$request
Body
[
'selectedBrand'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
$request
Body
[
'paymentMethod'
][
'type'
]
=
$payment
->
getAdditionalInformation
(
"boleto_type"
);
}
$deliveryDays
=
(
int
)
$this
->
adyenHelper
->
getAdyenBoletoConfigData
(
"delivery_days"
,
$storeId
);
...
...
@@ -186,10 +186,13 @@ class CheckoutDataBuilder implements BuilderInterface
)
);
$request
[
'deliveryDate'
]
=
$deliveryDate
;
$request
Body
[
'deliveryDate'
]
=
$deliveryDate
;
$order
->
setCanSendNewEmailFlag
(
true
);
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
}
...
...
Gateway/Request/CustomerDataBuilder.php
View file @
3c5450eb
...
...
@@ -61,7 +61,8 @@ class CustomerDataBuilder implements BuilderInterface
$customerId
=
$order
->
getCustomerId
();
$billingAddress
=
$order
->
getBillingAddress
();
$storeId
=
$order
->
getStoreId
();
return
$this
->
adyenRequestsHelper
->
buildCustomerData
([],
$customerId
,
$billingAddress
,
$storeId
,
$payment
);
$additionalInformation
=
$payment
->
getAdditionalInformation
();
$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
*
* @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
;
}
...
...
@@ -52,8 +53,15 @@ class CustomerIpDataBuilder implements BuilderInterface
{
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$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
public
function
build
(
array
$buildSubject
)
{
$request
=
[];
$request
Body
=
[];
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$token
=
$payment
->
getAdditionalInformation
(
'token'
);
$request
[
'paymentMethod'
][
'type'
]
=
'paywithgoogle'
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
'paywithgoogle'
;
// get payment data
if
(
$token
)
{
$parsedToken
=
json_decode
(
$token
);
try
{
$request
[
'paymentMethod'
][
'paywithgoogle.token'
]
=
$parsedToken
;
$requestBody
[
'paymentMethod'
][
'paywithgoogle.token'
]
=
$parsedToken
;
}
catch
(
\Exception
$exception
)
{
$this
->
adyenLogger
->
addAdyenDebug
(
"exception: "
.
$exception
->
getMessage
());
}
...
...
@@ -73,6 +73,8 @@ class GooglePayAuthorizationDataBuilder implements BuilderInterface
$this
->
adyenLogger
->
addAdyenDebug
(
"PaymentToken is empty"
);
}
$request
[
'body'
]
=
$requestBody
;
return
$request
;
}
}
Gateway/Request/MerchantAccountDataBuilder.php
View file @
3c5450eb
...
...
@@ -56,6 +56,8 @@ class MerchantAccountDataBuilder implements BuilderInterface
$storeId
=
$order
->
getStoreId
();
$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
private
$adyenHelper
;
/**
*
Capture
DataBuilder constructor.
*
OneclickAuthorization
DataBuilder constructor.
*
* @param \Adyen\Payment\Helper\Data $adyenHelper
*/
...
...
@@ -49,20 +49,20 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
*/
public
function
build
(
array
$buildSubject
)
{
$request
=
[];
$request
Body
=
[];
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
// 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
))
{
$request
[
'paymentMethod'
][
'type'
]
=
$variant
;
$request
Body
[
'paymentMethod'
][
'type'
]
=
$variant
;
}
if
(
$securityCode
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
))
{
$request
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
$request
Body
[
'paymentMethod'
][
'encryptedSecurityCode'
]
=
$securityCode
;
}
$payment
->
unsAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
ENCRYPTED_SECURITY_CODE
);
...
...
@@ -73,12 +73,12 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
$shopperInteraction
=
"ContAuth"
;
}
$request
[
'shopperInteraction'
]
=
$shopperInteraction
;
$request
[
'paymentMethod'
][
'recurringDetailReference'
]
=
$payment
->
getAdditionalInformation
(
AdyenOneclickDataAssignObserver
::
RECURRING_DETAIL_REFERENCE
);
$request
Body
[
'shopperInteraction'
]
=
$shopperInteraction
;
$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
(
$payment
->
getCcType
()
==
"sepadirectdebit"
)
{
$request
[
'selectedBrand'
]
=
"sepadirectdebit"
;
$request
Body
[
'selectedBrand'
]
=
"sepadirectdebit"
;
}
/*
...
...
@@ -87,15 +87,16 @@ class OneclickAuthorizationDataBuilder implements BuilderInterface
*/
if
(
!
$payment
->
getAdditionalInformation
(
'customer_interaction'
))
{
if
(
$payment
->
getCcType
()
==
"directEbanking"
||
$payment
->
getCcType
()
==
"ideal"
)
{
$request
[
'selectedBrand'
]
=
"sepadirectdebit"
;
$request
Body
[
'selectedBrand'
]
=
"sepadirectdebit"
;
}
}
// if installments is set add it into the request
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
;
}
}
Gateway/Request/PaymentDataBuilder.php
View file @
3c5450eb
...
...
@@ -60,7 +60,12 @@ class PaymentDataBuilder implements BuilderInterface
$currencyCode
=
$fullOrder
->
getOrderCurrencyCode
();
$amount
=
$fullOrder
->
getGrandTotal
();
$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
$payment
=
$paymentDataObject
->
getPayment
();
return
[
$request
[
'body'
]
=
[
"response"
=>
$payment
->
getAdditionalInformation
(
"terminalResponse"
),
"serviceID"
=>
$payment
->
getAdditionalInformation
(
"serviceID"
),
"initiateDate"
=>
$payment
->
getAdditionalInformation
(
"initiateDate"
),
"terminalID"
=>
$payment
->
getAdditionalInformation
(
"terminal_id"
)
];
return
$request
;
}
}
Gateway/Request/RecurringDataBuilder.php
View file @
3c5450eb
...
...
@@ -64,7 +64,8 @@ class RecurringDataBuilder implements BuilderInterface
$payment
=
$paymentDataObject
->
getPayment
();
$storeId
=
$payment
->
getOrder
()
->
getStoreId
();
$areaCode
=
$this
->
appState
->
getAreaCode
();
return
$this
->
adyenRequestsHelper
->
buildRecurringData
([],
$areaCode
,
$storeId
,
$payment
);
$additionalInformation
=
$payment
->
getAdditionalInformation
();
$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
*/
public
function
build
(
array
$buildSubject
)
{
$re
sult
=
[];
$re
questBody
=
[];
$recurring
=
[
'contract'
=>
\Adyen\Payment\Model\RecurringType
::
RECURRING
];
$re
sult
[
'recurring'
]
=
$recurring
;
$re
questBody
[
'recurring'
]
=
$recurring
;
/** @var \Magento\Payment\Gateway\Data\PaymentDataObject $paymentDataObject */
$paymentDataObject
=
\Magento\Payment\Gateway\Helper\SubjectReader
::
readPayment
(
$buildSubject
);
$payment
=
$paymentDataObject
->
getPayment
();
$extensionAttributes
=
$payment
->
getExtensionAttributes
();
$paymentToken
=
$extensionAttributes
->
getVaultPaymentToken
();
$result
[
'selectedRecurringDetailReference'
]
=
$paymentToken
->
getGatewayToken
();
$result
[
'shopperInteraction'
]
=
'ContAuth'
;
return
$result
;
$requestBody
[
'selectedRecurringDetailReference'
]
=
$paymentToken
->
getGatewayToken
();
$requestBody
[
'shopperInteraction'
]
=
'ContAuth'
;
$request
[
'body'
]
=
$requestBody
;
return
$request
;
}
}
Gateway/Request/RefundDataBuilder.php
View file @
3c5450eb
...
...
@@ -107,7 +107,7 @@ class RefundDataBuilder implements BuilderInterface
}
// loop over payment methods and refund them all
$re
sult
=
[];
$re
questBody
=
[];
foreach
(
$orderPaymentCollection
as
$splitPayment
)
{
// could be that not all the split payments need a refund
if
(
$amount
>
0
)
{
...
...
@@ -140,7 +140,7 @@ class RefundDataBuilder implements BuilderInterface
'value'
=>
$this
->
adyenHelper
->
formatAmount
(
$modificationAmount
,
$currency
)
];
$re
sult
[]
=
[
$re
questBody
[]
=
[
"modificationAmount"
=>
$modificationAmountObject
,
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
"originalReference"
=>
$splitPayment
->
getPspreference
(),
...
...
@@ -153,7 +153,7 @@ class RefundDataBuilder implements BuilderInterface
$amount
=
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currency
);
$modificationAmount
=
[
'currency'
=>
$currency
,
'value'
=>
$amount
];
$re
sult
=
[
$re
questBody
=
[
[
"modificationAmount"
=>
$modificationAmount
,
"reference"
=>
$payment
->
getOrder
()
->
getIncrementId
(),
...
...
@@ -170,11 +170,13 @@ class RefundDataBuilder implements BuilderInterface
$openInvoiceFields
=
$this
->
getOpenInvoiceData
(
$payment
);
//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 @@
* #############
* ############
*
* Adyen Payment
Module
* Adyen Payment
module (https://www.adyen.com/)
*
* Copyright (c) 2019 Adyen B.V.
* This file is open source and available under the MIT license.
* See the LICENSE file for more info.
* Copyright (c) 2019 Adyen BV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* 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
* @return string
* @var \Magento\Framework\App\State
*/
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
$payment
=
$paymentDataObject
->
getPayment
();
$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
$payment
->
setAdditionalInformation
(
'3dActive'
,
false
);
$isValid
=
true
;
$errorMessages
=
[];
// validate result
if
(
isset
(
$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
"Received"
:
// For banktransfers store all bankTransfer details
...
...
@@ -93,10 +102,6 @@ class CheckoutResponseValidator extends AbstractValidator
$payment
->
setAdditionalInformation
(
'cc_type'
,
$ccType
);
$payment
->
setCcType
(
$ccType
);
}
$payment
->
setAdditionalInformation
(
'pspReference'
,
$response
[
'pspReference'
]);
break
;
case
"Received"
:
$payment
->
setAdditionalInformation
(
'pspReference'
,
$response
[
'pspReference'
]);
break
;
case
"PresentToShopper"
:
...
...
@@ -129,6 +134,8 @@ class CheckoutResponseValidator extends AbstractValidator
break
;
case
"RedirectShopper"
:
$payment
->
setAdditionalInformation
(
'threeDSType'
,
$response
[
'resultCode'
]);
$redirectUrl
=
null
;
$paymentData
=
null
;
...
...
Gateway/Validator/ThreeDS2ResponseValidator.php
View file @
3c5450eb
...
...
@@ -61,13 +61,13 @@ class ThreeDS2ResponseValidator extends AbstractValidator
if
(
$response
[
'resultCode'
]
==
"IdentifyShopper"
&&
!
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
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
}
elseif
(
$response
[
'resultCode'
]
==
"ChallengeShopper"
&&
!
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
(
'threeDS2PaymentData'
,
$response
[
'paymentData'
]);
}
else
{
...
...
Helper/Data.php
View file @
3c5450eb
...
...
@@ -33,8 +33,8 @@ class Data extends AbstractHelper
const
MODULE_NAME
=
'adyen-magento2'
;
const
TEST
=
'test'
;
const
LIVE
=
'live'
;
const
CHECKOUT_COMPONENT_JS_LIVE
=
'https://checkoutshopper-live.adyen.com/checkoutshopper/sdk/3.
0
.0/adyen.js'
;
const
CHECKOUT_COMPONENT_JS_TEST
=
'https://checkoutshopper-test.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.
2
.0/adyen.js'
;
/**
* @var \Magento\Framework\Encryption\EncryptorInterface
...
...
@@ -1834,12 +1834,13 @@ class Data extends AbstractHelper
{
$response
=
[
'threeDS2'
=>
false
];
if
(
!
empty
(
$type
))
{
$response
[
'type'
]
=
$type
;
}
if
(
$type
&&
$token
)
{
$response
=
[
"threeDS2"
=>
true
,
"type"
=>
$type
,
"token"
=>
$token
];
$response
[
'threeDS2'
]
=
true
;
$response
[
'token'
]
=
$token
;
}
return
json_encode
(
$response
);
...
...
Helper/Requests.php
View file @
3c5450eb
...
...
@@ -72,10 +72,10 @@ class Requests extends AbstractHelper
* @param $billingAddress
* @param $storeId
* @param null $payment
* @param null $
payload
* @param null $
additionalData
* @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
)
{
$request
[
'shopperReference'
]
=
$customerId
;
...
...
@@ -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
if
(
!
empty
(
$
payload
[
'additional_data'
]
[
'guestEmail'
]))
{
if
(
!
empty
(
$
additionalData
[
'guestEmail'
]))
{
if
(
$this
->
adyenHelper
->
isPaymentMethodOpenInvoiceMethod
(
$paymentMethod
)
&&
!
$this
->
adyenHelper
->
isPaymentMethodAfterpayTouchMethod
(
$paymentMethod
)
)
{
$request
[
'paymentMethod'
][
'personalDetails'
][
'shopperEmail'
]
=
$
payload
[
'additional_data'
]
[
'guestEmail'
];
$request
[
'paymentMethod'
][
'personalDetails'
][
'shopperEmail'
]
=
$
additionalData
[
'guestEmail'
];
}
else
{
$request
[
'shopperEmail'
]
=
$
payload
[
'additional_data'
]
[
'guestEmail'
];
$request
[
'shopperEmail'
]
=
$
additionalData
[
'guestEmail'
];
}
}
...
...
@@ -262,20 +262,20 @@ class Requests extends AbstractHelper
}
/**
* @param $request
* @param
array
$request
* @param $amount
* @param $currencyCode
* @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'
]
=
[
'currency'
=>
$currencyCode
,
'value'
=>
$this
->
adyenHelper
->
formatAmount
(
$amount
,
$currencyCode
)
];
$request
[
"reference"
]
=
$reference
;
$request
[
"fraudOffset"
]
=
"0"
;
...
...
@@ -302,23 +302,22 @@ class Requests extends AbstractHelper
* @param $store
* @return array
*/
public
function
buildThreeDS2Data
(
$request
=
[],
$
payload
,
$store
)
public
function
buildThreeDS2Data
(
$request
=
[],
$
additionalData
)
{
$request
[
'additionalData'
][
'allow3DS2'
]
=
true
;
$request
[
'origin'
]
=
$this
->
adyenHelper
->
getOrigin
();
$request
[
'channel'
]
=
'web'
;
$request
[
'browserInfo'
][
'screenWidth'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
SCREEN_WIDTH
];
$request
[
'browserInfo'
][
'screenHeight'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
SCREEN_HEIGHT
];
$request
[
'browserInfo'
][
'colorDepth'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
SCREEN_COLOR_DEPTH
];
$request
[
'browserInfo'
][
'timeZoneOffset'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
TIMEZONE_OFFSET
];
$request
[
'browserInfo'
][
'language'
]
=
$
payload
[
PaymentInterface
::
KEY_ADDITIONAL_DATA
]
[
AdyenCcDataAssignObserver
::
LANGUAGE
];
$request
[
'browserInfo'
][
'screenWidth'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
SCREEN_WIDTH
];
$request
[
'browserInfo'
][
'screenHeight'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
SCREEN_HEIGHT
];
$request
[
'browserInfo'
][
'colorDepth'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
SCREEN_COLOR_DEPTH
];
$request
[
'browserInfo'
][
'timeZoneOffset'
]
=
$
additionalData
[
AdyenCcDataAssignObserver
::
TIMEZONE_OFFSET
];
$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
;
}
else
{
$request
[
'browserInfo'
][
'javaEnabled'
]
=
false
;
}
return
$request
;
}
...
...
@@ -328,7 +327,7 @@ class Requests extends AbstractHelper
* @param $storeId
* @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
(
!
$this
->
adyenHelper
->
isCreditCardVaultEnabled
())
{
...
...
@@ -352,7 +351,8 @@ class Requests extends AbstractHelper
$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
;
}
}
...
...
@@ -363,7 +363,7 @@ class Requests extends AbstractHelper
/**
* @param $request
* @param $payment
* @param $storeId
* @param $storeId
buildCCData
* @return mixed
*/
public
function
buildCCData
(
$request
=
[],
$payload
,
$storeId
,
$areaCode
)
...
...
@@ -409,6 +409,15 @@ class Requests extends AbstractHelper
$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
*/
...
...
@@ -439,7 +448,9 @@ class Requests extends AbstractHelper
{
if
(
$this
->
adyenHelper
->
isCreditCardVaultEnabled
())
{
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
$request
[
'enableRecurring'
]
=
true
;
...
...
@@ -471,4 +482,21 @@ class Requests extends AbstractHelper
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
"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
);
...
...
Model/AdyenThreeDS2Process.php
View file @
3c5450eb
...
...
@@ -37,6 +37,22 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
*/
private
$adyenHelper
;
/**
* @var \Magento\Sales\Model\OrderFactory
*/
private
$orderFactory
;
/**
* @var
*/
private
$order
;
/**
* @var \Adyen\Payment\Logger\AdyenLogger
*/
private
$adyenLogger
;
/**
* AdyenThreeDS2Process constructor.
*
...
...
@@ -45,11 +61,15 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
*/
public
function
__construct
(
\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
->
adyenHelper
=
$adyenHelper
;
$this
->
orderFactory
=
$orderFactory
;
$this
->
adyenLogger
=
$adyenLogger
;
}
/**
...
...
@@ -68,8 +88,8 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
}
// Get payment and cart information from session
$
quote
=
$this
->
checkoutSession
->
getQuote
();
$payment
=
$
quote
->
getPayment
();
$
order
=
$this
->
getOrder
();
$payment
=
$
order
->
getPayment
();
// Init payments/details request
$result
=
[];
...
...
@@ -83,6 +103,7 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
// unset payment data from additional information
$payment
->
unsAdditionalInformation
(
"threeDS2PaymentData"
);
}
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'
));
}
...
...
@@ -95,11 +116,12 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
// Send the request
try
{
$client
=
$this
->
adyenHelper
->
initializeAdyenClient
(
$
quote
->
getStoreId
());
$client
=
$this
->
adyenHelper
->
initializeAdyenClient
(
$
order
->
getStoreId
());
$service
=
$this
->
adyenHelper
->
createAdyenCheckoutService
(
$client
);
$result
=
$service
->
paymentsDetails
(
$request
);
}
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'
));
}
...
...
@@ -111,19 +133,43 @@ class AdyenThreeDS2Process implements AdyenThreeDS2ProcessInterface
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
$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
$quote
->
save
();
$order
->
save
();
$response
=
[];
// 3DS2 flow is done, original place order flow can continue from frontend
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
*
* @return int|null Success.
*/
public
function
getSucess
()
public
function
getSuc
c
ess
()
{
return
$this
->
getData
(
self
::
SUCCESS
);
}
...
...
@@ -259,9 +259,9 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
/**
* 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
);
}
...
...
@@ -280,7 +280,7 @@ class Notification extends \Magento\Framework\Model\AbstractModel implements Not
/**
* Gets the Reason for the notification.
*
* @return
int
|null Reason.
* @return
string
|null Reason.
*/
public
function
getReason
()
{
...
...
Observer/AdyenCcDataAssignObserver.php
View file @
3c5450eb
...
...
@@ -46,6 +46,7 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
const
SCREEN_HEIGHT
=
'screen_height'
;
const
TIMEZONE_OFFSET
=
'timezone_offset'
;
const
LANGUAGE
=
'language'
;
const
GUEST_EMAIL
=
'guestEmail'
;
/**
* @var array
...
...
@@ -65,7 +66,8 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
self
::
SCREEN_WIDTH
,
self
::
SCREEN_HEIGHT
,
self
::
TIMEZONE_OFFSET
,
self
::
LANGUAGE
self
::
LANGUAGE
,
self
::
GUEST_EMAIL
];
/**
...
...
@@ -89,7 +91,7 @@ class AdyenCcDataAssignObserver extends AbstractDataAssignObserver
}
foreach
(
$this
->
additionalInformationList
as
$additionalInformationKey
)
{
if
(
!
empty
(
$additionalData
[
$additionalInformationKey
]))
{
if
(
isset
(
$additionalData
[
$additionalInformationKey
]))
{
$paymentInfo
->
setAdditionalInformation
(
$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 @@
"name"
:
"adyen/module-payment"
,
"description"
:
"Official Magento2 Plugin to connect to Payment Service Provider Adyen."
,
"type"
:
"magento2-module"
,
"version"
:
"
4.5.4
"
,
"version"
:
"
5.0.0
"
,
"license"
:
[
"OSL-3.0"
,
"AFL-3.0"
...
...
etc/adminhtml/di.xml
View file @
3c5450eb
...
...
@@ -10,7 +10,6 @@
<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\CcBackendAuthorizationDataBuilder
</item>
<item
name=
"vault"
xsi:type=
"string"
>
Adyen\Payment\Gateway\Request\VaultDataBuilder
</item>
</argument>
...
...
etc/adminhtml/system/adyen_cc.xml
View file @
3c5450eb
...
...
@@ -70,14 +70,6 @@
sortOrder=
"150"
>
<label>
Advanced Settings
</label>
<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"
showInWebsite=
"1"
showInStore=
"1"
>
<label>
Enable Installments
</label>
...
...
etc/config.xml
View file @
3c5450eb
...
...
@@ -47,7 +47,6 @@
<sort_order>
2
</sort_order>
<cctypes>
AE,VI,MC,DI
</cctypes>
<useccv>
1
</useccv>
<enable_moto>
0
</enable_moto>
<payment_action>
authorize
</payment_action>
<is_gateway>
1
</is_gateway>
<can_use_checkout>
1
</can_use_checkout>
...
...
@@ -91,7 +90,6 @@
<recurring_payment_type>
ONECLICK
</recurring_payment_type>
<payment_action>
authorize
</payment_action>
<useccv>
1
</useccv>
<enable_moto>
0
</enable_moto>
<is_gateway>
1
</is_gateway>
<can_use_checkout>
1
</can_use_checkout>
<can_authorize>
1
</can_authorize>
...
...
etc/di.xml
View file @
3c5450eb
...
...
@@ -550,12 +550,21 @@
<virtualType
name=
"AdyenPaymentCcAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<arguments>
<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=
"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>
</arguments>
</virtualType>
<virtualType
name=
"AdyenPaymentCcVaultAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<arguments>
<argument
name=
"builders"
xsi:type=
"array"
>
...
...
@@ -589,7 +598,15 @@
<virtualType
name=
"AdyenPaymentOneclickAuthorizeRequest"
type=
"Magento\Payment\Gateway\Request\BuilderComposite"
>
<arguments>
<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>
</arguments>
</virtualType>
...
...
@@ -1005,8 +1022,6 @@
type=
"Adyen\Payment\Model\AdyenRequestMerchantSession"
/>
<preference
for=
"Adyen\Payment\Api\AdyenInitiateTerminalApiInterface"
type=
"Adyen\Payment\Model\AdyenInitiateTerminalApi"
/>
<preference
for=
"Adyen\Payment\Api\AdyenPaymentProcessInterface"
type=
"Adyen\Payment\Model\AdyenPaymentProcess"
/>
<preference
for=
"Adyen\Payment\Api\AdyenThreeDS2ProcessInterface"
type=
"Adyen\Payment\Model\AdyenThreeDS2Process"
/>
<preference
for=
"Adyen\Payment\Api\AdyenOriginKeyInterface"
...
...
@@ -1014,4 +1029,7 @@
<type
name=
"Magento\Vault\Api\PaymentTokenRepositoryInterface"
>
<plugin
name=
"AdyenPaymentVaultDeleteToken"
type=
"Adyen\Payment\Plugin\PaymentVaultDeleteToken"
sortOrder=
"10"
/>
</type>
<type
name=
"Magento\Checkout\Api\PaymentInformationManagementInterface"
>
<plugin
name=
"AdyenPaymentInformationManagementAddPaymentInfo"
type=
"Adyen\Payment\Plugin\PaymentInformationManagement"
/>
</type>
</config>
etc/webapi.xml
View file @
3c5450eb
...
...
@@ -58,13 +58,6 @@
</resources>
</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"
>
<service
class=
"Adyen\Payment\Api\AdyenThreeDS2ProcessInterface"
method=
"initiate"
/>
<resources>
...
...
view/adminhtml/templates/form/cc.phtml
View file @
3c5450eb
...
...
@@ -61,6 +61,23 @@ echo $code; ?>" style="display:none">
echo
$code
;
?>
-expiryYear"
type=
"hidden"
name=
"payment[expiryYear]"
>
<input
id=
"
<?php
/* @noEscape */
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>
require
(
...
...
@@ -93,7 +110,7 @@ echo $code; ?>" style="display:none">
/*
* Initialize secure fields and set up the onChange callback to
* - 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
()
{
...
...
@@ -117,6 +134,7 @@ echo $code; ?>" style="display:none">
type
:
'
card
'
,
groupTypes
:
ccTypes
,
hideCVC
:
hideCVC
,
enableStoreDetails
:
"
<?php
echo
$block
->
allowRecurring
()
&&
!
$block
->
isVaultEnabled
();
?>
"
,
onChange
:
function
(
state
)
{
// When the state is valid update the input fields
...
...
@@ -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
;
?>
-expiryYear
"
).
val
(
state
.
data
.
paymentMethod
.
encryptedExpiryYear
);
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
)
{
...
...
view/adminhtml/web/css/order_create_styles.css
View file @
3c5450eb
...
...
@@ -66,31 +66,38 @@
display
:
inline-block
;
font-weight
:
bold
;
}
/* Checkout component Adyen v3.
0
.0 styling start */
/* Checkout component Adyen v3.
2
.0 styling start */
.adyen-checkout__field
{
display
:
block
;
margin-bottom
:
16px
}
.adyen-checkout__field--error
input
{
border-color
:
#d10244
;
color
:
#d10244
margin-bottom
:
16px
;
width
:
100%
}
.adyen-checkout__field
:last-
child
{
.adyen-checkout__field
:last-
of-type
{
margin-bottom
:
0
}
.adyen-checkout__label
{
display
:
block
}
.adyen-checkout__helper-text
,
.adyen-checkout__label__text
{
color
:
#00112c
;
display
:
block
;
font-size
:
.81em
;
font-weight
:
400
;
line-height
:
13px
;
padding-bottom
:
8
px
padding-bottom
:
5
px
}
.adyen-checkout__helper-text
{
color
:
#687282
}
.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
{
color
:
#06f
...
...
@@ -115,9 +122,9 @@
margin-right
:
8px
}
.adyen-checkout__spinner
{
-webkit-animation
:
rotateSpinner
2
s
infinite
linear
;
animation
:
rotateSpinner
2
s
infinite
linear
;
border
:
2
px
solid
#06f
;
-webkit-animation
:
rotateSpinner
1.5
s
infinite
linear
;
animation
:
rotateSpinner
1.5
s
infinite
linear
;
border
:
3
px
solid
#06f
;
border-radius
:
50%
;
border-top-color
:
transparent
;
height
:
43px
;
...
...
@@ -128,6 +135,7 @@
width
:
43px
}
.adyen-checkout__spinner--small
{
border-width
:
2px
;
height
:
16px
;
width
:
16px
}
...
...
@@ -169,15 +177,20 @@
position
:
absolute
}
.adyen-checkout__radio_group__label
{
color
:
inherit
;
display
:
block
;
font-size
:
.81em
;
font-weight
:
400
;
line-height
:
16px
;
margin-bottom
:
8px
;
overflow
:
visible
;
padding-bottom
:
0
;
padding-left
:
24px
;
position
:
relative
}
.adyen-checkout__label--focused
.adyen-checkout__radio_group__label
{
color
:
inherit
}
.adyen-checkout__radio_group__label
:before
{
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
...
...
@@ -187,9 +200,14 @@
left
:
0
;
position
:
absolute
;
top
:
0
;
transition
:
border-color
.
3
s
ease-out
;
transition
:
border-color
.
2s
ease-out
,
box-shadow
.2
s
ease-out
;
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
{
-webkit-transform
:
scale
(
0
);
background-color
:
#fff
;
...
...
@@ -203,9 +221,9 @@
position
:
absolute
;
top
:
5px
;
transform
:
scale
(
0
);
transition
:
-webkit-transform
.
3
s
ease-out
;
transition
:
transform
.
3
s
ease-out
;
transition
:
transform
.
3s
ease-out
,
-webkit-transform
.3
s
ease-out
;
transition
:
-webkit-transform
.
2
s
ease-out
;
transition
:
transform
.
2
s
ease-out
;
transition
:
transform
.
2s
ease-out
,
-webkit-transform
.2
s
ease-out
;
width
:
6px
}
.adyen-checkout__radio_group__label
:hover
{
...
...
@@ -215,13 +233,15 @@
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__label--selected
{
background-color
:
#06f
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
transition
:
all
.3s
ease-out
transition
:
all
.2s
ease-out
}
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:after
{
-webkit-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
{
border
:
1px
solid
#d10244
}
...
...
@@ -289,6 +309,14 @@
background-color
:
#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
{
border
:
1px
solid
#06f
;
box-shadow
:
0
0
0
2px
#99c2ff
...
...
@@ -296,15 +324,12 @@
.adyen-checkout__dropdown
{
font-size
:
1em
;
max-width
:
100%
;
width
:
200px
}
.adyen-checkout__dropdown--small
{
width
:
130px
}
.adyen-checkout__dropdown--large
{
width
:
300px
width
:
100%
}
.adyen-checkout__dropdown__button
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
...
...
@@ -312,8 +337,9 @@
height
:
40px
;
line-height
:
20px
;
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
;
user-select
:
none
;
width
:
100%
}
.adyen-checkout__dropdown__button__icon
{
...
...
@@ -341,15 +367,19 @@
.adyen-checkout__dropdown__list
{
border-radius
:
6px
;
box-shadow
:
0
2px
7px
rgba
(
0
,
15
,
45
,
.3
);
margin-top
:
2px
;
max-height
:
360px
;
max-height
:
375px
;
z-index
:
2
}
.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active
{
margin-top
:
2px
}
.adyen-checkout__dropdown__element
{
-moz-user-select
:
none
;
-ms-hyphens
:
auto
;
-ms-user-select
:
none
;
-webkit-hyphens
:
auto
;
-webkit-user-select
:
none
;
border
:
1px
solid
transparent
;
border-bottom-color
:
#e6e9eb
;
cursor
:
pointer
;
font-size
:
.81em
;
hyphens
:
auto
;
...
...
@@ -357,6 +387,7 @@
outline
:
0
;
padding
:
8px
;
transition
:
background
.2s
ease-out
,
border-color
.2s
ease-out
;
user-select
:
none
;
word-break
:
break-word
}
.adyen-checkout__dropdown__element
:last-child
{
...
...
@@ -365,10 +396,6 @@
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
,
.adyen-checkout__dropdown__element
:hover
{
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
{
background
:
rgba
(
0
,
102
,
255
,
.1
)
}
...
...
@@ -385,8 +412,16 @@
right
:
32px
}
.adyen-checkout__select-list
{
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
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
{
background
:
#fff
;
...
...
@@ -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
{
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
{
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
...
...
@@ -426,13 +473,23 @@
padding
:
5px
8px
;
position
:
relative
;
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
{
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
{
display
:
inline-
block
;
display
:
block
;
position
:
relative
}
.adyen-checkout__input-wrapper--block
{
...
...
@@ -453,20 +510,15 @@
.adyen-checkout-input__inline-validation--invalid
{
color
:
#d10244
}
.adyen-checkout__input--small
{
width
:
134px
}
.adyen-checkout__input--large
{
width
:
300px
}
.adyen-checkout__input--invalid
{
border-color
:
#d10244
}
.adyen-checkout__input--valid
{
border-bottom-color
:
#0abf53
}
.adyen-checkout__input--error
{
border-color
:
#d10244
.adyen-checkout__input--error
,
.adyen-checkout__input--error
:hover
,
.adyen-checkout__input--invalid
,
.adyen-checkout__input--invalid
:hover
{
border-color
:
#d10244
;
color
:
#d10244
}
.adyen-checkout__input
::-webkit-input-placeholder
{
color
:
#b9c4c9
;
...
...
@@ -484,22 +536,27 @@
color
:
#b9c4c9
;
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
;
box-shadow
:
0
0
0
2px
#99c2ff
}
.adyen-checkout__input
[
readonly
]
{
.adyen-checkout__input
[
readonly
]
,
.adyen-checkout__input
[
readonly
]
:hover
{
background-color
:
#e6e9eb
;
border-color
:
transparent
;
color
:
#687282
;
cursor
:
default
}
.adyen-checkout__fieldset
{
color
:
#687282
;
display
:
block
;
padding-bottom
:
30
px
;
padding-bottom
:
8
px
;
width
:
100%
}
.adyen-checkout__fieldset
:last-of-type
{
padding-bottom
:
0
}
.adyen-checkout__fieldset
+
.adyen-checkout__fieldset
{
margin-top
:
16px
}
.adyen-checkout__fieldset__title
{
color
:
#687282
;
display
:
block
;
...
...
@@ -507,9 +564,27 @@
font-weight
:
700
;
letter-spacing
:
1px
;
margin
:
0
;
padding
:
0
0
20
px
;
padding
:
0
0
8
px
;
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
{
color
:
#00112c
;
font-size
:
.81em
;
...
...
@@ -520,94 +595,63 @@
max-width
:
540px
}
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
{
margin
:
0
0
20px
}
.adyen-checkout__link--more-information
{
font-size
:
.81em
margin
:
0
0
8px
}
.adyen-checkout__applepay__button
{
height
:
40px
;
width
:
240px
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
:only-of-type
{
margin-bottom
:
0
}
.adyen-checkout__
card-input__form
{
transition
:
opacity
.25s
ease-out
.adyen-checkout__
open-invoice
.adyen-checkout__checkbox--consent-checkbox
{
margin
:
0
}
.adyen-checkout__
card__exp-cvc
{
.adyen-checkout__
open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
{
display
:
flex
}
.adyen-checkout__card__cardNumber
{
max-width
:
400px
}
.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__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
>
label
{
margin-right
:
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__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
{
color
:
#00112c
}
.adyen-checkout__giropay__no-results
{
color
:
#687282
;
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--billingAddress
{
padding-bottom
:
8px
}
.adyen-checkout__giropay__placeholder
{
color
:
#b9c4c9
;
display
:
block
;
font-weight
:
200
;
padding
:
0
0
0
2px
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--deliveryAddress
{
margin-top
:
24px
;
padding-bottom
:
8px
}
.adyen-checkout__giropay__loading
{
display
:
block
;
min-height
:
100px
.adyen-checkout__open-invoice
.adyen-checkout__input--separateDeliveryAddress
{
margin-bottom
:
0
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
display
:
inline-block
;
vertical-align
:
middle
.adyen-checkout__open-invoice
.adyen-checkout__field--dateOfBirth
{
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__giropay__loading-text
{
color
:
#687282
;
font-size
:
.81em
;
line-height
:
16px
;
vertical-align
:
middle
.adyen-checkout__open-invoice
.adyen-checkout__field--country
,
.adyen-checkout__open-invoice
.adyen-checkout__field--street
{
width
:
calc
(
70%
-
8px
)
}
.adyen-checkout__giropay__error
{
color
:
#d10244
;
font-size
:
.81em
.adyen-checkout__open-invoice
.adyen-checkout__field--houseNumberOrName
,
.adyen-checkout__open-invoice
.adyen-checkout__field--postalCode
{
width
:
calc
(
30%
-
8px
)
}
.adyen-checkout__button
{
background
:
#00112c
;
border
:
0
;
border-radius
:
6px
;
box-shadow
:
0
3px
4px
rgba
(
0
,
15
,
45
,
.2
);
color
:
#fff
;
cursor
:
pointer
;
font-size
:
1em
;
font-weight
:
7
00
;
font-weight
:
5
00
;
height
:
48px
;
margin
:
0
;
padding
:
15px
;
transition
:
background
.3s
ease-out
;
text-decoration
:
none
;
transition
:
background
.3s
ease-out
,
box-shadow
.3s
ease-out
;
width
:
100%
}
.adyen-checkout__button--pay
{
margin-top
:
24px
}
.adyen-checkout__button--standalone
{
margin-top
:
0
}
.adyen-checkout__button
:disabled
{
-moz-user-select
:
all
;
-ms-user-select
:
all
;
...
...
@@ -617,176 +661,255 @@
cursor
:
not-allowed
;
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
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#687282
;
box-shadow
:
none
;
outline
:
0
;
pointer-events
:
none
;
user-select
:
none
}
.adyen-checkout__button
.adyen-checkout__spinner
{
border-color
:
transparent
#fff
#fff
;
border-width
:
3px
border-color
:
transparent
#fff
#fff
}
.adyen-checkout__button__content
{
align-items
:
center
;
display
:
flex
;
justify-content
:
center
}
.adyen-checkout__phone-input
{
display
:
flex
}
.adyen-checkout__phone-input__prefix
{
margin-bottom
:
0
;
margin-right
:
.5em
}
.adyen-checkout__input--phone-number
{
margin-bottom
:
0
.adyen-checkout__button__icon
{
margin-right
:
12px
}
.adyen-checkout__iban-input__number
{
padding
:
5px
36px
5px
8px
;
text-transform
:
uppercase
.adyen-checkout__button__text
{
display
:
block
;
justify-content
:
center
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
.adyen-checkout__threeds2__challenge
,
.adyen-checkout__threeds2__challenge-container
{
background-color
:
transparent
;
box-sizing
:
border-box
;
.adyen-checkout__button.adyen-checkout__button--inline
{
display
:
block
;
overflow
:
auto
;
width
:
100%
font-size
:
.81em
;
height
:
auto
;
padding
:
10px
8px
;
width
:
auto
}
.adyen-checkout__threeds2__challenge-container--01
{
height
:
400px
;
width
:
250px
.adyen-checkout__button.adyen-checkout__button--secondary
{
background
:
rgba
(
0
,
102
,
255
,
.1
);
border
:
1px
solid
transparent
;
color
:
#06f
;
padding
:
10px
12px
}
.adyen-checkout__
threeds2__challenge-container--02
{
height
:
400px
;
width
:
390px
.adyen-checkout__
button.adyen-checkout__button--secondary
:hover
{
background
:
rgba
(
0
,
102
,
255
,
.2
)
;
box-shadow
:
none
}
.adyen-checkout__
threeds2__challenge-container--03
{
height
:
600px
;
width
:
500px
.adyen-checkout__
button.adyen-checkout__button--secondary
:active
,
.adyen-checkout__button.adyen-checkout__button--secondary
:active:hover
{
background
:
rgba
(
0
,
102
,
255
,
.3
)
;
box-shadow
:
none
}
.adyen-checkout__
threeds2__challenge-container--04
{
height
:
400px
;
width
:
600px
.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
{
background
:
#0abf53
;
color
:
#fff
}
.adyen-checkout__
threeds2_challenge-container--05
{
height
:
100%
;
width
:
100%
.adyen-checkout__
button.adyen-checkout__button--completed
.adyen-checkout__button__icon
{
-webkit-filter
:
brightness
(
0
)
invert
(
1
)
;
filter
:
brightness
(
0
)
invert
(
1
)
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
{
overflow
:
hidden
;
padding-top
:
56.25%
;
position
:
relative
.adyen-checkout__applepay__button
{
height
:
40px
;
width
:
240px
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
.adyen-checkout__iframe--threeDSIframe
{
border
:
0
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
.adyen-checkout__dropin
.adyen-checkout__applepay__button
{
width
:
100%
}
.adyen-checkout__qr-loader
{
background
:
#fff
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
padding
:
40px
;
text-align
:
center
.adyen-checkout__card-input__form
{
transition
:
opacity
.25s
ease-out
}
.adyen-checkout__qr-loader--app
{
border
:
0
;
border-radius
:
0
;
padding
:
0
.adyen-checkout__card__cardNumber
{
max-width
:
400px
}
.adyen-checkout__qr-loader__brand-logo
{
max-height
:
50px
;
width
:
110px
.adyen-checkout__card__cardNumber__input
{
padding
:
5px
8px
}
.adyen-checkout__qr-loader__subtitle
{
margin-top
:
32px
.adyen-checkout__card__exp-date__input--oneclick
{
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
{
color
:
#00112c
;
font-size
:
1em
;
line-height
:
19px
.adyen-checkout__card__holderName
,
.adyen-checkout__field--expiryDate
,
.adyen-checkout__field--storedCard
{
margin-bottom
:
0
}
.adyen-checkout__
qr-loader__payment_amount
{
font-weight
:
700
.adyen-checkout__
card__holderName
,
.adyen-checkout__store-details
{
margin-top
:
16px
}
.adyen-checkout__qr-loader__progress
{
background
:
#d4d9db
;
border-radius
:
25px
;
height
:
4px
;
margin
:
32px
auto
12px
;
padding-right
:
3%
;
width
:
152px
.adyen-checkout__field--cardNumber
.adyen-checkout__input--error
.adyen-checkout__card__cardNumber__brandIcon
{
display
:
none
}
.adyen-checkout__qr-loader__percentage
{
background
:
#06f
;
border-radius
:
25px
;
display
:
block
;
height
:
100%
.adyen-checkout__field--cardNumber
.adyen-checkout__input--valid
:not
(
.adyen-checkout__card__cardNumber__input--noBrand
)+
.adyen-checkout-input__inline-validation--valid
{
display
:
none
}
.adyen-checkout__
qr-loader__countdown
{
.adyen-checkout__
giropay__no-results
{
color
:
#687282
;
font-size
:
.81em
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
}
.adyen-checkout__qr-loader
>
.adyen-checkout__spinner__wrapper
{
margin
:
60px
0
.adyen-checkout__giropay__placeholder
{
color
:
#b9c4c9
;
display
:
block
;
font-weight
:
200
;
padding
:
0
0
0
2px
}
.adyen-checkout__qr-loader__separator__label
{
background
:
#fff
;
border-radius
:
100%
;
color
:
#687282
;
.adyen-checkout__giropay__loading
{
display
:
block
;
min-height
:
100px
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
display
:
inline-block
;
height
:
34px
;
line-height
:
34px
;
position
:
relative
;
width
:
34px
;
z-index
:
1
vertical-align
:
middle
}
.adyen-checkout__
qr-loader__separator__line
{
-webkit-transform
:
translateY
(
-17px
)
;
border-top
:
1px
solid
#d4d9db
;
display
:
block
;
transform
:
translateY
(
-17px
)
.adyen-checkout__
giropay__loading-text
{
color
:
#687282
;
font-size
:
.81em
;
line-height
:
16px
;
vertical-align
:
middle
}
.adyen-checkout__button.adyen-checkout__button--qr-loader
{
display
:
block
;
text-decoration
:
none
.adyen-checkout__giropay__error
{
color
:
#d10244
;
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
{
background
:
#fff
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
border-radius
:
12px
;
box-sizing
:
border-box
;
p
adding
:
20px
16px
56px
;
p
osition
:
relative
;
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
{
align-items
:
center
;
display
:
flex
;
justify-content
:
center
;
margin-bottom
:
16
px
;
margin-bottom
:
40
px
;
width
:
100%
}
.adyen-checkout__voucher-result__image__wrapper
{
display
:
inline-block
;
padding
:
8px
;
width
:
120px
display
:
block
;
height
:
48px
;
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
)
{
border-left
:
1px
solid
#d4d9db
.adyen-checkout__voucher-result__image__wrapper
:nth-child
(
2
)
:before
{
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
{
height
:
34px
}
.adyen-checkout__voucher-result__image__brand
{
height
:
60px
border-radius
:
3px
;
height
:
48px
}
.adyen-checkout__voucher-result__introduction
{
color
:
#00112c
;
...
...
@@ -818,52 +941,67 @@
display
:
block
;
font-weight
:
400
;
left
:
0
;
line-height
:
19px
;
margin
:
0
auto
;
position
:
absolute
;
right
:
0
;
top
:
-
14
px
;
top
:
-
2
px
;
user-select
:
none
;
width
:
auto
}
.adyen-checkout__voucher-result__code__label
:before
{
content
:
""
;
position
:
absolute
}
.adyen-checkout__voucher-result__code__label__text
{
background
:
#fff
;
color
:
#00112c
;
font-size
:
13px
;
letter-spacing
:
normal
;
line-height
:
1
;
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
{
-moz-user-select
:
all
;
-ms-user-select
:
all
;
-webkit-user-select
:
all
;
border
:
1px
solid
#e6e9eb
;
border-radius
:
6px
;
border-width
:
1px
0
;
color
:
#00112c
;
display
:
inline-block
;
font-size
:
1.5em
;
font-weight
:
700
;
letter-spacing
:
1px
;
line-height
:
19px
;
margin
:
20px
auto
16px
;
max-width
:
100%
;
min-width
:
200px
;
padding
:
28px
48px
24px
;
line-height
:
1.2
;
margin
:
0
auto
;
padding
:
16px
48px
;
position
:
relative
;
text-align
:
center
;
user-select
:
all
;
width
:
300px
width
:
100%
;
word-break
:
break-word
}
.adyen-checkout__voucher-result__details
{
list-style
:
none
;
margin
:
8px
auto
0
;
max-width
:
300px
;
margin
:
-1px
auto
0
;
padding
:
0
}
.adyen-checkout__voucher-result__details__item
{
border-top
:
1px
solid
#e6e9eb
;
color
:
#00112c
;
display
:
flex
;
font-size
:
.81em
;
justify-content
:
space-between
;
margin-bottom
:
16
px
;
padding
:
16px
24
px
;
word-break
:
break-word
}
.adyen-checkout__voucher-result__details__item
:last-child
{
...
...
@@ -878,9 +1016,189 @@
max-width
:
50%
;
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
;
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
;
margin-top
:
-1px
;
position
:
relative
;
...
...
@@ -891,13 +1209,13 @@
outline
:
0
}
.adyen-checkout__payment-method--selected
+
.adyen-checkout__payment-method
,
.adyen-checkout__payment-method
:first-child
{
border-top-left-radius
:
6
px
;
border-top-right-radius
:
6
px
;
border-top-left-radius
:
12
px
;
border-top-right-radius
:
12
px
;
margin-top
:
0
}
.adyen-checkout__payment-method--next-selected
,
.adyen-checkout__payment-method
:last-child
{
border-bottom-left-radius
:
6
px
;
border-bottom-right-radius
:
6
px
;
border-bottom-left-radius
:
12
px
;
border-bottom-right-radius
:
12
px
;
margin-bottom
:
0
}
.adyen-checkout__payment-method--loading
{
...
...
@@ -907,31 +1225,51 @@
opacity
:
.9
}
.adyen-checkout__payment-method--disabling
{
opacity
:
.
5
opacity
:
.
3
}
.adyen-checkout__payment-method__header
{
align-items
:
center
;
color
:
#00112c
;
display
:
flex
;
flex-wrap
:
nowrap
;
font-size
:
1em
;
font-weight
:
400
;
padding
:
16px
;
justify-content
:
space-between
;
padding
:
16px
16px
16px
48px
;
position
:
relative
;
transition
:
background
.1s
ease-out
;
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
{
color
:
#687282
;
margin-left
:
5px
}
.adyen-checkout__payment-method--selected
{
background
:
#f7f8f9
;
border
:
1px
solid
#
d4d9d
b
;
border-radius
:
6
px
;
border
:
1px
solid
#
e6e9e
b
;
border-radius
:
12
px
;
cursor
:
default
;
margin
:
8px
0
;
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
{
font-weight
:
500
}
...
...
@@ -939,11 +1277,17 @@
padding
:
0
16px
}
.adyen-checkout__payment-method__details__content
{
margin
:
6px
0
22
px
margin
:
0
0
16
px
}
.adyen-checkout__payment-method__image__wrapper
{
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
{
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
...
...
@@ -958,12 +1302,47 @@
.adyen-checkout__payment-method__image
{
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
{
align-items
:
center
;
background
:
#e6e9eb
;
color
:
#00112c
;
display
:
flex
;
font-size
:
.94
em
;
font-size
:
1
em
;
justify-content
:
space-between
;
margin-bottom
:
10px
;
padding
:
8px
16px
...
...
@@ -994,18 +1373,19 @@
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
50%
;
box-shadow
:
inset
0
1px
3px
rgba
(
0
,
27
,
43
,
.15
)
;
height
:
18
px
;
height
:
16px
;
left
:
16
px
;
position
:
absolute
;
right
:
20px
;
transition
:
border-color
.3s
ease-out
;
width
:
18px
transition
:
border-color
.2s
ease-out
,
box-shadow
.2s
ease-out
;
width
:
16px
}
.adyen-checkout__payment-method--standalone
.adyen-checkout__payment-method__radio
{
display
:
none
}
.adyen-checkout__payment-method__radio
:after
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
0
);
background-color
:
#fff
;
border-radius
:
50%
;
box-shadow
:
0
1px
1px
rgba
(
0
,
15
,
45
,
.25
);
content
:
""
;
display
:
block
;
height
:
6px
;
...
...
@@ -1021,31 +1401,31 @@
width
:
6px
}
.adyen-checkout__payment-method__radio
:hover
{
border-color
:
#06f
;
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
;
cursor
:
pointer
}
.adyen-checkout__payment-method__radio--selected
{
background-color
:
#06f
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
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
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
1
);
transform
:
translateY
(
-50%
)
scale
(
1
)
}
.adyen-checkout__button--pay
{
margin-bottom
:
16px
}
.adyen-checkout__status
{
align-items
:
center
;
background-color
:
#fff
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
color
:
#001
b2b
;
color
:
#001
12c
;
display
:
flex
;
flex-direction
:
column
;
font-size
:
1
6px
;
font-size
:
1
em
;
height
:
350px
;
justify-content
:
center
;
margin
:
0
;
...
...
@@ -1072,4 +1452,5 @@
.adyen-checkout__link
:hover
{
text-decoration
:
underline
}
/* 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 @@
/* General styling for checkout */
.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
{
margin-bottom
:
10px
;
}
.checkout-component-dock
{
max-width
:
250px
;
margin-bottom
:
10px
;
}
.message.error.hpp-message
{
margin-top
:
10px
;
display
:
none
;
}
/* Checkout component Adyen v3.0.0 styling start */
/* Checkout component Adyen v3.2.0 styling start */
.adyen-checkout__field
{
display
:
block
;
margin-bottom
:
16px
}
.adyen-checkout__field--error
input
{
border-color
:
#d10244
;
color
:
#d10244
margin-bottom
:
16px
;
width
:
100%
}
.adyen-checkout__field
:last-
child
{
.adyen-checkout__field
:last-
of-type
{
margin-bottom
:
0
}
.adyen-checkout__label
{
display
:
block
}
.adyen-checkout__helper-text
,
.adyen-checkout__label__text
{
color
:
#00112c
;
display
:
block
;
font-size
:
.81em
;
font-weight
:
400
;
line-height
:
13px
;
padding-bottom
:
8
px
padding-bottom
:
5
px
}
.adyen-checkout__helper-text
{
color
:
#687282
}
.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
{
color
:
#06f
...
...
@@ -268,9 +279,9 @@
margin-right
:
8px
}
.adyen-checkout__spinner
{
-webkit-animation
:
rotateSpinner
2
s
infinite
linear
;
animation
:
rotateSpinner
2
s
infinite
linear
;
border
:
2
px
solid
#06f
;
-webkit-animation
:
rotateSpinner
1.5
s
infinite
linear
;
animation
:
rotateSpinner
1.5
s
infinite
linear
;
border
:
3
px
solid
#06f
;
border-radius
:
50%
;
border-top-color
:
transparent
;
height
:
43px
;
...
...
@@ -281,6 +292,7 @@
width
:
43px
}
.adyen-checkout__spinner--small
{
border-width
:
2px
;
height
:
16px
;
width
:
16px
}
...
...
@@ -322,15 +334,20 @@
position
:
absolute
}
.adyen-checkout__radio_group__label
{
color
:
inherit
;
display
:
block
;
font-size
:
.81em
;
font-weight
:
400
;
line-height
:
16px
;
margin-bottom
:
8px
;
overflow
:
visible
;
padding-bottom
:
0
;
padding-left
:
24px
;
position
:
relative
}
.adyen-checkout__label--focused
.adyen-checkout__radio_group__label
{
color
:
inherit
}
.adyen-checkout__radio_group__label
:before
{
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
...
...
@@ -340,9 +357,14 @@
left
:
0
;
position
:
absolute
;
top
:
0
;
transition
:
border-color
.
3
s
ease-out
;
transition
:
border-color
.
2s
ease-out
,
box-shadow
.2
s
ease-out
;
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
{
-webkit-transform
:
scale
(
0
);
background-color
:
#fff
;
...
...
@@ -356,9 +378,9 @@
position
:
absolute
;
top
:
5px
;
transform
:
scale
(
0
);
transition
:
-webkit-transform
.
3
s
ease-out
;
transition
:
transform
.
3
s
ease-out
;
transition
:
transform
.
3s
ease-out
,
-webkit-transform
.3
s
ease-out
;
transition
:
-webkit-transform
.
2
s
ease-out
;
transition
:
transform
.
2
s
ease-out
;
transition
:
transform
.
2s
ease-out
,
-webkit-transform
.2
s
ease-out
;
width
:
6px
}
.adyen-checkout__radio_group__label
:hover
{
...
...
@@ -368,13 +390,15 @@
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:before
,
.adyen-checkout__radio_group__label--selected
{
background-color
:
#06f
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
transition
:
all
.3s
ease-out
transition
:
all
.2s
ease-out
}
.adyen-checkout__radio_group__input
:checked
+
.adyen-checkout__radio_group__label
:after
{
-webkit-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
{
border
:
1px
solid
#d10244
}
...
...
@@ -442,6 +466,14 @@
background-color
:
#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
{
border
:
1px
solid
#06f
;
box-shadow
:
0
0
0
2px
#99c2ff
...
...
@@ -449,15 +481,12 @@
.adyen-checkout__dropdown
{
font-size
:
1em
;
max-width
:
100%
;
width
:
200px
}
.adyen-checkout__dropdown--small
{
width
:
130px
}
.adyen-checkout__dropdown--large
{
width
:
300px
width
:
100%
}
.adyen-checkout__dropdown__button
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
...
...
@@ -465,8 +494,9 @@
height
:
40px
;
line-height
:
20px
;
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
;
user-select
:
none
;
width
:
100%
}
.adyen-checkout__dropdown__button__icon
{
...
...
@@ -494,15 +524,19 @@
.adyen-checkout__dropdown__list
{
border-radius
:
6px
;
box-shadow
:
0
2px
7px
rgba
(
0
,
15
,
45
,
.3
);
margin-top
:
2px
;
max-height
:
360px
;
max-height
:
375px
;
z-index
:
2
}
.adyen-checkout__dropdown__list.adyen-checkout__dropdown__list--active
{
margin-top
:
2px
}
.adyen-checkout__dropdown__element
{
-moz-user-select
:
none
;
-ms-hyphens
:
auto
;
-ms-user-select
:
none
;
-webkit-hyphens
:
auto
;
-webkit-user-select
:
none
;
border
:
1px
solid
transparent
;
border-bottom-color
:
#e6e9eb
;
cursor
:
pointer
;
font-size
:
.81em
;
hyphens
:
auto
;
...
...
@@ -510,6 +544,7 @@
outline
:
0
;
padding
:
8px
;
transition
:
background
.2s
ease-out
,
border-color
.2s
ease-out
;
user-select
:
none
;
word-break
:
break-word
}
.adyen-checkout__dropdown__element
:last-child
{
...
...
@@ -518,10 +553,6 @@
.adyen-checkout__dropdown__element
:active
,
.adyen-checkout__dropdown__element
:focus
,
.adyen-checkout__dropdown__element
:hover
{
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
{
background
:
rgba
(
0
,
102
,
255
,
.1
)
}
...
...
@@ -538,8 +569,16 @@
right
:
32px
}
.adyen-checkout__select-list
{
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
6px
;
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
{
background
:
#fff
;
...
...
@@ -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
{
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
{
background
:
#fff
;
border
:
1px
solid
#b9c4c9
;
...
...
@@ -579,13 +630,23 @@
padding
:
5px
8px
;
position
:
relative
;
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
{
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
{
display
:
inline-
block
;
display
:
block
;
position
:
relative
}
.adyen-checkout__input-wrapper--block
{
...
...
@@ -606,20 +667,15 @@
.adyen-checkout-input__inline-validation--invalid
{
color
:
#d10244
}
.adyen-checkout__input--small
{
width
:
134px
}
.adyen-checkout__input--large
{
width
:
300px
}
.adyen-checkout__input--invalid
{
border-color
:
#d10244
}
.adyen-checkout__input--valid
{
border-bottom-color
:
#0abf53
}
.adyen-checkout__input--error
{
border-color
:
#d10244
.adyen-checkout__input--error
,
.adyen-checkout__input--error
:hover
,
.adyen-checkout__input--invalid
,
.adyen-checkout__input--invalid
:hover
{
border-color
:
#d10244
;
color
:
#d10244
}
.adyen-checkout__input
::-webkit-input-placeholder
{
color
:
#b9c4c9
;
...
...
@@ -637,22 +693,27 @@
color
:
#b9c4c9
;
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
;
box-shadow
:
0
0
0
2px
#99c2ff
}
.adyen-checkout__input
[
readonly
]
{
.adyen-checkout__input
[
readonly
]
,
.adyen-checkout__input
[
readonly
]
:hover
{
background-color
:
#e6e9eb
;
border-color
:
transparent
;
color
:
#687282
;
cursor
:
default
}
.adyen-checkout__fieldset
{
color
:
#687282
;
display
:
block
;
padding-bottom
:
30
px
;
padding-bottom
:
8
px
;
width
:
100%
}
.adyen-checkout__fieldset
:last-of-type
{
padding-bottom
:
0
}
.adyen-checkout__fieldset
+
.adyen-checkout__fieldset
{
margin-top
:
16px
}
.adyen-checkout__fieldset__title
{
color
:
#687282
;
display
:
block
;
...
...
@@ -660,9 +721,27 @@
font-weight
:
700
;
letter-spacing
:
1px
;
margin
:
0
;
padding
:
0
0
20
px
;
padding
:
0
0
8
px
;
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
{
color
:
#00112c
;
font-size
:
.81em
;
...
...
@@ -673,94 +752,63 @@
max-width
:
540px
}
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
{
margin
:
0
0
20px
}
.adyen-checkout__link--more-information
{
font-size
:
.81em
margin
:
0
0
8px
}
.adyen-checkout__applepay__button
{
height
:
40px
;
width
:
240px
.adyen-checkout__open-invoice
.adyen-checkout__checkbox
:only-of-type
{
margin-bottom
:
0
}
.adyen-checkout__
card-input__form
{
transition
:
opacity
.25s
ease-out
.adyen-checkout__
open-invoice
.adyen-checkout__checkbox--consent-checkbox
{
margin
:
0
}
.adyen-checkout__
card__exp-cvc
{
.adyen-checkout__
open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
{
display
:
flex
}
.adyen-checkout__card__cardNumber
{
max-width
:
400px
}
.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__open-invoice
.adyen-checkout__field--gender
.adyen-checkout__radio_group
>
label
{
margin-right
:
16px
}
.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
{
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__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
{
color
:
#00112c
}
.adyen-checkout__giropay__no-results
{
color
:
#687282
;
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--billingAddress
{
padding-bottom
:
8px
}
.adyen-checkout__giropay__placeholder
{
color
:
#b9c4c9
;
display
:
block
;
font-weight
:
200
;
padding
:
0
0
0
2px
.adyen-checkout__open-invoice
.adyen-checkout__fieldset--deliveryAddress
{
margin-top
:
24px
;
padding-bottom
:
8px
}
.adyen-checkout__giropay__loading
{
display
:
block
;
min-height
:
100px
.adyen-checkout__open-invoice
.adyen-checkout__input--separateDeliveryAddress
{
margin-bottom
:
0
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
display
:
inline-block
;
vertical-align
:
middle
.adyen-checkout__open-invoice
.adyen-checkout__field--dateOfBirth
{
width
:
calc
(
50%
-
8px
)
}
.adyen-checkout__giropay__loading-text
{
color
:
#687282
;
font-size
:
.81em
;
line-height
:
16px
;
vertical-align
:
middle
.adyen-checkout__open-invoice
.adyen-checkout__field--country
,
.adyen-checkout__open-invoice
.adyen-checkout__field--street
{
width
:
calc
(
70%
-
8px
)
}
.adyen-checkout__giropay__error
{
color
:
#d10244
;
font-size
:
.81em
.adyen-checkout__open-invoice
.adyen-checkout__field--houseNumberOrName
,
.adyen-checkout__open-invoice
.adyen-checkout__field--postalCode
{
width
:
calc
(
30%
-
8px
)
}
.adyen-checkout__button
{
background
:
#00112c
;
border
:
0
;
border-radius
:
6px
;
box-shadow
:
0
3px
4px
rgba
(
0
,
15
,
45
,
.2
);
color
:
#fff
;
cursor
:
pointer
;
font-size
:
1em
;
font-weight
:
7
00
;
font-weight
:
5
00
;
height
:
48px
;
margin
:
0
;
padding
:
15px
;
transition
:
background
.3s
ease-out
;
text-decoration
:
none
;
transition
:
background
.3s
ease-out
,
box-shadow
.3s
ease-out
;
width
:
100%
}
.adyen-checkout__button--pay
{
margin-top
:
24px
}
.adyen-checkout__button--standalone
{
margin-top
:
0
}
.adyen-checkout__button
:disabled
{
-moz-user-select
:
all
;
-ms-user-select
:
all
;
...
...
@@ -770,176 +818,255 @@
cursor
:
not-allowed
;
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
{
-moz-user-select
:
none
;
-ms-user-select
:
none
;
-webkit-user-select
:
none
;
background
:
#687282
;
box-shadow
:
none
;
outline
:
0
;
pointer-events
:
none
;
user-select
:
none
}
.adyen-checkout__button
.adyen-checkout__spinner
{
border-color
:
transparent
#fff
#fff
;
border-width
:
3px
border-color
:
transparent
#fff
#fff
}
.adyen-checkout__button__content
{
align-items
:
center
;
display
:
flex
;
justify-content
:
center
}
.adyen-checkout__phone-input
{
display
:
flex
}
.adyen-checkout__phone-input__prefix
{
margin-bottom
:
0
;
margin-right
:
.5em
}
.adyen-checkout__input--phone-number
{
margin-bottom
:
0
.adyen-checkout__button__icon
{
margin-right
:
12px
}
.adyen-checkout__iban-input__number
{
padding
:
5px
36px
5px
8px
;
text-transform
:
uppercase
.adyen-checkout__button__text
{
display
:
block
;
justify-content
:
center
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
white-space
:
nowrap
}
.adyen-checkout__threeds2__challenge
,
.adyen-checkout__threeds2__challenge-container
{
background-color
:
transparent
;
box-sizing
:
border-box
;
.adyen-checkout__button.adyen-checkout__button--inline
{
display
:
block
;
overflow
:
auto
;
width
:
100%
font-size
:
.81em
;
height
:
auto
;
padding
:
10px
8px
;
width
:
auto
}
.adyen-checkout__threeds2__challenge-container--01
{
height
:
400px
;
width
:
250px
.adyen-checkout__button.adyen-checkout__button--secondary
{
background
:
rgba
(
0
,
102
,
255
,
.1
);
border
:
1px
solid
transparent
;
color
:
#06f
;
padding
:
10px
12px
}
.adyen-checkout__
threeds2__challenge-container--02
{
height
:
400px
;
width
:
390px
.adyen-checkout__
button.adyen-checkout__button--secondary
:hover
{
background
:
rgba
(
0
,
102
,
255
,
.2
)
;
box-shadow
:
none
}
.adyen-checkout__
threeds2__challenge-container--03
{
height
:
600px
;
width
:
500px
.adyen-checkout__
button.adyen-checkout__button--secondary
:active
,
.adyen-checkout__button.adyen-checkout__button--secondary
:active:hover
{
background
:
rgba
(
0
,
102
,
255
,
.3
)
;
box-shadow
:
none
}
.adyen-checkout__
threeds2__challenge-container--04
{
height
:
400px
;
width
:
600px
.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
{
background
:
#0abf53
;
color
:
#fff
}
.adyen-checkout__
threeds2_challenge-container--05
{
height
:
100%
;
width
:
100%
.adyen-checkout__
button.adyen-checkout__button--completed
.adyen-checkout__button__icon
{
-webkit-filter
:
brightness
(
0
)
invert
(
1
)
;
filter
:
brightness
(
0
)
invert
(
1
)
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
{
overflow
:
hidden
;
padding-top
:
56.25%
;
position
:
relative
.adyen-checkout__applepay__button
{
height
:
40px
;
width
:
240px
}
.adyen-checkout__threeds2__challenge.adyen-checkout__threeds2__challenge--05
.adyen-checkout__iframe--threeDSIframe
{
border
:
0
;
height
:
100%
;
left
:
0
;
position
:
absolute
;
top
:
0
;
.adyen-checkout__dropin
.adyen-checkout__applepay__button
{
width
:
100%
}
.adyen-checkout__qr-loader
{
background
:
#fff
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
padding
:
40px
;
text-align
:
center
.adyen-checkout__card-input__form
{
transition
:
opacity
.25s
ease-out
}
.adyen-checkout__qr-loader--app
{
border
:
0
;
border-radius
:
0
;
padding
:
0
.adyen-checkout__card__cardNumber
{
max-width
:
400px
}
.adyen-checkout__qr-loader__brand-logo
{
max-height
:
50px
;
width
:
110px
.adyen-checkout__card__cardNumber__input
{
padding
:
5px
8px
}
.adyen-checkout__qr-loader__subtitle
{
margin-top
:
32px
.adyen-checkout__card__exp-date__input--oneclick
{
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
{
color
:
#00112c
;
font-size
:
1em
;
line-height
:
19px
.adyen-checkout__card__holderName
,
.adyen-checkout__field--expiryDate
,
.adyen-checkout__field--storedCard
{
margin-bottom
:
0
}
.adyen-checkout__
qr-loader__payment_amount
{
font-weight
:
700
.adyen-checkout__
card__holderName
,
.adyen-checkout__store-details
{
margin-top
:
16px
}
.adyen-checkout__qr-loader__progress
{
background
:
#d4d9db
;
border-radius
:
25px
;
height
:
4px
;
margin
:
32px
auto
12px
;
padding-right
:
3%
;
width
:
152px
.adyen-checkout__field--cardNumber
.adyen-checkout__input--error
.adyen-checkout__card__cardNumber__brandIcon
{
display
:
none
}
.adyen-checkout__qr-loader__percentage
{
background
:
#06f
;
border-radius
:
25px
;
display
:
block
;
height
:
100%
.adyen-checkout__field--cardNumber
.adyen-checkout__input--valid
:not
(
.adyen-checkout__card__cardNumber__input--noBrand
)+
.adyen-checkout-input__inline-validation--valid
{
display
:
none
}
.adyen-checkout__
qr-loader__countdown
{
.adyen-checkout__
giropay__no-results
{
color
:
#687282
;
font-size
:
.81em
display
:
block
;
font-size
:
.81em
;
padding
:
0
0
0
2px
}
.adyen-checkout__qr-loader
>
.adyen-checkout__spinner__wrapper
{
margin
:
60px
0
.adyen-checkout__giropay__placeholder
{
color
:
#b9c4c9
;
display
:
block
;
font-weight
:
200
;
padding
:
0
0
0
2px
}
.adyen-checkout__qr-loader__separator__label
{
background
:
#fff
;
border-radius
:
100%
;
color
:
#687282
;
.adyen-checkout__giropay__loading
{
display
:
block
;
min-height
:
100px
}
.adyen-checkout__giropay__loading
.adyen-checkout__spinner__wrapper
{
display
:
inline-block
;
height
:
34px
;
line-height
:
34px
;
position
:
relative
;
width
:
34px
;
z-index
:
1
vertical-align
:
middle
}
.adyen-checkout__
qr-loader__separator__line
{
-webkit-transform
:
translateY
(
-17px
)
;
border-top
:
1px
solid
#d4d9db
;
display
:
block
;
transform
:
translateY
(
-17px
)
.adyen-checkout__
giropay__loading-text
{
color
:
#687282
;
font-size
:
.81em
;
line-height
:
16px
;
vertical-align
:
middle
}
.adyen-checkout__button.adyen-checkout__button--qr-loader
{
display
:
block
;
text-decoration
:
none
.adyen-checkout__giropay__error
{
color
:
#d10244
;
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
{
background
:
#fff
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
border-radius
:
12px
;
box-sizing
:
border-box
;
p
adding
:
20px
16px
56px
;
p
osition
:
relative
;
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
{
align-items
:
center
;
display
:
flex
;
justify-content
:
center
;
margin-bottom
:
16
px
;
margin-bottom
:
40
px
;
width
:
100%
}
.adyen-checkout__voucher-result__image__wrapper
{
display
:
inline-block
;
padding
:
8px
;
width
:
120px
display
:
block
;
height
:
48px
;
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
)
{
border-left
:
1px
solid
#d4d9db
.adyen-checkout__voucher-result__image__wrapper
:nth-child
(
2
)
:before
{
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
{
height
:
34px
}
.adyen-checkout__voucher-result__image__brand
{
height
:
60px
border-radius
:
3px
;
height
:
48px
}
.adyen-checkout__voucher-result__introduction
{
color
:
#00112c
;
...
...
@@ -971,52 +1098,67 @@
display
:
block
;
font-weight
:
400
;
left
:
0
;
line-height
:
19px
;
margin
:
0
auto
;
position
:
absolute
;
right
:
0
;
top
:
-
14
px
;
top
:
-
2
px
;
user-select
:
none
;
width
:
auto
}
.adyen-checkout__voucher-result__code__label
:before
{
content
:
""
;
position
:
absolute
}
.adyen-checkout__voucher-result__code__label__text
{
background
:
#fff
;
color
:
#00112c
;
font-size
:
13px
;
letter-spacing
:
normal
;
line-height
:
1
;
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
{
-moz-user-select
:
all
;
-ms-user-select
:
all
;
-webkit-user-select
:
all
;
border
:
1px
solid
#e6e9eb
;
border-radius
:
6px
;
border-width
:
1px
0
;
color
:
#00112c
;
display
:
inline-block
;
font-size
:
1.5em
;
font-weight
:
700
;
letter-spacing
:
1px
;
line-height
:
19px
;
margin
:
20px
auto
16px
;
max-width
:
100%
;
min-width
:
200px
;
padding
:
28px
48px
24px
;
line-height
:
1.2
;
margin
:
0
auto
;
padding
:
16px
48px
;
position
:
relative
;
text-align
:
center
;
user-select
:
all
;
width
:
300px
width
:
100%
;
word-break
:
break-word
}
.adyen-checkout__voucher-result__details
{
list-style
:
none
;
margin
:
8px
auto
0
;
max-width
:
300px
;
margin
:
-1px
auto
0
;
padding
:
0
}
.adyen-checkout__voucher-result__details__item
{
border-top
:
1px
solid
#e6e9eb
;
color
:
#00112c
;
display
:
flex
;
font-size
:
.81em
;
justify-content
:
space-between
;
margin-bottom
:
16
px
;
padding
:
16px
24
px
;
word-break
:
break-word
}
.adyen-checkout__voucher-result__details__item
:last-child
{
...
...
@@ -1031,9 +1173,189 @@
max-width
:
50%
;
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
;
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
;
margin-top
:
-1px
;
position
:
relative
;
...
...
@@ -1044,13 +1366,13 @@
outline
:
0
}
.adyen-checkout__payment-method--selected
+
.adyen-checkout__payment-method
,
.adyen-checkout__payment-method
:first-child
{
border-top-left-radius
:
6
px
;
border-top-right-radius
:
6
px
;
border-top-left-radius
:
12
px
;
border-top-right-radius
:
12
px
;
margin-top
:
0
}
.adyen-checkout__payment-method--next-selected
,
.adyen-checkout__payment-method
:last-child
{
border-bottom-left-radius
:
6
px
;
border-bottom-right-radius
:
6
px
;
border-bottom-left-radius
:
12
px
;
border-bottom-right-radius
:
12
px
;
margin-bottom
:
0
}
.adyen-checkout__payment-method--loading
{
...
...
@@ -1060,31 +1382,51 @@
opacity
:
.9
}
.adyen-checkout__payment-method--disabling
{
opacity
:
.
5
opacity
:
.
3
}
.adyen-checkout__payment-method__header
{
align-items
:
center
;
color
:
#00112c
;
display
:
flex
;
flex-wrap
:
nowrap
;
font-size
:
1em
;
font-weight
:
400
;
padding
:
16px
;
justify-content
:
space-between
;
padding
:
16px
16px
16px
48px
;
position
:
relative
;
transition
:
background
.1s
ease-out
;
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
{
color
:
#687282
;
margin-left
:
5px
}
.adyen-checkout__payment-method--selected
{
background
:
#f7f8f9
;
border
:
1px
solid
#
d4d9d
b
;
border-radius
:
6
px
;
border
:
1px
solid
#
e6e9e
b
;
border-radius
:
12
px
;
cursor
:
default
;
margin
:
8px
0
;
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
{
font-weight
:
500
}
...
...
@@ -1092,11 +1434,17 @@
padding
:
0
16px
}
.adyen-checkout__payment-method__details__content
{
margin
:
6px
0
22
px
margin
:
0
0
16
px
}
.adyen-checkout__payment-method__image__wrapper
{
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
{
border
:
1px
solid
rgba
(
0
,
27
,
43
,
.17
);
...
...
@@ -1111,12 +1459,47 @@
.adyen-checkout__payment-method__image
{
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
{
align-items
:
center
;
background
:
#e6e9eb
;
color
:
#00112c
;
display
:
flex
;
font-size
:
.94
em
;
font-size
:
1
em
;
justify-content
:
space-between
;
margin-bottom
:
10px
;
padding
:
8px
16px
...
...
@@ -1147,18 +1530,19 @@
background-color
:
#fff
;
border
:
1px
solid
#b9c4c9
;
border-radius
:
50%
;
box-shadow
:
inset
0
1px
3px
rgba
(
0
,
27
,
43
,
.15
)
;
height
:
18
px
;
height
:
16px
;
left
:
16
px
;
position
:
absolute
;
right
:
20px
;
transition
:
border-color
.3s
ease-out
;
width
:
18px
transition
:
border-color
.2s
ease-out
,
box-shadow
.2s
ease-out
;
width
:
16px
}
.adyen-checkout__payment-method--standalone
.adyen-checkout__payment-method__radio
{
display
:
none
}
.adyen-checkout__payment-method__radio
:after
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
0
);
background-color
:
#fff
;
border-radius
:
50%
;
box-shadow
:
0
1px
1px
rgba
(
0
,
15
,
45
,
.25
);
content
:
""
;
display
:
block
;
height
:
6px
;
...
...
@@ -1174,31 +1558,31 @@
width
:
6px
}
.adyen-checkout__payment-method__radio
:hover
{
border-color
:
#06f
;
border-color
:
#99a3ad
;
box-shadow
:
0
0
0
2px
#d4d9db
;
cursor
:
pointer
}
.adyen-checkout__payment-method__radio--selected
{
background-color
:
#06f
;
border
:
0
;
box-shadow
:
inset
0
1px
2px
rgba
(
0
,
0
,
0
,
.26
);
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
{
-webkit-transform
:
translateY
(
-50%
)
scale
(
1
);
transform
:
translateY
(
-50%
)
scale
(
1
)
}
.adyen-checkout__button--pay
{
margin-bottom
:
16px
}
.adyen-checkout__status
{
align-items
:
center
;
background-color
:
#fff
;
border
:
1px
solid
#d4d9db
;
border-radius
:
6px
;
color
:
#001
b2b
;
color
:
#001
12c
;
display
:
flex
;
flex-direction
:
column
;
font-size
:
1
6px
;
font-size
:
1
em
;
height
:
350px
;
justify-content
:
center
;
margin
:
0
;
...
...
@@ -1225,6 +1609,7 @@
.adyen-checkout__link
:hover
{
text-decoration
:
underline
}
/* Checkout component Adyen styling end */
/* 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(
function
(
urlBuilder
,
storage
)
{
'
use strict
'
;
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
* 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(
checkoutCardComponentScriptTag
.
id
=
"
AdyenCheckoutCardComponentScript
"
;
checkoutCardComponentScriptTag
.
src
=
self
.
getCheckoutCardComponentSource
();
checkoutCardComponentScriptTag
.
type
=
"
text/javascript
"
;
document
.
body
.
appendChild
(
checkoutCardComponentScriptTag
);
document
.
head
.
appendChild
(
checkoutCardComponentScriptTag
);
if
(
this
.
isGooglePayEnabled
())
{
var
googlepayscript
=
document
.
createElement
(
'
script
'
);
googlepayscript
.
src
=
"
https://pay.google.com/gp/p/js/pay.js
"
;
googlepayscript
.
type
=
"
text/javascript
"
;
document
.
body
.
appendChild
(
googlepayscript
);
document
.
head
.
appendChild
(
googlepayscript
);
}
},
getCheckoutCardComponentSource
:
function
()
{
...
...
view/frontend/web/js/view/payment/method-renderer/adyen-cc-method.js
View file @
3c5450eb
...
...
@@ -37,9 +37,10 @@ define(
'
Magento_Paypal/js/action/set-payment-method
'
,
'
Magento_Checkout/js/action/select-payment-method
'
,
'
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
'
;
...
...
@@ -65,10 +66,7 @@ define(
// initialize adyen component for general use
this
.
checkout
=
new
AdyenCheckout
({
locale
:
this
.
getLocale
(),
risk
:
{
enabled
:
false
}
locale
:
this
.
getLocale
()
});
return
this
;
...
...
@@ -195,7 +193,6 @@ define(
*/
renderThreeDS2Component
:
function
(
type
,
token
)
{
var
self
=
this
;
var
threeDS2Node
=
document
.
getElementById
(
'
threeDS2Container
'
);
if
(
type
==
"
IdentifyShopper
"
)
{
...
...
@@ -203,9 +200,11 @@ define(
.
create
(
'
threeDS2DeviceFingerprint
'
,
{
fingerprintToken
:
token
,
onComplete
:
function
(
result
)
{
self
.
threeDS2IdentifyComponent
.
unmount
();
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
messageContainer
);
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
});
...
...
@@ -237,18 +236,19 @@ define(
challengeToken
:
token
,
size
:
'
05
'
,
onComplete
:
function
(
result
)
{
self
.
threeDS2ChallengeComponent
.
unmount
();
self
.
closeModal
(
popupModal
);
fullScreenLoader
.
startLoader
();
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
);
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
messageContainer
);
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
});
},
onError
:
function
(
error
)
{
self
.
closeModal
(
popupModal
);
console
.
log
(
JSON
.
stringify
(
error
));
}
});
...
...
@@ -263,6 +263,7 @@ define(
popupModal
.
modal
(
"
closeModal
"
);
$
(
'
.threeDS2Modal
'
).
remove
();
$
(
'
.modals-overlay
'
).
remove
();
$
(
'
body
'
).
removeClass
(
'
_has-modal
'
);
// reconstruct the threeDS2Modal container again otherwise component can not find the threeDS2Modal
$
(
'
#threeDS2Wrapper
'
).
append
(
"
<div id=
\"
threeDS2Modal
\"
>
"
+
...
...
@@ -270,11 +271,10 @@ define(
"
</div>
"
);
},
/**
* Builds the payment details part of the payment information reqeust
*
* @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 data for place order
* @returns {{method: *}}
*/
get
Cc
Data
:
function
()
{
getData
:
function
()
{
const
browserInfo
=
threeDS2Utils
.
getBrowserInfo
();
var
data
=
{
...
...
@@ -297,24 +297,9 @@ define(
'
language
'
:
browserInfo
.
language
}
};
this
.
vaultEnabler
.
visitAdditionalData
(
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 {boolean}
...
...
@@ -342,13 +327,20 @@ define(
fullScreenLoader
.
startLoader
();
self
.
isPlaceOrderActionAllowed
(
false
);
threeds2
.
processPayment
(
this
.
getCcData
()).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
);
}).
error
(
function
()
{
self
.
getPlaceOrderDeferredObject
()
.
fail
(
function
()
{
fullScreenLoader
.
stopLoader
();
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
...
...
@@ -356,32 +348,16 @@ define(
*/
validateThreeDS2OrPlaceOrder
:
function
(
responseJSON
)
{
var
self
=
this
;
var
response
=
JSON
.
parse
(
responseJSON
);
if
(
!!
response
.
threeDS2
)
{
// render component
self
.
renderThreeDS2Component
(
response
.
type
,
response
.
token
);
}
else
{
self
.
getPlaceOrderDeferredObject
()
.
fail
(
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
)
);
}
}
);
}
},
/**
* Validates the payment date when clicking the pay button
...
...
view/frontend/web/js/view/payment/method-renderer/adyen-hpp-method.js
View file @
3c5450eb
...
...
@@ -82,10 +82,7 @@ define(
* @type {AdyenCheckout}
*/
self
.
checkoutComponent
=
new
AdyenCheckout
({
locale
:
self
.
getLocale
(),
risk
:
{
enabled
:
false
}
locale
:
self
.
getLocale
()
});
// reset variable:
...
...
view/frontend/web/js/view/payment/method-renderer/adyen-oneclick-method.js
View file @
3c5450eb
...
...
@@ -39,9 +39,10 @@ define(
'
Magento_Checkout/js/model/url-builder
'
,
'
mage/storage
'
,
'
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
'
;
...
...
@@ -200,16 +201,19 @@ define(
fullScreenLoader
.
startLoader
();
self
.
isPlaceOrderActionAllowed
(
false
);
threeds2
.
processPayment
(
this
.
getCcData
()).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
);
}).
error
(
function
()
{
self
.
getPlaceOrderDeferredObject
()
.
fail
(
function
()
{
fullScreenLoader
.
stopLoader
();
self
.
isPlaceOrderActionAllowed
(
true
);
});
return
false
;
}
).
done
(
function
(
response
)
{
self
.
afterPlaceOrder
();
self
.
validateThreeDS2OrPlaceOrder
(
response
);
}
);
}
return
false
;
},
...
...
@@ -276,32 +280,6 @@ define(
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
* @param responseJSON
...
...
@@ -314,18 +292,8 @@ define(
// render component
self
.
renderThreeDS2Component
(
response
.
type
,
response
.
token
);
}
else
{
this
.
getPlaceOrderDeferredObject
()
.
fail
(
function
()
{
self
.
isPlaceOrderActionAllowed
(
true
);
}
).
done
(
function
()
{
self
.
afterPlaceOrder
();
window
.
location
.
replace
(
url
.
build
(
window
.
checkoutConfig
.
payment
[
quote
.
paymentMethod
().
method
].
redirectUrl
));
}
);
}
},
/**
* Rendering the 3DS2.0 components
...
...
@@ -349,7 +317,8 @@ define(
onComplete
:
function
(
result
)
{
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
getMessageContainer
());
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
});
...
...
@@ -380,7 +349,8 @@ define(
fullScreenLoader
.
startLoader
();
threeds2
.
processThreeDS2
(
result
.
data
).
done
(
function
(
responseJSON
)
{
self
.
validateThreeDS2OrPlaceOrder
(
responseJSON
)
}).
error
(
function
()
{
}).
fail
(
function
(
result
)
{
errorProcessor
.
process
(
result
,
self
.
getMessageContainer
());
self
.
isPlaceOrderActionAllowed
(
true
);
fullScreenLoader
.
stopLoader
();
});
...
...
@@ -421,14 +391,22 @@ define(
*/
getData
:
function
()
{
var
self
=
this
;
var
browserInfo
=
threeDS2Utils
.
getBrowserInfo
();
return
{
"
method
"
:
self
.
method
,
additional_data
:
{
variant
:
variant
(),
recurring_detail_reference
:
recurringDetailReference
(),
store_cc
:
true
,
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 @@
<!-- /ko -->
<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
id=
"threeDS2Wrapper"
>
...
...
view/frontend/web/template/payment/google-pay-form.html
View file @
3c5450eb
...
...
@@ -51,7 +51,7 @@
<!--/ko-->
</div>
<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() -->
Google Pay is not available
<!--/ko-->
</div>
...
...
view/frontend/web/template/payment/hpp-form.html
View file @
3c5450eb
...
...
@@ -55,7 +55,7 @@
<fieldset
class=
"fieldset"
data-bind=
'attr: {id: "payment_fieldset_" + $parent.getCode() + "_" + value}'
>
<!-- ko if: hasIssuersAvailable() -->
<!-- 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 ifnot: isIdeal() -->
<label
data-bind=
"attr: {'for': 'issuerId'}"
class=
"label"
>
...
...
@@ -101,7 +101,7 @@
</div>
<!--/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 if: isPaymentMethodAfterPay() -->
...
...
@@ -128,7 +128,7 @@
</div>
<!--/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 if: isPaymentMethodOtherOpenInvoiceMethod() -->
...
...
@@ -218,7 +218,7 @@
<!--/ko-->
<!-- 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 if: isAch() -->
...
...
view/frontend/web/template/payment/oneclick-form.html
View file @
3c5450eb
...
...
@@ -81,7 +81,7 @@
</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 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