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
14b4cb63
Commit
14b4cb63
authored
Nov 01, 2018
by
attilak
Committed by
Rik ter Beek
Dec 21, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Changes based on code review
parent
99397b67
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
60 additions
and
337 deletions
+60
-337
Gateway/Http/Client/TransactionPayment.php
Gateway/Http/Client/TransactionPayment.php
+3
-9
Helper/Data.php
Helper/Data.php
+28
-16
view/frontend/web/css/styles.css
view/frontend/web/css/styles.css
+4
-0
view/frontend/web/js/adyen.checkout.js
view/frontend/web/js/adyen.checkout.js
+0
-287
view/frontend/web/js/view/payment/method-renderer/adyen-cc-method.js
...nd/web/js/view/payment/method-renderer/adyen-cc-method.js
+1
-2
view/frontend/web/template/payment/cc-form.html
view/frontend/web/template/payment/cc-form.html
+24
-23
No files found.
Gateway/Http/Client/TransactionPayment.php
View file @
14b4cb63
...
...
@@ -30,12 +30,6 @@ use Magento\Payment\Gateway\Http\ClientInterface;
*/
class
TransactionPayment
implements
ClientInterface
{
/**
* @var \Adyen\Client
*/
protected
$client
;
/**
* PaymentRequest constructor.
*
...
...
@@ -59,8 +53,6 @@ class TransactionPayment implements ClientInterface
$this
->
_adyenLogger
=
$adyenLogger
;
$this
->
_recurringType
=
$recurringType
;
$this
->
_appState
=
$context
->
getAppState
();
$this
->
client
=
$this
->
_adyenHelper
->
initializeAdyenClient
();
}
/**
...
...
@@ -72,7 +64,9 @@ class TransactionPayment implements ClientInterface
{
$request
=
$transferObject
->
getBody
();
$service
=
new
\Adyen\Service\Checkout
(
$this
->
client
);
$client
=
$this
->
_adyenHelper
->
initializeAdyenClient
();
$service
=
new
\Adyen\Service\Checkout
(
$client
);
try
{
$response
=
$service
->
payments
(
$request
);
...
...
Helper/Data.php
View file @
14b4cb63
...
...
@@ -1307,21 +1307,21 @@ class Data extends AbstractHelper
// initialize client
$apiKey
=
$this
->
getAPIKey
(
$storeId
);
$client
=
new
\Adyen\
Client
();
$client
->
setApplicationName
(
"Magento 2 plugin"
);
$client
->
setXApiKey
(
$apiKey
);
$client
=
$this
->
createAdyen
Client
();
$client
->
setApplicationName
(
"Magento 2 plugin"
);
$client
->
setXApiKey
(
$apiKey
);
$client
->
setAdyenPaymentSource
(
$this
->
getModuleName
(),
$this
->
getModuleVersion
());
$client
->
setAdyenPaymentSource
(
$this
->
getModuleName
(),
$this
->
getModuleVersion
());
$client
->
setExternalPlatform
(
$this
->
productMetadata
->
getName
(),
$this
->
productMetadata
->
getVersion
());
$client
->
setExternalPlatform
(
$this
->
productMetadata
->
getName
(),
$this
->
productMetadata
->
getVersion
());
if
(
$this
->
isDemoMode
(
$storeId
))
{
$client
->
setEnvironment
(
\Adyen\Environment
::
TEST
);
}
else
{
$client
->
setEnvironment
(
\Adyen\Environment
::
LIVE
);
}
if
(
$this
->
isDemoMode
(
$storeId
))
{
$client
->
setEnvironment
(
\Adyen\Environment
::
TEST
);
}
else
{
$client
->
setEnvironment
(
\Adyen\Environment
::
LIVE
);
}
$client
->
setLogger
(
$this
->
adyenLogger
);
$client
->
setLogger
(
$this
->
adyenLogger
);
return
$client
;
}
...
...
@@ -1338,6 +1338,14 @@ class Data extends AbstractHelper
return
$client
;
}
/**
* @return \Adyen\Client
* @throws \Adyen\AdyenException
*/
private
function
createAdyenClient
()
{
return
new
\Adyen\Client
();
}
/**
* Retrieve origin keys for platform's base url
*
...
...
@@ -1353,8 +1361,7 @@ class Data extends AbstractHelper
if
(
!
$originKey
=
$this
->
cache
->
load
(
"Adyen_origin_key_for_"
.
$domain
))
{
$originKey
=
""
;
if
(
$originKeys
=
$this
->
getOriginKeys
(
$domain
))
{
$originKey
=
$originKeys
[
$domain
];
if
(
$originKey
=
$this
->
getOriginKeyForUrl
(
$domain
))
{
$this
->
cache
->
save
(
$originKey
,
"Adyen_origin_key_for_"
.
$domain
,
array
(),
60
*
60
*
24
);
}
}
...
...
@@ -1363,13 +1370,13 @@ class Data extends AbstractHelper
}
/**
* Get origin key
s
for a specific url using the adyen api library client
* Get origin key for a specific url using the adyen api library client
*
* @param $url
* @return mixed
* @throws \Adyen\AdyenException
*/
private
function
getOriginKey
s
(
$url
)
private
function
getOriginKey
ForUrl
(
$url
)
{
$params
=
array
(
"originDomains"
=>
array
(
...
...
@@ -1381,7 +1388,12 @@ class Data extends AbstractHelper
$service
=
$this
->
adyenServiceFactory
->
createCheckoutUtility
(
$client
);
$respone
=
$service
->
originKeys
(
$params
);
return
$respone
[
'originKeys'
];
if
(
empty
(
$originKey
=
$respone
[
'originKeys'
][
$url
]))
{
$originKey
=
""
;
}
return
$originKey
;
}
/**
...
...
view/frontend/web/css/styles.css
View file @
14b4cb63
...
...
@@ -178,6 +178,10 @@
font-weight
:
400
;
}
#adyen-cc-form
.fieldset
>
.holdername.field
{
margin-bottom
:
10px
;
}
#adyen-cc-form
.helper-text
{
font-size
:
11px
;
color
:
rgb
(
144
,
162
,
189
);
...
...
view/frontend/web/js/adyen.checkout.js
deleted
100644 → 0
View file @
99397b67
var
AdyenCheckout
=
(
function
()
{
'
use strict
'
;
return
{
oneClickForms
:
[],
dobDateFormat
:
"
yy-mm-dd
"
,
securedFieldsData
:
{},
allowedCards
:
[],
cseEncryptedForm
:
null
,
checkout
:
null
,
updateCardType
:
function
(
cardType
,
friendlyName
)
{
$
(
"
.cse-cardtype
"
).
removeClass
(
"
cse-cardtype-style-active
"
);
if
(
cardType
===
"
unknown
"
)
{
return
;
}
var
activeCard
=
document
.
getElementById
(
'
cse-card-
'
+
cardType
);
if
(
activeCard
!==
null
)
{
activeCard
.
className
=
"
cse-cardtype cse-cardtype-style-active cse-cardtype-
"
+
cardType
;
}
},
enableCardTypeDetection
:
function
(
allowedCards
,
cardLogosContainer
)
{
var
cardTypesHTML
=
""
;
this
.
allowedCards
=
allowedCards
;
for
(
var
i
=
allowedCards
.
length
;
i
--
>
0
;
)
{
cardTypesHTML
=
cardTypesHTML
+
this
.
getCardSpan
(
allowedCards
[
i
]
);
}
cardLogosContainer
.
innerHTML
=
cardTypesHTML
;
},
getCardSpan
:
function
(
type
)
{
return
"
<span id=
\"
cse-card-
"
+
type
+
"
\"
class=
\"
cse-cardtype cse-cardtype-style-active cse-cardtype-
"
+
type
+
"
\"
></span>
"
;
},
getCardBrand
:
function
()
{
if
(
this
.
securedFieldsData
.
brand
)
{
return
this
.
securedFieldsData
.
brand
;
}
var
creditCardNumberElement
=
document
.
getElementById
(
'
creditCardNumber
'
);
if
(
creditCardNumberElement
)
{
var
creditCardNumber
=
creditCardNumberElement
.
value
.
replace
(
/ /g
,
''
);
return
window
.
adyen
.
cardTypes
.
determine
(
creditCardNumber
);
}
},
isAllowedCard
:
function
()
{
var
brand
=
this
.
getCardBrand
();
return
(
brand
!==
null
&&
this
.
allowedCards
.
indexOf
(
brand
)
!==
-
1
);
},
validateForm
:
function
()
{
var
paymentMethod
=
$
(
'
input[type=radio][name=paymentMethod]:checked
'
).
val
();
if
(
paymentMethod
===
""
)
{
window
.
alert
(
"
Please select a payment method
"
);
return
false
;
}
// Check if it is a valid card and encrypt
if
(
paymentMethod
===
"
adyen_cc
"
)
{
if
(
!
this
.
isAllowedCard
()
)
{
window
.
alert
(
'
This credit card is not allowed
'
);
return
false
;
}
if
(
this
.
cseEncryptedForm
)
{
// CSE
this
.
fillCSEToken
(
this
.
cseEncryptedForm
);
}
else
{
// SECURED FIELDS
$
(
'
input[name="encryptedCardNumber"]
'
).
val
(
this
.
securedFieldsData
.
new
.
cardNumber
);
$
(
'
input[name="encryptedExpiryMonth"]
'
).
val
(
this
.
securedFieldsData
.
new
.
expiryMonth
);
$
(
'
input[name="encryptedExpiryYear"]
'
).
val
(
this
.
securedFieldsData
.
new
.
expiryYear
);
$
(
'
input[name="encryptedSecurityCode"]
'
).
val
(
this
.
securedFieldsData
.
new
.
securityCode
);
}
}
else
if
(
paymentMethod
.
indexOf
(
"
adyen_oneclick_
"
)
===
0
)
{
var
recurringReference
=
paymentMethod
.
slice
(
"
adyen_oneclick_
"
.
length
);
$
(
"
#selectedReference
"
).
val
(
recurringReference
);
if
(
this
.
oneClickForms
[
recurringReference
]
)
{
// CSE
this
.
fillCSEToken
(
this
.
oneClickForms
[
recurringReference
]
);
}
else
{
$
(
'
input[name="encryptedSecurityCode"]
'
).
val
(
this
.
securedFieldsData
[
recurringReference
].
securityCode
);
}
}
else
{
// if issuerId is present let the customer select it
var
issuer
=
$
(
'
#p_method_adyen_hpp_
'
+
paymentMethod
+
'
_issuer
'
);
if
(
issuer
)
{
if
(
issuer
.
val
()
===
""
)
{
window
.
alert
(
'
Please select issuer
'
);
return
false
;
}
}
}
// Remove SF injected elements
$
(
'
#encrypted-hostedCardNumberField
'
).
remove
();
$
(
'
#encrypted-month
'
).
remove
();
$
(
'
#encrypted-year
'
).
remove
();
$
(
'
#encrypted-hostedSecurityCodeField
'
).
remove
();
$
(
'
input[name="txvariant"]
'
).
remove
();
return
true
;
},
fillCSEToken
:
function
(
form
)
{
var
cseToken
=
form
.
encrypt
();
if
(
cseToken
===
false
)
{
window
.
alert
(
'
This credit card is not valid
'
);
return
false
;
}
$
(
"
#cseToken
"
).
val
(
cseToken
);
},
/**
* Set Custom values for certain payment methods
*/
setCustomPaymentMethodValues
:
function
()
{
var
paymentMethod
=
$
(
'
input[type=radio][name=paymentMethod]:checked
'
).
val
();
var
dob
=
$
(
'
#p_method_adyen_hpp_
'
+
paymentMethod
+
'
_dob
'
);
if
(
dob
)
{
$
(
"
#dob
"
).
val
(
dob
.
val
()
);
}
var
ssn
=
$
(
'
#p_method_adyen_hpp_
'
+
paymentMethod
+
'
_ssn
'
);
if
(
ssn
)
{
$
(
"
#socialSecurityNumber
"
).
val
(
ssn
.
val
()
);
}
},
createForm
:
function
()
{
// The form element to encrypt.
var
form
=
document
.
getElementById
(
'
adyen-encrypted-form
'
);
// Form and encryption options. See adyen.encrypt.simple.html for details.
var
options
=
{};
options
.
cvcIgnoreBins
=
'
6703
'
;
// Ignore CVC for BCMC
// Create the form.
// Note that the method is on the adyen object, not the adyen.encrypt object.
this
.
cseEncryptedForm
=
window
.
adyen
.
createEncryptedForm
(
form
,
options
);
this
.
cseEncryptedForm
.
addCardTypeDetection
(
this
.
updateCardType
);
return
this
.
cseEncryptedForm
;
},
createOneClickForm
:
function
(
recurringReference
)
{
// The form element to encrypt.
var
form
=
document
.
getElementById
(
'
adyen-encrypted-form
'
);
// Form and encryption options. See adyen.encrypt.simple.html for details.
var
options
=
{};
options
.
fieldNameAttribute
=
"
data-encrypted-name-
"
+
recurringReference
;
options
.
enableValidations
=
false
;
// Create the form.
// Note that the method is on the adyen object, not the adyen.encrypt object.
var
encryptedForm
=
window
.
adyen
.
createEncryptedForm
(
form
,
options
);
this
.
oneClickForms
[
recurringReference
]
=
encryptedForm
;
return
encryptedForm
;
},
/**
* Create DatePicker for Date of Birth field
*
* @param element
*/
createDobDatePicker
:
function
(
element
)
{
$
(
"
.
"
+
element
).
datepicker
(
{
dateFormat
:
this
.
dobDateFormat
,
changeMonth
:
true
,
changeYear
:
true
,
yearRange
:
"
-120:+0
"
}
);
},
togglePaymentMethod
:
function
(
paymentMethod
)
{
$
(
"
.payment_method_details
"
).
hide
();
$
(
"
.chckt-pm__details
"
).
hide
();
$
(
"
#dd_method_
"
+
paymentMethod
).
show
();
$
(
"
#adyen_hpp_
"
+
paymentMethod
+
"
_container
"
).
show
();
},
createDfValue
:
function
()
{
window
.
dfDo
(
"
dfValue
"
);
},
createSecuredFieldsForm
:
function
(
originKey
,
rootNode
)
{
var
self
=
this
;
var
securedFieldsConfiguration
=
{
configObject
:
{
originKey
:
originKey
,
cardGroupTypes
:
self
.
allowedCards
},
rootNode
:
rootNode
};
var
securedFields
=
window
.
csf
(
securedFieldsConfiguration
);
securedFields
.
onBrand
(
function
(
brandObject
)
{
if
(
brandObject
.
brand
)
{
self
.
securedFieldsData
.
brand
=
brandObject
.
brand
;
self
.
updateCardType
(
brandObject
.
brand
,
null
);
}
}
);
window
.
addEventListener
(
"
message
"
,
this
.
securedFieldsListener
(
this
),
false
);
return
securedFields
;
},
securedFieldsListener
:
function
(
self
)
{
return
function
(
message
)
{
if
(
!
(
"
data
"
in
message
)
)
{
return
;
}
try
{
var
data
=
JSON
.
parse
(
message
.
data
);
if
(
"
encryptionSuccess
"
in
data
&&
data
.
encryptionSuccess
===
true
)
{
var
fieldName
=
data
.
cseKey
;
var
encryptedData
=
data
[
fieldName
];
var
securedFieldsData
=
self
.
securedFieldsData
;
var
parts
=
fieldName
.
split
(
"
-
"
);
var
card
=
"
new
"
;
if
(
parts
.
length
===
2
)
{
card
=
parts
[
1
];
}
if
(
!
(
card
in
securedFieldsData
)
)
{
securedFieldsData
[
card
]
=
{};
}
switch
(
data
.
fieldType
)
{
case
"
hostedCardNumberField
"
:
securedFieldsData
[
card
].
cardNumber
=
encryptedData
;
break
;
case
"
month
"
:
securedFieldsData
[
card
].
expiryMonth
=
encryptedData
;
break
;
case
"
year
"
:
securedFieldsData
[
card
].
expiryYear
=
encryptedData
;
break
;
case
"
hostedSecurityCodeField
"
:
securedFieldsData
[
card
].
securityCode
=
encryptedData
;
break
;
}
}
}
catch
(
e
)
{
//not json data
}
};
},
initiateCheckout
:
function
(
locale
)
{
var
configuration
=
{
locale
:
locale
// shopper's locale
};
this
.
checkout
=
new
Adyen
.
Checkout
(
configuration
);
},
initiateIdeal
:
function
(
idealItems
)
{
var
idealNode
=
document
.
getElementById
(
'
adyen_hpp_ideal_container
'
);
var
ideal
=
this
.
checkout
.
create
(
'
ideal
'
,
{
items
:
idealItems
,
// The array of issuers coming from the /paymentMethods api call
showImage
:
true
,
// Optional, defaults to true
onChange
:
handleChange
// Gets triggered whenever a user selects a bank// Gets triggered once the state is valid
});
function
handleChange
(
event
)
{
var
issuerIdField
=
document
.
getElementById
(
'
issuerId
'
);
var
issuerId
=
event
.
data
.
issuer
;
issuerIdField
.
value
=
issuerId
;
}
try
{
ideal
.
mount
(
idealNode
);
}
catch
(
e
)
{
console
.
log
(
'
Something went wrong trying to mount the iDEAL component: ${e}
'
);
}
}
};
})();
view/frontend/web/js/view/payment/method-renderer/adyen-cc-method.js
View file @
14b4cb63
...
...
@@ -30,8 +30,7 @@ define(
'
Magento_Checkout/js/model/quote
'
,
'
Adyen_Payment/js/model/installments
'
,
'
mage/url
'
,
'
Adyen_Payment/js/adyen.2.0.0
'
,
'
Adyen_Payment/js/adyen.checkout
'
'
Adyen_Payment/js/adyen.2.0.0
'
],
function
(
$
,
ko
,
Component
,
customer
,
creditCardData
,
additionalValidators
,
quote
,
installments
,
url
)
{
...
...
view/frontend/web/template/payment/cc-form.html
View file @
14b4cb63
...
...
@@ -68,29 +68,6 @@
<br/>
<!-- /ko -->
<div
class=
"field holdername type"
>
<label
data-bind=
"attr: {for: 'creditCardHolderName'}"
class=
"label"
>
<span>
<!-- ko text: $t('Credit Card Owner')--><!-- /ko -->
</span>
</label>
<div
class=
"control"
>
<input
type=
"text"
class=
"input-text required-entry"
data-encrypted-name=
"holderName"
value=
""
data-bind=
"attr: {
id: 'creditCardHolderName',
title: $t('Credit Card Owner'),
placeholder: $t('Credit Card Owner'),
'data-container': getCode() + '-cc-owner'
},
enable: isActive($parents),
value: creditCardOwner,
valueUpdate: 'keyup' "
data-validate=
"{required:true}"
/>
</div>
</div>
<div
class=
"field type"
>
<label
data-bind=
"attr: {for: getCode() + '_cc_type'}"
class=
"label"
>
<span>
<!-- ko text: $t('Credit Card Type')--><!-- /ko -->
</span>
...
...
@@ -120,6 +97,30 @@
"
>
</div>
</div>
<div
class=
"field holdername type"
>
<label
data-bind=
"attr: {for: 'creditCardHolderName'}"
class=
"label"
>
<span>
<!-- ko text: $t('Credit Card Owner')--><!-- /ko -->
</span>
</label>
<div
class=
"control"
>
<input
type=
"text"
class=
"input-text required-entry"
data-encrypted-name=
"holderName"
value=
""
data-bind=
"attr: {
id: 'creditCardHolderName',
title: $t('Credit Card Owner'),
placeholder: $t('Credit Card Owner'),
'data-container': getCode() + '-cc-owner'
},
enable: isActive($parents),
value: creditCardOwner,
valueUpdate: 'keyup' "
data-validate=
"{required:true}"
/>
</div>
</div>
<div
class=
"field number cardContainerField"
>
<div
afterRender=
"renderSecureFields()"
data-bind=
"attr: { id: 'cardContainer'}"
></div>
</div>
...
...
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