';
diff --git a/Block/Payment/Info.php b/Block/Payment/Info.php
index cc9b26de..4e49ae57 100644
--- a/Block/Payment/Info.php
+++ b/Block/Payment/Info.php
@@ -119,17 +119,8 @@ public function getPaymentDetailsHtml($backend = true)
}
$html .= '' . __('Expiration Date') . ': ' . $expiry;
- }
-
- $html .= ' ';
- $html .= '' . __('3DS Authentication') . ': ';
- if ($payment->getCcSecureVerify()) {
- $html .= __('YES');
- $html .= ' ';
- $html .= '' . __('3DS Certificate') . ': ' . $payment->getCcSecureVerify();
- } else {
- $html .= __('NO');
+ $html .= '';
}
return $html;
@@ -151,7 +142,6 @@ public function getMultiPaymentDetailsHtml($backend = true)
$sequenceNumber = substr($item->getTxnId(), strpos($item->getTxnId(), '-') + 1);
$html .= '' . __('Sequence Number') . ': ' . $sequenceNumber;
- $html .= ' ';
$info = $item->getAdditionalInformation(\Magento\Sales\Model\Order\Payment\Transaction::RAW_DETAILS);
foreach ($info as $key => $value) {
@@ -159,6 +149,11 @@ public function getMultiPaymentDetailsHtml($backend = true)
continue;
}
+ if (! $value) {
+ continue;
+ }
+
+ $html .= ' ';
$html .= '' . __($key) . ': ' . $value;
if ($backend && ($key === 'Means of payment') && isset($userChoice[$sequenceNumber])) {
@@ -168,11 +163,13 @@ public function getMultiPaymentDetailsHtml($backend = true)
$html .= ' ' . __('(default card brand used)');
}
}
-
- $html .= ' ';
}
}
+ if ($backend) {
+ $html .= '';
+ }
+
return $html;
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fca5e57c..f423b9c4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+2.4.11: 2020-11-02:
+- [embedded] Bug fix: Display 3DS result for REST API payments.
+- Bug fix: Do not re-create invoice if it already exists.
+- Some minor fixes relative to configuration screen.
+
2.4.10: 2020-10-06:
- [fullcb] Bug fix: Error when trying to pay with Full CB if payment options selection is disabled.
- Update payment means list.
diff --git a/Controller/Adminhtml/Payment/Check.php b/Controller/Adminhtml/Payment/Check.php
index d33c9654..b180a8d3 100644
--- a/Controller/Adminhtml/Payment/Check.php
+++ b/Controller/Adminhtml/Payment/Check.php
@@ -52,7 +52,7 @@ public function execute()
$case = $this->checkProcessor->execute($order, $response);
return $this->renderResponse($response->getOutputForGateway($case));
- } catch (ResponseException $e) {
+ } catch (\Lyranetwork\Payzen\Model\ResponseException $e) {
return $this->renderResponse($e->getMessage());
}
}
diff --git a/Controller/Adminhtml/Payment/Response.php b/Controller/Adminhtml/Payment/Response.php
index 1cecc725..835b34ff 100644
--- a/Controller/Adminhtml/Payment/Response.php
+++ b/Controller/Adminhtml/Payment/Response.php
@@ -10,7 +10,6 @@
namespace Lyranetwork\Payzen\Controller\Adminhtml\Payment;
use Lyranetwork\Payzen\Helper\Payment;
-use Lyranetwork\Payzen\Model\ResponseException;
class Response extends \Magento\Backend\App\Action
{
@@ -53,7 +52,7 @@ public function execute()
$result = $this->responseProcessor->execute($order, $response);
return $this->redirectResponse($order, $result['case'], $result['warn']);
- } catch (ResponseException $e) {
+ } catch (\Lyranetwork\Payzen\Model\ResponseException $e) {
$this->dataHelper->log($e->getMessage(), \Psr\Log\LogLevel::ERROR);
return $this->redirectError($order);
}
diff --git a/Controller/Adminhtml/System/Config/Reset.php b/Controller/Adminhtml/System/Config/Reset.php
index bba7ef8a..c68ba10c 100644
--- a/Controller/Adminhtml/System/Config/Reset.php
+++ b/Controller/Adminhtml/System/Config/Reset.php
@@ -42,6 +42,9 @@ public function __construct(
public function execute()
{
+ // Clear all messages in session.
+ $this->messageManager->getMessages(true);
+
// Retrieve write connection.
$connection = $this->resourceConfig->getConnection();
diff --git a/Controller/Payment/Check.php b/Controller/Payment/Check.php
index 50efd1bf..5e2fccb9 100644
--- a/Controller/Payment/Check.php
+++ b/Controller/Payment/Check.php
@@ -9,8 +9,6 @@
*/
namespace Lyranetwork\Payzen\Controller\Payment;
-use Lyranetwork\Payzen\Model\ResponseException;
-
class Check extends \Magento\Framework\App\Action\Action
{
/**
@@ -57,7 +55,7 @@ public function execute()
$case = $this->checkProcessor->execute($order, $response);
return $this->renderResponse($response->getOutputForGateway($case));
- } catch (ResponseException $e) {
+ } catch (\Lyranetwork\Payzen\Model\ResponseException $e) {
return $this->renderResponse($e->getMessage());
}
}
diff --git a/Controller/Payment/Response.php b/Controller/Payment/Response.php
index 5f91752e..7b035eb5 100644
--- a/Controller/Payment/Response.php
+++ b/Controller/Payment/Response.php
@@ -10,7 +10,6 @@
namespace Lyranetwork\Payzen\Controller\Payment;
use Lyranetwork\Payzen\Helper\Payment;
-use Lyranetwork\Payzen\Model\ResponseException;
class Response extends \Magento\Framework\App\Action\Action
{
@@ -74,7 +73,7 @@ public function execute()
$result = $this->responseProcessor->execute($order, $response);
return $this->redirectResponse($order, $result['case'], $result['warn']);
- } catch (ResponseException $e) {
+ } catch (\Lyranetwork\Payzen\Model\ResponseException $e) {
$this->dataHelper->log($e->getMessage(), \Psr\Log\LogLevel::ERROR);
return $this->redirectError($order);
}
diff --git a/Helper/Payment.php b/Helper/Payment.php
index ce7d9579..04b2479e 100644
--- a/Helper/Payment.php
+++ b/Helper/Payment.php
@@ -268,6 +268,22 @@ public function updatePaymentInfo(\Magento\Sales\Model\Order $order, \Lyranetwor
$order->getPayment()->setAdditionalInformation(\Lyranetwork\Payzen\Helper\Payment::REST_ERROR_MESSAGE, $restErrorMsg);
}
+ // 3DS authentication result.
+ $threedsCavv = '';
+ $threedsStatus = '';
+ $threedsAuthType = '';
+ if ($status = $response->get('threeds_status')) {
+ $threedsStatus = $this->getThreedsStatus($status);
+ $threedsCavv = $response->get('threeds_cavv');
+ $threedsAuthType = $response->get('threeds_auth_type');
+ }
+
+ // Save payment infos to sales_flat_order_payment.
+ $order->getPayment()
+ ->setCcSecureVerify($threedsCavv)
+ ->setAdditionalInformation('threeds_status', $threedsStatus)
+ ->setAdditionalInformation('threeds_auth_type', $threedsAuthType);
+
if ($response->isCancelledPayment()) {
// No more data to save.
@@ -296,7 +312,7 @@ public function updatePaymentInfo(\Magento\Sales\Model\Order $order, \Lyranetwor
// Set is_fraud_detected flag.
$order->getPayment()->setIsFraudDetected($response->isSuspectedFraud());
- if ($response->get('card_brand') == 'MULTI') { // Multi brand.
+ if ($response->get('card_brand') === 'MULTI') { // Multi brand.
$data = json_decode($response->get('payment_seq'));
$transactions = $data->{'transactions'};
@@ -342,18 +358,11 @@ public function updatePaymentInfo(\Magento\Sales\Model\Order $order, \Lyranetwor
$order->getPayment()->setAdditionalInformation(\Lyranetwork\Payzen\Helper\Payment::BRAND_USER_CHOICE, $userChoice);
} else {
- // 3DS authentication result.
- $threedsCavv = '';
- if (in_array($response->get('threeds_status'), array('Y', 'YES'))) {
- $threedsCavv = $response->get('threeds_cavv');
- }
-
// Save payment infos to sales_flat_order_payment.
$order->getPayment()
->setCcExpMonth($response->get('expiry_month'))
->setCcExpYear($response->get('expiry_year'))
- ->setCcNumberEnc($response->get('card_number'))
- ->setCcSecureVerify($threedsCavv);
+ ->setCcNumberEnc($response->get('card_number'));
// Save transaction details to sales_payment_transaction.
$expiry = '';
@@ -438,7 +447,9 @@ public function updatePaymentInfo(\Magento\Sales\Model\Order $order, \Lyranetwor
'Means of payment' => $response->get('card_brand'),
'Card Number' => $response->get('card_number'),
'Expiration Date' => $expiry,
- '3DS Certificate' => $threedsCavv
+ '3DS Authentication' => $threedsStatus,
+ '3DS Certificate' => $threedsCavv,
+ 'Authentication Type' => $threedsAuthType
];
$this->addTransaction($order->getPayment(), $transactionType, $transactionId, $additionalInfo);
@@ -479,7 +490,9 @@ public function updatePaymentInfo(\Magento\Sales\Model\Order $order, \Lyranetwor
'Means of payment' => $response->get('card_brand'),
'Card Number' => $response->get('card_number'),
'Expiration Date' => $expiry,
- '3DS Certificate' => $threedsCavv
+ '3DS Authentication' => $threedsStatus,
+ '3DS Certificate' => $threedsCavv,
+ 'Authentication Type' => $threedsAuthType
];
$this->addTransaction($order->getPayment(), $transactionType, $transactionId, $additionalInfo);
@@ -492,6 +505,26 @@ public function updatePaymentInfo(\Magento\Sales\Model\Order $order, \Lyranetwor
->setSkipTransactionCreation(true);
}
+ private function getThreedsStatus($status)
+ {
+ switch ($status) {
+ case 'Y':
+ return 'SUCCESS';
+
+ case 'N':
+ return 'FAILED';
+
+ case 'U':
+ return 'UNAVAILABLE';
+
+ case 'A':
+ return 'ATTEMPT';
+
+ default :
+ return $status;
+ }
+ }
+
public function saveIdentifier(
\Magento\Sales\Model\Order $order,
\Lyranetwork\Payzen\Model\Api\PayzenResponse $response
@@ -614,6 +647,25 @@ public function createInvoice(\Magento\Sales\Model\Order $order)
return;
}
+ // Check if an invoice already exists for this order.
+ if ($order->hasInvoices()) {
+ $alreadyInvoiced = false;
+ $transId = $order->getPayment()->getLastTransId();
+
+ $invoices = $order->getInvoiceCollection();
+ foreach ($invoices as $invoice) {
+ if ($invoice->getTransactionId() === $transId) {
+ $alreadyInvoiced = true;
+ break;
+ }
+ }
+
+ if ($alreadyInvoiced) {
+ $this->dataHelper->log("Invoice already exists for order #{$order->getIncrementId()} with transaction ID #{$transId}.");
+ return;
+ }
+ }
+
$this->dataHelper->log("Creating invoice for order #{$order->getIncrementId()}.");
// Convert order to invoice.
diff --git a/Helper/Payment/Data.php b/Helper/Payment/Data.php
index aa001a90..0046c0f9 100644
--- a/Helper/Payment/Data.php
+++ b/Helper/Payment/Data.php
@@ -70,7 +70,7 @@ public function getPaymentMethods()
$methods[$code] = [
'model' => $config['value'],
- 'title' => $payzenMultiTitle . " ($count)",
+ 'title' => "$payzenMultiTitle ($count)",
'group' => 'payzen'
];
}
diff --git a/Helper/Rest.php b/Helper/Rest.php
index bfde55e7..ed8cbe7c 100644
--- a/Helper/Rest.php
+++ b/Helper/Rest.php
@@ -103,10 +103,18 @@ public function convertRestResult($answer)
$response['vads_auth_result'] = $this->getProperty($authorizationResponse, 'authorizationResult');
}
- if (($threeDSResponse = $this->getProperty($cardDetails, 'threeDSResponse'))
- && ($authenticationResultData = $this->getProperty($threeDSResponse, 'authenticationResultData'))) {
- $response['vads_threeds_cavv'] = $this->getProperty($authenticationResultData, 'cavv');
- $response['vads_threeds_status'] = $this->getProperty($authenticationResultData, 'status');
+ if (($authenticationResponse = self::getProperty($cardDetails, 'authenticationResponse'))
+ && ($value = self::getProperty($authenticationResponse, 'value'))) {
+ $response['vads_threeds_status'] = self::getProperty($value, 'status');
+ $response['vads_threeds_auth_type'] = self::getProperty($value, 'authenticationType');
+ if ($authenticationValue = self::getProperty($value, 'authenticationValue')) {
+ $response['vads_threeds_cavv'] = self::getProperty($authenticationValue, 'value');
+ }
+ } elseif (($threeDSResponse = self::getProperty($cardDetails, 'threeDSResponse'))
+ && ($authenticationResultData = self::getProperty($threeDSResponse, 'authenticationResultData'))) {
+ $response['vads_threeds_cavv'] = self::getProperty($authenticationResultData, 'cavv');
+ $response['vads_threeds_status'] = self::getProperty($authenticationResultData, 'status');
+ $response['vads_threeds_auth_type'] = self::getProperty($authenticationResultData, 'threeds_auth_type');
}
}
diff --git a/Model/Api/Ws/AuthenticationRequestData.php b/Model/Api/Ws/AuthenticationRequestData.php
index a597daa3..60cf6d31 100644
--- a/Model/Api/Ws/AuthenticationRequestData.php
+++ b/Model/Api/Ws/AuthenticationRequestData.php
@@ -1,6 +1,6 @@
getBaseGrandTotal() : null;
if ($amount) {
$options = $this->getAvailableOptions($amount);
- return count($options) > 0;
+ return ! empty($options);
}
return true;
diff --git a/Model/Method/Multi.php b/Model/Method/Multi.php
index 1dcc8b7e..979dd8ff 100644
--- a/Model/Method/Multi.php
+++ b/Model/Method/Multi.php
@@ -180,7 +180,7 @@ public function isAvailable(\Magento\Quote\Api\Data\CartInterface $quote = null)
$amount = $quote ? $quote->getBaseGrandTotal() : null;
if ($amount) {
$options = $this->getAvailableOptions($amount);
- return count($options) > 0;
+ return ! empty($options);
}
return true;
diff --git a/Model/System/Config/Backend/CategoryMapping.php b/Model/System/Config/Backend/CategoryMapping.php
index 2f2889f6..c55e3f27 100644
--- a/Model/System/Config/Backend/CategoryMapping.php
+++ b/Model/System/Config/Backend/CategoryMapping.php
@@ -13,4 +13,26 @@
class CategoryMapping extends ConfigArraySerialized
{
+ public function beforeSave()
+ {
+ $values = $this->getValue();
+
+ if (! is_array($values) || empty($values)) {
+ $this->setValue([]);
+ } else {
+ foreach ($values as $id => $value) {
+ if (empty($value)) {
+ continue;
+ }
+
+ if (! isset($value['payzen_category']) || empty($value['payzen_category'])) {
+ unset($values[$id]);
+ }
+ }
+
+ $this->setValue($values);
+ }
+
+ return parent::beforeSave();
+ }
}
diff --git a/Model/System/Config/Backend/Gift/AddedCards.php b/Model/System/Config/Backend/Gift/AddedCards.php
index 0838fe3e..dda18969 100644
--- a/Model/System/Config/Backend/Gift/AddedCards.php
+++ b/Model/System/Config/Backend/Gift/AddedCards.php
@@ -87,7 +87,7 @@ public function __construct(
*/
public function beforeSave()
{
- $value = $this->getValue();
+ $value = $this->getValue();
if (! is_array($value) || empty($value)) {
$this->setValue([]);
@@ -110,9 +110,11 @@ public function beforeSave()
// Load latest logo value.
if ($this->dataHelper->fileExists($uploadDir . strtolower($card['code']) . '.png')) {
$value[$key]['logo'] = strtolower($card['code']) . '.png';
+ } else {
+ $value[$key]['logo'] = false;
}
- // Process file upload).
+ // Process file upload.
$name = $card['logo']['name'];
$tmpName = $card['logo']['tmp_name'];
@@ -133,7 +135,7 @@ public function beforeSave()
$result = $uploader->save($uploadDir, strtolower($card['code']) . '.png');
if (key_exists('file', $result) && ! empty($result['file'])) {
- $value[$key]['logo'] = $result['file'];
+ $value[$key]['logo'] = $result['file'];
}
} catch (\Exception $e) {
// Upload errors.
diff --git a/Model/System/Config/Backend/ShipOptions.php b/Model/System/Config/Backend/ShipOptions.php
index e57f2468..c44ed533 100644
--- a/Model/System/Config/Backend/ShipOptions.php
+++ b/Model/System/Config/Backend/ShipOptions.php
@@ -25,17 +25,25 @@ public function beforeSave()
$this->setValue([]);
} else {
$i = 0;
- foreach ($values as $value) {
+ foreach ($values as $id => $value) {
$i ++;
if (empty($value)) {
continue;
}
+ if (! isset($value['type']) || empty($value['type'])
+ || ! isset($value['speed']) || empty($value['speed'])) {
+ unset($values[$id]);
+ continue;
+ }
+
if (empty($value['oney_label']) || ! preg_match($deliveryCompanyRegex, $value['oney_label'])) {
$this->throwException('FacilyPay Oney label', $i);
}
}
+
+ $this->setValue($values);
}
} else {
$this->setValue([]);
diff --git a/Model/System/Config/Source/GiftCard.php b/Model/System/Config/Source/GiftCard.php
index 5369551f..389ae985 100644
--- a/Model/System/Config/Source/GiftCard.php
+++ b/Model/System/Config/Source/GiftCard.php
@@ -24,7 +24,7 @@ public function toOptionArray()
foreach ($this->method->getSupportedCcTypes() as $code => $name) {
$options[] = [
'value' => $code,
- 'label' => $name
+ 'label' => $code . ' - ' . $name
];
}
diff --git a/Model/System/Config/Source/MultiPaymentCard.php b/Model/System/Config/Source/MultiPaymentCard.php
index 92f3b2af..66bdc051 100644
--- a/Model/System/Config/Source/MultiPaymentCard.php
+++ b/Model/System/Config/Source/MultiPaymentCard.php
@@ -42,7 +42,7 @@ public function toOptionArray()
if (in_array($code, $this->multiCards)) {
$options[] = [
'value' => $code,
- 'label' => $code . " - " . $name,
+ 'label' => $code . ' - ' . $name,
'simple_label' => $name
];
}
diff --git a/Model/System/Config/Source/PaymentCard.php b/Model/System/Config/Source/PaymentCard.php
index a6033c3e..44dd54b3 100644
--- a/Model/System/Config/Source/PaymentCard.php
+++ b/Model/System/Config/Source/PaymentCard.php
@@ -23,7 +23,7 @@ public function toOptionArray()
foreach (\Lyranetwork\Payzen\Model\Api\PayzenApi::getSupportedCardTypes() as $code => $name) {
$options[] = [
'value' => $code,
- 'label' => $code . " - " . $name
+ 'label' => $code . ' - ' . $name
];
}
diff --git a/composer.json b/composer.json
index 2c289f18..e86c3b5d 100644
--- a/composer.json
+++ b/composer.json
@@ -5,7 +5,7 @@
"php" : "~5.5.0|~5.6.0|~7"
},
"type" : "magento2-module",
- "version" : "2.4.10",
+ "version" : "2.4.11",
"license" : "OSL-3.0",
"autoload" : {
"files" : [
diff --git a/etc/adminhtml/system/multi.xml b/etc/adminhtml/system/multi.xml
index 5e02d3ed..2d43eac4 100644
--- a/etc/adminhtml/system/multi.xml
+++ b/etc/adminhtml/system/multi.xml
@@ -130,7 +130,7 @@
Lyranetwork\Payzen\Block\Adminhtml\System\Config\Form\Field\Multi\MultiPaymentOptionsLyranetwork\Payzen\Model\System\Config\Backend\Multi\MultiPaymentOptionspayment/payzen_multi/multi_payment_options
- Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of payments. Period: Delay (in days) between payments. 1st payment: Amount of first payment, in percentage of total amount. If empty, all payments will have the same amount.]]>
+ Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of installments. Period: Delay (in days) between installments. 1st installment: Amount of first installment, in percentage of total amount. If empty, all installments will have the same amount.]]>
diff --git a/etc/config.xml b/etc/config.xml
index 3197afee..d763be39 100644
--- a/etc/config.xml
+++ b/etc/config.xml
@@ -15,7 +15,7 @@
support@payzen.eu
- 2.4.10
+ 2.4.11V2Magento_2.x1
diff --git a/i18n/de_DE.csv b/i18n/de_DE.csv
index 793fd9a5..bd4bda17 100644
--- a/i18n/de_DE.csv
+++ b/i18n/de_DE.csv
@@ -185,7 +185,7 @@
"ATTENTION: The payment in installments feature activation is subject to the prior agreement of Société Générale. If you enable this feature while you have not the associated option, an error 10000 – INSTALLMENTS_NOT_ALLOWED or 07 - PAYMENT_CONFIG will occur and the buyer will not be able to pay.","ATTENTION: The payment in installments feature activation is subject to the prior agreement of Société Générale. If you enable this feature while you have not the associated option, an error 10000 – INSTALLMENTS_NOT_ALLOWED or 07 - PAYMENT_CONFIG will occur and the buyer will not be able to pay."
"PAYMENT OPTIONS","ZAHLUNGSOPTIONEN"
"Payment options","Zahlungsoptionen"
-"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of payments. Period: Delay (in days) between payments. 1st payment: Amount of first payment, in percentage of total amount. If empty, all payments will have the same amount.","Klicken Sie auf die Schaltfläche « Hinzufügen » um eine oder mehrere Zahlungsoptionen einzustellen. Name: Beschreibung der Mehrfachzahlung. Mindestbetrag: Mindestbetrag um die Option anzubieten. Höchstbetrag: Höchstbetrag um die Option anzubieten. Vertrag: Vertrags ID um die Option zu benutzen. Anzahl: Gesamtanzahl der Raten. Zeitraum: Zeitraum zwischen zwei Raten (in Tagen). 1. Zahlung: Betrag der ersten Rate als Prozentsatz des Gesamtbetrags. Falls dies nicht angegeben ist, haben alle Raten den gleichen Betrag."
+"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of installments. Period: Delay (in days) between installments. 1st installment: Amount of first installment, in percentage of total amount. If empty, all installments will have the same amount.","Klicken Sie auf die Schaltfläche « Hinzufügen » um eine oder mehrere Zahlungsoptionen einzustellen. Name: Beschreibung der Mehrfachzahlung. Mindestbetrag: Mindestbetrag um die Option anzubieten. Höchstbetrag: Höchstbetrag um die Option anzubieten. Vertrag: Vertrags ID um die Option zu benutzen. Anzahl: Gesamtanzahl der Raten. Zeitraum: Zeitraum zwischen zwei Raten (in Tagen). 1. Rate: Betrag der ersten Rate insgesamtes Prozent. Falls dies nicht angegeben ist, haben alle Raten den gleichen Betrag."
"Add","Hinzufügen"
"Delete","Löschen"
"Label","Kennzeichnung"
@@ -194,7 +194,7 @@
"Contract","Vertrag"
"Count","Anzahl"
"Period","Zeitraum"
-"1st payment","1. Zahlung"
+"1st installment","1. Rate"
"Gift card types","Art der Geschenkkarten"
"Select the gift card types that can be used for the payment.","Auswahl der Kartenarten, die als Geschenkkarten zur Zahlung benutzt werden können"
"Add cards","Karte hinzufügen"
@@ -249,8 +249,7 @@
"Card Number","Kartennummer"
"3DS Authentication","3DS Authentication"
"3DS Certificate","3DS Zertifikat"
-"YES","JA"
-"NO","NEIN"
+"Authentication Type","Authentifizierungsart"
"Fraud Control Result:","Fraud Control-Ergebnis:"
"Advanced Risk Assessment Result:","Erweiterte Risikoeinschätzung Ergebnis:"
"Authentication error !","Fehler bei der Authentifizierung !"
diff --git a/i18n/en_US.csv b/i18n/en_US.csv
index 84fde478..b6a4e770 100644
--- a/i18n/en_US.csv
+++ b/i18n/en_US.csv
@@ -185,7 +185,7 @@
"ATTENTION: The payment in installments feature activation is subject to the prior agreement of Société Générale. If you enable this feature while you have not the associated option, an error 10000 – INSTALLMENTS_NOT_ALLOWED or 07 - PAYMENT_CONFIG will occur and the buyer will not be able to pay.","ATTENTION: The payment in installments feature activation is subject to the prior agreement of Société Générale. If you enable this feature while you have not the associated option, an error 10000 – INSTALLMENTS_NOT_ALLOWED or 07 - PAYMENT_CONFIG will occur and the buyer will not be able to pay."
"PAYMENT OPTIONS","PAYMENT OPTIONS"
"Payment options","Payment options"
-"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of payments. Period: Delay (in days) between payments. 1st payment: Amount of first payment, in percentage of total amount. If empty, all payments will have the same amount.","Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of payments. Period: Delay (in days) between payments. 1st payment: Amount of first payment, in percentage of total amount. If empty, all payments will have the same amount."
+"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of installments. Period: Delay (in days) between installments. 1st installment: Amount of first installment, in percentage of total amount. If empty, all installments will have the same amount.","Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of installments. Period: Delay (in days) between installments. 1st installment: Amount of first installment, in percentage of total amount. If empty, all installments will have the same amount."
"Add","Add"
"Delete","Delete"
"Label","Label"
@@ -194,7 +194,7 @@
"Contract","Contract"
"Count","Count"
"Period","Period"
-"1st payment","1st payment"
+"1st installment","1st installment"
"Gift card types","Gift card types"
"Select the gift card types that can be used for the payment.","Select the gift card types that can be used for the payment."
"Add cards","Add cards"
@@ -248,9 +248,8 @@
"Expiration Date","Expiration Date"
"Card Number","Card Number"
"3DS Authentication","3DS Authentication"
+"Authentication Type","Authentication Type"
"3DS Certificate","3DS Certificate"
-"YES","YES"
-"NO","NO"
"Fraud Control Result:","Fraud Control Result:"
"Advanced Risk Assessment Result:","Advanced Risk Assessment Result:"
"Authentication error !","Authentication error !"
diff --git a/i18n/es_ES.csv b/i18n/es_ES.csv
index 82fa68e3..21de4a22 100644
--- a/i18n/es_ES.csv
+++ b/i18n/es_ES.csv
@@ -185,7 +185,7 @@
"ATTENTION: The payment in installments feature activation is subject to the prior agreement of Société Générale. If you enable this feature while you have not the associated option, an error 10000 – INSTALLMENTS_NOT_ALLOWED or 07 - PAYMENT_CONFIG will occur and the buyer will not be able to pay.","ATENCIÓN: La activación de la función de pago en cuotas está sujeta al acuerdo previo de Societé Générale. Si habilita esta función cuando no tiene la opción asociada, ocurrirá un error 10000 – INSTALLMENTS_NOT_ALLOWED o 07 - PAYMENT_CONFIG y el comprador no podrá pagar."
"PAYMENT OPTIONS","OPCIONES DE PAGO"
"Payment options","Opciones de pago"
-"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of payments. Period: Delay (in days) between payments. 1st payment: Amount of first payment, in percentage of total amount. If empty, all payments will have the same amount.","Haga clic en el botón « Agregar » para configurar una o más opciones de pago. Etiqueta: La etiqueta de opción a mostrar en el frontend. Monto mínimo: Monto mínimo para habilitar la opción de pago. Monto máximo: Monto máximo para habilitar la opción de pago. Afiliación: ID de la afiliación a usar con la opción. Conteo: Número total de pagos. Periodo: Plazo (en días) entre pagos. Primer pago: Monto del primer pago, en porcentaje del monto total. Si está vacío, todos los pagos tendrán el mismo monto."
+"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of installments. Period: Delay (in days) between installments. 1st installment: Amount of first installment, in percentage of total amount. If empty, all installments will have the same amount.","Haga clic en el botón « Agregar » para configurar una o más opciones de pago. Etiqueta: La etiqueta de opción a mostrar en el frontend. Monto mínimo: Monto mínimo para habilitar la opción de pago. Monto máximo: Monto máximo para habilitar la opción de pago. Afiliación: ID de la afiliación a usar con la opción. Conteo: Número total de vencimientos. Periodo: Plazo (en días) entre vencimientos. Primer vencimiento: Monto del primer vencimiento, en porcentaje del monto total. Si está vacío, todos los vencimientos tendrán el mismo monto."
"Add","Agregar"
"Delete","Eliminar"
"Label","Etiqueta"
@@ -194,7 +194,7 @@
"Contract","Afiliación"
"Count","Conteo"
"Period","Periodo"
-"1st payment","Primer pago"
+"1st installment","Primer vencimiento"
"Gift card types","Tipos de tarjeta regalo"
"Select the gift card types that can be used for the payment.","Seleccione los tipos de tarjeta regalo que se pueden usar para el pago."
"Add cards","Agregar tarjetas"
@@ -248,9 +248,8 @@
"Expiration Date","Fecha de expiración"
"Card Number","Número de la tarjeta"
"3DS Authentication","Autenticación 3DS"
+"Authentication Type","Tipo de autenticación"
"3DS Certificate","Certificado 3DS"
-"YES","SÍ"
-"NO","NO"
"Fraud Control Result:","Resultado del control de fraude:"
"Advanced Risk Assessment Result:","Resultado de la evaluación de riesgos avanzada:"
"Authentication error !","Error de autenticación"
diff --git a/i18n/fr_FR.csv b/i18n/fr_FR.csv
index fa08c2e0..8fe145cb 100644
--- a/i18n/fr_FR.csv
+++ b/i18n/fr_FR.csv
@@ -185,7 +185,7 @@
"ATTENTION: The payment in installments feature activation is subject to the prior agreement of Société Générale. If you enable this feature while you have not the associated option, an error 10000 – INSTALLMENTS_NOT_ALLOWED or 07 - PAYMENT_CONFIG will occur and the buyer will not be able to pay.","ATTENTION: L'activation de la fonctionnalité de paiement en nfois est soumise à accord préalable de Société Générale. Si vous activez cette fonctionnalité alors que vous ne disposez pas de cette option, une erreur 10000 – INSTALLMENTS_NOT_ALLOWED ou 07 - PAYMENT_CONFIG sera générée et l'acheteur sera dans l'incapacité de payer."
"PAYMENT OPTIONS","OPTIONS DE PAIEMENT"
"Payment options","Options de paiement"
-"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of payments. Period: Delay (in days) between payments. 1st payment: Amount of first payment, in percentage of total amount. If empty, all payments will have the same amount.","Cliquer sur le bouton Ajouter pour configurer une ou plusieurs options de paiement. Libellé : Texte décrivant l'option de paiement multiple. Montant min. : Montant minimum pour proposer l'option. Montant max. : Montant maximum pour proposer l'option. Contrat : ID du contrat à utiliser avec l'option. Nombre : Nombre total d'échéances. Période : Délai entre deux échéances (en jours). 1er paiement : Montant de la première échéance en pourcentage du total. Si vide, toutes les échéances auront le même montant."
+"Click on « Add » button to configure one or more payment options. Label: The option label to display on the frontend. Min. amount: Minimum amount to enable the payment option. Max. amount: Maximum amount to enable the payment option. Contract: ID of the contract to use with the option. Count: Total number of installments. Period: Delay (in days) between installments. 1st installment: Amount of first installment, in percentage of total amount. If empty, all installments will have the same amount.","Cliquer sur le bouton Ajouter pour configurer une ou plusieurs options de paiement. Libellé: Texte décrivant l'option de paiement multiple. Montant min.: Montant minimum pour proposer l'option. Montant max.: Montant maximum pour proposer l'option. Contrat: ID du contrat à utiliser avec l'option. Nombre: Nombre total d'échéances. Période: Délai entre deux échéances (en jours). 1ére échéance: Montant de la première échéance en pourcentage du total. Si vide, toutes les échéances auront le même montant."
"Add","Ajouter"
"Delete","Supprimer"
"Label","Libellé"
@@ -194,7 +194,7 @@
"Contract","Contrat"
"Count","Nombre"
"Period","Période"
-"1st payment","1er paiement"
+"1st installment","1ère échéance"
"Gift card types","Types de cartes cadeau"
"Select the gift card types that can be used for the payment.","Sélectionner les types de carte cadeau qui pourront être utilisés pour le paiement."
"Add cards","Ajouter des cartes"
@@ -248,9 +248,8 @@
"Expiration Date","Date d'expiration"
"Card Number","Numéro de Carte"
"3DS Authentication","Authentification 3DS"
+"Authentication Type","Type de l'authentification"
"3DS Certificate","Certificat 3DS"
-"YES","OUI"
-"NO","NON"
"Fraud Control Result:","Résultat des contrôles de fraude :"
"Advanced Risk Assessment Result:","Résultat de la gestion des risques avancée :"
"Authentication error !","Erreur d'authentification !"
diff --git a/view/adminhtml/templates/payment/info.phtml b/view/adminhtml/templates/payment/info.phtml
index b88269bb..b2dcc7f5 100644
--- a/view/adminhtml/templates/payment/info.phtml
+++ b/view/adminhtml/templates/payment/info.phtml
@@ -61,6 +61,18 @@ if ($payment->getCcTransId()) {
echo $block->getPaymentDetailsHtml();
}
+ // 3DS results.
+ echo '' . __('3DS Authentication') . ': ';
+ if ($threedsStatus = $payment->getAdditionalInformation('threeds_status')) {
+ echo $threedsStatus;
+ echo ' ';
+ echo ($threedsCavv = $payment->getCcSecureVerify()) ? '' . __('3DS Certificate') . ': ' . $threedsCavv : '';
+ echo ' ';
+ echo ($threedsAuthType = $payment->getAdditionalInformation('threeds_auth_type')) ? '' . __('Authentication Type') . ': ' . $threedsAuthType : '';
+ } else {
+ echo 'UNAVAILABLE';
+ }
+
// Risk control result translations.
$riskControl = $payment->getAdditionalInformation(\Lyranetwork\Payzen\Helper\Payment::RISK_CONTROL);
if (is_string($riskControl)) {
diff --git a/view/frontend/templates/payment/info.phtml b/view/frontend/templates/payment/info.phtml
index 8478e91a..7128a960 100644
--- a/view/frontend/templates/payment/info.phtml
+++ b/view/frontend/templates/payment/info.phtml
@@ -43,8 +43,7 @@
getCcTransId()) {
- echo $block->getResultDescHtml();
- echo '