We will be off from 27/1 (Monday) to 31/1 (Friday) (GMT +7) for our Tet Holiday (Lunar New Year) in our country

Commit bddfa80f authored by Alessio Zampatti's avatar Alessio Zampatti Committed by GitHub

Merge pull request #172 from Adyen/recurring-cse

Fixed notifications received for Recurring contracts, CSE token not sent if the date is not updated.
parents ce18e7eb 0b4a91f1
...@@ -287,9 +287,12 @@ class Json extends \Magento\Framework\App\Action\Action ...@@ -287,9 +287,12 @@ class Json extends \Magento\Framework\App\Action\Action
$pspReference = trim($response['pspReference']); $pspReference = trim($response['pspReference']);
$eventCode = trim($response['eventCode']); $eventCode = trim($response['eventCode']);
$success = trim($response['success']); $success = trim($response['success']);
$originalReference = null;
if(isset($response['originalReference'])) {
$originalReference = trim($response['originalReference']);
}
$notification = $this->_objectManager->create('Adyen\Payment\Model\Notification'); $notification = $this->_objectManager->create('Adyen\Payment\Model\Notification');
return $notification->isDuplicate($pspReference, $eventCode, $success); return $notification->isDuplicate($pspReference, $eventCode, $success, $originalReference);
} }
/** /**
......
This diff is collapsed.
...@@ -84,11 +84,12 @@ class Notification extends \Magento\Framework\Model\AbstractModel ...@@ -84,11 +84,12 @@ class Notification extends \Magento\Framework\Model\AbstractModel
* @param $pspReference * @param $pspReference
* @param $eventCode * @param $eventCode
* @param $success * @param $success
* @param $originalReference
* @return bool (true if the notification is a duplicate) * @return bool (true if the notification is a duplicate)
*/ */
public function isDuplicate($pspReference, $eventCode, $success) public function isDuplicate($pspReference, $eventCode, $success, $originalReference)
{ {
$result = $this->getResource()->getNotification($pspReference, $eventCode, $success); $result = $this->getResource()->getNotification($pspReference, $eventCode, $success, $originalReference);
return (empty($result)) ? false : true; return (empty($result)) ? false : true;
} }
......
...@@ -40,15 +40,17 @@ class Notification extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb ...@@ -40,15 +40,17 @@ class Notification extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
* @param $pspReference * @param $pspReference
* @param $eventCode * @param $eventCode
* @param $success * @param $success
* @param $originalReference
* @return array * @return array
*/ */
public function getNotification($pspReference, $eventCode, $success) public function getNotification($pspReference, $eventCode, $success, $originalReference)
{ {
$select = $this->getConnection()->select() $select = $this->getConnection()->select()
->from(['notification' => $this->getTable('adyen_notification')]) ->from(['notification' => $this->getTable('adyen_notification')])
->where('notification.pspreference=?', $pspReference) ->where('notification.pspreference=?', $pspReference)
->where('notification.event_code=?', $eventCode) ->where('notification.event_code=?', $eventCode)
->where('notification.success=?', $success); ->where('notification.success=?', $success)
->where('notification.original_reference=?', $originalReference);
return $this->getConnection()->fetchAll($select); return $this->getConnection()->fetchAll($select);
} }
} }
\ No newline at end of file
...@@ -37,6 +37,7 @@ define( ...@@ -37,6 +37,7 @@ define(
], ],
function (ko, _, $, Component, placeOrderAction, $t, additionalValidators, selectPaymentMethodAction, quote, checkoutData) { function (ko, _, $, Component, placeOrderAction, $t, additionalValidators, selectPaymentMethodAction, quote, checkoutData) {
'use strict'; 'use strict';
var updatedExpiryDate = false;
var recurringDetailReference = ko.observable(null); var recurringDetailReference = ko.observable(null);
var paymentMethod = ko.observable(null); var paymentMethod = ko.observable(null);
return Component.extend({ return Component.extend({
...@@ -90,10 +91,7 @@ define( ...@@ -90,10 +91,7 @@ define(
// only use CSE and installments for cards // only use CSE and installments for cards
if (self.agreement_data.card) { if (self.agreement_data.card) {
var cse_key = this.getCSEKey();
var options = { enableValidations: false};
var cseInstance = adyen.encrypt.createEncryption(cse_key, options);
var generationtime = self.getGenerationTime(); var generationtime = self.getGenerationTime();
var cardData = { var cardData = {
...@@ -103,10 +101,17 @@ define( ...@@ -103,10 +101,17 @@ define(
generationtime : generationtime generationtime : generationtime
}; };
if(updatedExpiryDate || self.hasVerification()){
var options = { enableValidations: false};
var cse_key = this.getCSEKey();
var cseInstance = adyen.encrypt.createEncryption(cse_key, options);
var encryptedData = cseInstance.encrypt(cardData); var encryptedData = cseInstance.encrypt(cardData);
data.additional_data.encrypted_data = encryptedData;
}
// set payment method to adyen_hpp // set payment method to adyen_hpp
data.additional_data.encrypted_data = encryptedData;
data.additional_data.number_of_installments = self.installment; data.additional_data.number_of_installments = self.installment;
} }
...@@ -180,6 +185,9 @@ define( ...@@ -180,6 +185,9 @@ define(
getGenerationTime: function() { getGenerationTime: function() {
return window.checkoutConfig.payment.adyenCc.generationTime; return window.checkoutConfig.payment.adyenCc.generationTime;
}, },
hasVerification: function() {
return window.checkoutConfig.payment.adyenOneclick.hasCustomerInteraction;
},
validate: function () { validate: function () {
var code = self.item.method; var code = self.item.method;
...@@ -192,13 +200,13 @@ define( ...@@ -192,13 +200,13 @@ define(
// if oneclick or recurring is a card do validation on expiration date // if oneclick or recurring is a card do validation on expiration date
if(this.agreement_data.card) { if(this.agreement_data.card) {
// add extra validation because jqeury validation will not work on non name attributes // add extra validation because jquery validation will not work on non name attributes
var expiration = Boolean($(form + ' #' + codeValue + '_expiration').valid()); var expiration = Boolean($(form + ' #' + codeValue + '_expiration').valid());
var expiration_yr = Boolean($(form + ' #' + codeValue + '_expiration_yr').valid()); var expiration_yr = Boolean($(form + ' #' + codeValue + '_expiration_yr').valid());
// only check if recurring type is set to oneclick // only check if recurring type is set to oneclick
var cid = true; var cid = true;
if(self.hasVerification()) { if(this.hasVerification()) {
var cid = Boolean($(form + ' #' + codeValue + '_cc_cid').valid()); var cid = Boolean($(form + ' #' + codeValue + '_cc_cid').valid());
} }
} else { } else {
...@@ -214,6 +222,7 @@ define( ...@@ -214,6 +222,7 @@ define(
return true; return true;
}, },
selectExpiry: function() { selectExpiry: function() {
updatedExpiryDate = true;
var self = this; var self = this;
self.expiry(true); self.expiry(true);
return true; return true;
...@@ -224,6 +233,8 @@ define( ...@@ -224,6 +233,8 @@ define(
}, },
selectBillingAgreement: function() { selectBillingAgreement: function() {
var self = this; var self = this;
self.expiry(false);
updatedExpiryDate = false;
// set payment method data // set payment method data
var data = { var data = {
...@@ -256,9 +267,6 @@ define( ...@@ -256,9 +267,6 @@ define(
} }
return null; return null;
}), }),
hasVerification: function() {
return window.checkoutConfig.payment.adyenOneclick.hasCustomerInteraction;
},
getPlaceOrderUrl: function() { getPlaceOrderUrl: function() {
return window.checkoutConfig.payment.iframe.placeOrderUrl[this.getCode()]; return window.checkoutConfig.payment.iframe.placeOrderUrl[this.getCode()];
} }
......
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
</div> </div>
<!-- ko if: ($parent.hasVerification())--> <!-- ko if: hasVerification()-->
<div class="field cvv required" data-bind="attr: {id: getCode() + '_' + value + '_cc_type_cvv_div'}"> <div class="field cvv required" data-bind="attr: {id: getCode() + '_' + value + '_cc_type_cvv_div'}">
<label data-bind="attr: {for: getCode() + '_' + value + '_cc_cid'}" class="label"> <label data-bind="attr: {for: getCode() + '_' + value + '_cc_cid'}" class="label">
<span><!-- ko text: $t('Card Verification Number')--><!-- /ko --></span> <span><!-- ko text: $t('Card Verification Number')--><!-- /ko --></span>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment