From bdb7375466b19270200f2d48374bdc9da4027f19 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 7 Oct 2016 15:11:56 +0200 Subject: [PATCH] serveral optimizing regarding the handling for safe invoice --- Frontend/MoptPaymentPayone/Bootstrap.php | 2 + .../Components/Classes/PayoneFormHandler.php | 62 ++++- .../Classes/PayoneInstallHelper.php | 37 ++- .../Components/Classes/PayoneParamBuilder.php | 54 +++- .../Classes/PayonePaymentHelper.php | 27 +- .../Payone/Api/Enum/GenericpaymentAction.php | 2 + .../Components/Payone/Api/Request/Debit.php | 20 ++ .../Api/Response/Genericpayment/Approved.php | 65 +++-- .../Controllers/Backend/MoptConfigPayone.php | 3 + .../Backend/MoptPayoneCreditcardConfig.php | 7 +- .../Controllers/Backend/MoptPayoneOrder.php | 16 +- .../Controllers/Frontend/MoptAjaxPayone.php | 239 ++++++++++++++++++ .../Frontend/MoptPaymentPayone.php | 14 +- .../MoptPayoneConfig/MoptPayoneConfig.php | 30 +++ .../MoptPaymentPayone/errorMessages.ini | 126 ++++----- .../frontend/MoptPaymentPayone/payment.ini | 43 +++- .../Subscribers/FrontendPostDispatch.php | 16 +- .../backend/fc_payone/ajaxcreditcard.tpl | 87 +++++++ .../Views/backend/fc_payone/ajaxfinance.tpl | 139 ++++++++-- .../mopt_config_payone/model/config.js | 6 +- .../mopt_config_payone/view/main/detail.js | 31 ++- .../_resources/javascript/mopt_payment.js | 26 +- .../render_payolution_installment.tpl | 57 +++++ .../payment/mopt_paymentmean_creditcard.tpl | 23 +- .../mopt_paymentmean_payolution_debitnote.tpl | 11 +- ...opt_paymentmean_payolution_installment.tpl | 202 +++++++++++++++ .../mopt_paymentmean_payolution_invoice.tpl | 10 +- .../MoptPaymentPayone/errorMessages.ini | 3 + plugin.json | 68 +++++ 29 files changed, 1273 insertions(+), 153 deletions(-) create mode 100644 Frontend/MoptPaymentPayone/Views/frontend/mopt_ajax_payone/render_payolution_installment.tpl create mode 100755 Frontend/MoptPaymentPayone/Views/frontend/plugins/payment/mopt_paymentmean_payolution_installment.tpl create mode 100755 plugin.json diff --git a/Frontend/MoptPaymentPayone/Bootstrap.php b/Frontend/MoptPaymentPayone/Bootstrap.php index ae4e19da..8773485c 100644 --- a/Frontend/MoptPaymentPayone/Bootstrap.php +++ b/Frontend/MoptPaymentPayone/Bootstrap.php @@ -526,6 +526,8 @@ protected function createDatabase() $this->getInstallHelper()->moptInsertEmptyConfigIfNotExists(); $this->getInstallHelper()->checkAndUpdateCreditcardModelIframeExtension(); + + $this->getInstallHelper()->checkAndUpdateConfigModelPayolutionInstallmentExtension(); } /** diff --git a/Frontend/MoptPaymentPayone/Components/Classes/PayoneFormHandler.php b/Frontend/MoptPaymentPayone/Components/Classes/PayoneFormHandler.php index 7b86361a..70cfe0f2 100644 --- a/Frontend/MoptPaymentPayone/Components/Classes/PayoneFormHandler.php +++ b/Frontend/MoptPaymentPayone/Components/Classes/PayoneFormHandler.php @@ -74,6 +74,9 @@ public function processPaymentForm($paymentId, $formData, $paymentHelper) if ($paymentHelper->isPayonePayolutionInvoice($paymentId)) { return $this->proccessPayolutionInvoice($formData); } + if ($paymentHelper->isPayonePayolutionInstallment($paymentId)) { + return $this->proccessPayolutionInstallment($formData); + } return array(); } @@ -227,7 +230,7 @@ protected function proccessDebitNote($formData) $paymentData['formData']["mopt_payone__debit_iban"] = $formData["mopt_payone__debit_iban"]; } - if (!$formData["mopt_payone__debit_bic"] && !$formData["mopt_payone__debit_showbic"]==="") { + if (!$formData["mopt_payone__debit_bic"] && $formData["mopt_payone__debit_showbic"]=="1" ) { $paymentData['sErrorFlag']["mopt_payone__debit_bic"] = true; } else { $paymentData['formData']["mopt_payone__debit_bic"] = $formData["mopt_payone__debit_bic"]; @@ -257,7 +260,7 @@ protected function proccessDebitNote($formData) $paymentData['formData']["mopt_payone__debit_bankcountry"] = $formData["mopt_payone__debit_bankcountry"]; } - if ($paymentData['sErrorFlag']["mopt_payone__debit_iban"] && $paymentData['sErrorFlag']["mopt_payone__debit_bic"] && !$paymentData['sErrorFlag']["mopt_payone__debit_bankaccount"] && !$paymentData['sErrorFlag']["mopt_payone__debit_bankcode"] + if ($paymentData['sErrorFlag']["mopt_payone__debit_iban"] && ( $paymentData['sErrorFlag']["mopt_payone__debit_bic"] || $formData["mopt_payone__debit_showbic"]=="" ) && !$paymentData['sErrorFlag']["mopt_payone__debit_bankaccount"] && !$paymentData['sErrorFlag']["mopt_payone__debit_bankcode"] ) { unset($paymentData['sErrorFlag']["mopt_payone__debit_iban"]); unset($paymentData['sErrorFlag']["mopt_payone__debit_bic"]); @@ -443,4 +446,59 @@ protected function proccessPayolutionInvoice($formData) return $paymentData; } + + /** + * process form data + * + * @param array $formData + * @return array + */ + protected function proccessPayolutionInstallment($formData) + { + $paymentData = array(); + + if (!$formData["mopt_payone__payolution_installment_agreement"] || !in_array($formData["mopt_payone__payolution_installment_agreement"], array('on', true))) { + $paymentData['sErrorFlag']["mopt_payone__payolution_installment_agreement"] = true; + } else { + $paymentData['formData']["mopt_payone__payolution_installment_agreement"] = $formData["mopt_payone__payolution_installment_agreement"]; + } + + if ($formData[mopt_payone__payolution_installment_birthdaydate] !== "0000-00-00" && $formData[mopt_payone__payolution_b2bmode] !== "1") { + if (time() < strtotime('+18 years', strtotime($formData[mopt_payone__payolution_installment_birthdaydate]))) { + $paymentData['sErrorFlag']["mopt_payone__payolution_installment_birthday"] = true; + $paymentData['sErrorFlag']["mopt_payone__payolution_installment_birthmonth"] = true; + $paymentData['sErrorFlag']["mopt_payone__payolution_installment_birthyear"] = true; + $paymentData['formData']['mopt_save_birthday'] = false; + } else { + $paymentData['formData']["mopt_payone__payolution_birthdaydate"] = $formData["mopt_payone__payolution_installment_birthdaydate"]; + $paymentData['formData']['mopt_save_birthday'] = true; + } + } + + if ($formData[mopt_payone__payolution_b2bmode] === "1") { + + if (!$formData["mopt_payone__installment_company_trade_registry_number"]) { + $paymentData['sErrorFlag']["mopt_payone__installment_company_trade_registry_number"] = true; + } else { + $paymentData['formData']["mopt_payone__installment_company_trade_registry_number"] = $formData["mopt_payone__installment_company_trade_registry_number"]; + } + + $paymentData['formData']["mopt_payone__payolution_b2bmode"] = $formData["mopt_payone__payolution_b2bmode"]; + } + + if ($formData['mopt_payone__payolution_installment_duration'] ==="") { + $paymentData['sErrorFlag']['mopt_payone__payolution_installment_duration'] = true; + } else { + $paymentData['formData']["mopt_payone__payolution_installment_duration"] = $formData["mopt_payone__payolution_installment_duration"]; + } + + if ($formData['mopt_payone__payolution_installment_workorderid'] ==="") { + $paymentData['sErrorFlag']['mopt_payone__payolution_installment_workorderid'] = true; + } else { + $paymentData['formData']["mopt_payone__payolution_installment_workorderid"] = $formData["mopt_payone__payolution_installment_workorderid"]; + } + + return $paymentData; + } + } diff --git a/Frontend/MoptPaymentPayone/Components/Classes/PayoneInstallHelper.php b/Frontend/MoptPaymentPayone/Components/Classes/PayoneInstallHelper.php index a542d18c..3fa5cf8d 100644 --- a/Frontend/MoptPaymentPayone/Components/Classes/PayoneInstallHelper.php +++ b/Frontend/MoptPaymentPayone/Components/Classes/PayoneInstallHelper.php @@ -193,7 +193,12 @@ public function mopt_payone__getPaymentMethods() 'description' => 'PAYONE Payolution Lastschrift', 'template' => 'mopt_paymentmean_payolution_debitnote.tpl', 'position' => 27,), - ); + array( + 'name' => 'mopt_payone__fin_payolution_installment', + 'description' => 'PAYONE Payolution Ratenzahlung', + 'template' => 'mopt_paymentmean_payolution_installment.tpl', + 'position' => 28,), + ); } /** @@ -429,6 +434,17 @@ public function moptInsertEmptyConfigIfNotExists() "; Shopware()->Db()->query($sql); } + + // insert default values for creditcard config + $sql = 'SELECT id FROM s_plugin_mopt_payone_creditcard_config'; + $result = Shopware()->Db()->query($sql); + + if ($result->rowCount() === 0) { + $sql = "INSERT INTO `s_plugin_mopt_payone_creditcard_config` (`error_locale_id`, `shop_id`, `show_errors`, `is_default`, `integration_type`, `standard_input_css`, `standard_input_css_selected`, `standard_iframe_height`, `standard_iframe_width`, `cardno_input_chars`, `cardno_input_chars_max`, `cardno_input_css`, `cardno_custom_iframe`, `cardno_iframe_height`, `cardno_iframe_width`, `cardno_custom_style`, `cardno_field_type`, `cardcvc_input_chars`, `cardcvc_input_chars_max`, `cardcvc_input_css`, `cardcvc_custom_iframe`, `cardcvc_iframe_height`, `cardcvc_iframe_width`, `cardcvc_custom_style`, `cardcvc_field_type`, `cardmonth_input_chars`, `cardmonth_input_chars_max`, `cardmonth_input_css`, `cardmonth_custom_iframe`, `cardmonth_iframe_height`, `cardmonth_iframe_width`, `cardmonth_custom_style`, `cardmonth_field_type`, `cardyear_input_chars`, `cardyear_input_chars_max`, `cardyear_input_css`, `cardyear_custom_iframe`, `cardyear_iframe_height`, `cardyear_iframe_width`, `cardyear_custom_style`, `cardyear_field_type`, `merchant_id`, `portal_id`, `subaccount_id`, `api_key`, `live_mode`, `check_cc`, `creditcard_min_valid`) VALUES + (74, 1, 1, 1, 0, 'box-shadow:inset 0 1px 1px #dadae5;background:#f8f8fa;border:1px solid #dadae5;border-top-color:#cbcbdb;line-height:19px;font-size:.875rem;width:85%;padding:.625rem .625rem .5625rem .625rem;color:#8798a9;','box-shadow:inset 0 1px 1px #dadae5;background:#f8f8fa;border:1px solid #dadae5;border-top-color:#cbcbdb;line-height:19px;font-size:.875rem;width:85%;padding:.625rem .625rem .5625rem .625rem;color:#8798a9;', '20px', '80px', 20, 20, '', 0, '20px', '100px', 1, 'tel', 4, 4, '', 0, '20px', '100px', 1, 'tel', 4, 4, '', 0, '20px', '40px', 1, 'select', 4, 4, '', 0, '20px', '40px', 1, 'select', 0, 0, 0, '', 0, 1, 0); + "; + Shopware()->Db()->query($sql); + } } /** @@ -958,5 +974,24 @@ public function checkAndUpdateCreditcardModelIframeExtension() . "ADD COLUMN default_translation_iframe_cvc VARCHAR(255) NULL;"; $db->exec($sql); } + } + + public function checkAndUpdateConfigModelPayolutionInstallmentExtension() + { + $db = Shopware()->Db(); + + $DBConfig = $db->getConfig(); + + $sql = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='s_plugin_mopt_payone_config' + AND TABLE_SCHEMA='" . $DBConfig['dbname'] . "' + AND COLUMN_NAME ='payolution_draft_user'"; + $result = $db->query($sql); + + if ($result->rowCount() === 0) { + $sql = "ALTER TABLE `s_plugin_mopt_payone_config` ADD `payolution_draft_user` VARCHAR(255) NULL AFTER `payolution_b2bmode`, + ADD `payolution_draft_password` VARCHAR(255) NULL AFTER `payolution_draft_user`;"; + $db->exec($sql); + } } + } diff --git a/Frontend/MoptPaymentPayone/Components/Classes/PayoneParamBuilder.php b/Frontend/MoptPaymentPayone/Components/Classes/PayoneParamBuilder.php index 50086196..011c702c 100644 --- a/Frontend/MoptPaymentPayone/Components/Classes/PayoneParamBuilder.php +++ b/Frontend/MoptPaymentPayone/Components/Classes/PayoneParamBuilder.php @@ -171,12 +171,21 @@ public function buildCustomOrderCapture($order, $orderDetailParams, $finalize, $ */ public function buildOrderDebit($order, $postionIds, $includeShipment = false) { + $paymentName = $order->getPayment()->getName(); + $params = $this->getAuthParameters($order->getPayment()->getId()); $params['txid'] = $order->getTransactionId(); $params['sequencenumber'] = $this->getParamSequencenumber($order); $params['amount'] = $this->getParamDebitAmount($order, $postionIds, $includeShipment); $params['currency'] = $order->getCurrency(); + if ($paymentName == "mopt_payone__fin_payolution_invoice" || $paymentName == "mopt_payone__fin_payolution_debitnote") { + if ($order->getBilling()->getCompany()) { + $params['payolution_b2b'] = true; + $params['vatid'] = $order->getBilling()->getUstid(); + } + } + return $params; } @@ -538,15 +547,54 @@ public function getPaymentPayolutionDebitNote($financeType, $paymentData, $worko * @param string $financeType * @return \Payone_Api_Request_Parameter_Authorization_PaymentMethod_Payolution */ - public function getPaymentPayolutionDebitNotePreCheck($financeType, $paymentData) - { + public function getPaymentPayolutionInstallment($financeType, $paymentData, $workorderId) { $params = array(); $userData = Shopware()->Modules()->Admin()->sGetUserData(); $params['api_version'] = '3.10'; + $params['workorderid'] = $paymentData['mopt_payone__payolution_installment_workorderid']; if (Shopware::VERSION === '___VERSION___' || version_compare(Shopware::VERSION, '5.2.0', '>=')) { $params['birthday'] = implode(explode('-', $userData['additional']['user']['birthday'])); } else { - $params['birthday'] = implode(explode('-', $userData['billingaddress']['birthday'])); + $params['birthday'] = implode(explode('-', $userData['billingaddress']['birthday'])); + } + if ($params['birthday'] == "00000000") { + unset($params['birthday']); + } + $params['financingtype'] = $financeType; + $payment = new Payone_Api_Request_Parameter_Authorization_PaymentMethod_Payolution($params); + + $paydata = new Payone_Api_Request_Parameter_Paydata_Paydata(); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'installment_duration', 'data' => $paymentData['mopt_payone__payolution_installment_duration']) + )); + + if ($paymentData['mopt_payone__payolution_b2bmode']) { + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'b2b', 'data' => 'yes') + )); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'company_trade_registry_number', 'data' => $paymentData['mopt_payone__installment_company_trade_registry_number']) + )); + } + $payment->setPaydata($paydata); + + return $payment; + } + + /** + * create payolution payment object + * + * @param string $financeType + * @return \Payone_Api_Request_Parameter_Authorization_PaymentMethod_Payolution + */ + public function getPaymentPayolutionDebitNotePreCheck($financeType, $paymentData) { + $params = array(); + $userData = Shopware()->Modules()->Admin()->sGetUserData(); + $params['api_version'] = '3.10'; + if (Shopware::VERSION === '___VERSION___' || version_compare(Shopware::VERSION, '5.2.0', '>=')) { + $params['birthday'] = implode(explode('-', $userData['additional']['user']['birthday'])); + } else { + $params['birthday'] = implode(explode('-', $userData['billingaddress']['birthday'])); } if ($params['birthday'] == "00000000") { unset($params['birthday']); diff --git a/Frontend/MoptPaymentPayone/Components/Classes/PayonePaymentHelper.php b/Frontend/MoptPaymentPayone/Components/Classes/PayonePaymentHelper.php index 8f64e4ec..e0880704 100644 --- a/Frontend/MoptPaymentPayone/Components/Classes/PayonePaymentHelper.php +++ b/Frontend/MoptPaymentPayone/Components/Classes/PayonePaymentHelper.php @@ -599,6 +599,21 @@ public function isPayonePayolutionInvoice($paymentName) return false; } } + + /** + * check if given payment name is payone payolution installment + * + * @param string $paymentName + * @return boolean + */ + public function isPayonePayolutionInstallment($paymentName) + { + if (preg_match('#mopt_payone__fin_payolution_installment#', $paymentName)) { + return true; + } else { + return false; + } + } /** * get online bank transfer type for api communication @@ -736,7 +751,14 @@ public function moptGetPayolutionAdditionalInformation($country, $companyname) . 'und einer Identitäts- und Bonitätsprüfung erforderlichen Daten an payolution bin ich einverstanden. ' . 'Meine Einwilligung ' . 'kann ich jederzeit mit Wirkung für die Zukunft widerrufen.'; - + + + $information['consentInstallment'] = 'Mit der Übermittlung der für die Abwicklung des Einkaufs ' + . 'und einer Identitäts- und Bonitätsprüfung erforderlichen Daten an payolution bin ich einverstanden. ' + . 'Meine Einwilligung ' + . 'kann ich jederzeit mit Wirkung für die Zukunft widerrufen.'; + + $information['overlaycontent'] = $this->moptGetPayolutionAcceptanceText($companyname); @@ -916,6 +938,9 @@ public function getActionFromPaymentName($paymentShortName) if ($this->isPayonePayolutionInvoice($paymentShortName)) { return 'payolutioninvoice'; } + if ($this->isPayonePayolutionInstallment($paymentShortName)) { + return 'payolutioninstallment'; + } if ($this->isPayoneFinance($paymentShortName)) { return 'finance'; diff --git a/Frontend/MoptPaymentPayone/Components/Payone/Api/Enum/GenericpaymentAction.php b/Frontend/MoptPaymentPayone/Components/Payone/Api/Enum/GenericpaymentAction.php index 312ed8b1..daa281c4 100644 --- a/Frontend/MoptPaymentPayone/Components/Payone/Api/Enum/GenericpaymentAction.php +++ b/Frontend/MoptPaymentPayone/Components/Payone/Api/Enum/GenericpaymentAction.php @@ -31,4 +31,6 @@ class Payone_Api_Enum_GenericpaymentAction const PAYPAL_ECS_GET_EXPRESSCHECKOUTDETAILS='getexpresscheckoutdetails'; const PAYOLUTION_PRE_CHECK = 'pre_check'; + + const PAYOLUTION_CALCULATION = 'calculation'; } diff --git a/Frontend/MoptPaymentPayone/Components/Payone/Api/Request/Debit.php b/Frontend/MoptPaymentPayone/Components/Payone/Api/Request/Debit.php index 8911427a..3476731e 100644 --- a/Frontend/MoptPaymentPayone/Components/Payone/Api/Request/Debit.php +++ b/Frontend/MoptPaymentPayone/Components/Payone/Api/Request/Debit.php @@ -72,6 +72,11 @@ class Payone_Api_Request_Debit extends Payone_Api_Request_Abstract */ protected $invoicing = null; + /** + * @var Payone_Api_Request_Parameter_Paydata_Paydata + */ + protected $paydata = null; + /** * @var string */ @@ -236,4 +241,19 @@ public function setNarrativeText($narrative_text) { $this->narrative_text = $narrative_text; } + + /** + * @param Payone_Api_Request_Parameter_Paydata_Paydata $paydata + */ + public function setPaydata($paydata) { + $this->paydata = $paydata; + } + + /** + * + * @return Payone_Api_Request_Parameter_Paydata_Paydata + */ + public function getPaydata() { + return $this->paydata; + } } diff --git a/Frontend/MoptPaymentPayone/Components/Payone/Api/Response/Genericpayment/Approved.php b/Frontend/MoptPaymentPayone/Components/Payone/Api/Response/Genericpayment/Approved.php index 1be50d9c..c3acddf7 100644 --- a/Frontend/MoptPaymentPayone/Components/Payone/Api/Response/Genericpayment/Approved.php +++ b/Frontend/MoptPaymentPayone/Components/Payone/Api/Response/Genericpayment/Approved.php @@ -19,36 +19,33 @@ * @author Ronny Schröder * @license GNU General Public License (GPL 3) */ -class Payone_Api_Response_Genericpayment_Approved extends Payone_Api_Response_Genericpayment_Abstract -{ +class Payone_Api_Response_Genericpayment_Approved extends Payone_Api_Response_Genericpayment_Abstract { /** * add_paydata[workorderid] = workorderid from payone * add_paydata[...] = delivery data * @var Payone_Api_Response_Parameter_Paydata_Paydata */ - protected $paydata = null; + protected $paydata = NULL; /** * @param array $params */ - function __construct(array $params = array()) - { + function __construct(array $params = array()) { parent::__construct($params); $this->setRawResponse($params); $this->initPaydata($params); } - protected function initPaydata($param) - { + protected function initPaydata($param) { $payData = new Payone_Api_Response_Parameter_Paydata_Paydata($param); if ($payData->hasItems()) { $this->setPaydata($payData); } else { - $this->setPaydata(null); + $this->setPaydata(NULL); } } @@ -61,9 +58,9 @@ protected function initPaydata($param) * $service = $builder->buildServicePaymentGenericpayment(); * $response = $service->request($request); * print_r($response->getPaydata()->toAssocArray()); - * + * * you get an array like that: - * + * * Array * ( * [shipping_zip] => 79111 @@ -74,19 +71,57 @@ protected function initPaydata($param) * [shipping_firstname] => Max * [shipping_lastname] => Mustermann * ) - * + * * @return Payone_Api_Response_Parameter_Paydata_Paydata */ - public function getPaydata() - { + public function getPaydata() { return $this->paydata; } /** * @param Payone_Api_Response_Parameter_Paydata_Paydata $paydata */ - public function setPaydata($paydata) - { + public function setPaydata($paydata) { $this->paydata = $paydata; } + + /** + * + * @return Payone_Api_Request_Parameter_Paydata_Paydata + */ + public function getPayDataArray() { + $aPayData = array(); + foreach($this->getPayData()->getItems() as $item) { + $sCorrectedKey = strtolower($item->getKey()); + $sCorrectedKey = str_replace('-', '_', $sCorrectedKey); + $aPayData[$sCorrectedKey] = $item->getData(); + } + ksort($aPayData); + return $aPayData; + } + + public function getInstallmentData() + { + $aInstallmentData = array(); + + $aPayData = $this->getPayDataArray(); + foreach ($aPayData as $sKey => $sValue) { + $aSplit = explode('_', $sKey); + for($i = count($aSplit); $i > 0; $i--) { + if($i == count($aSplit)) { + $aTmp = array($aSplit[$i-1] => $sValue); + } else { + $aTmp = array($aSplit[$i-1] => $aTmp); + } + } + $aInstallmentData = array_replace_recursive($aInstallmentData, $aTmp); + } + + if(isset($aInstallmentData['paymentdetails']) && count($aInstallmentData['paymentdetails']) > 0) { + return $aInstallmentData['paymentdetails']; + } + return false; + } + + } diff --git a/Frontend/MoptPaymentPayone/Controllers/Backend/MoptConfigPayone.php b/Frontend/MoptPaymentPayone/Controllers/Backend/MoptConfigPayone.php index fad79d30..78bd27e0 100644 --- a/Frontend/MoptPaymentPayone/Controllers/Backend/MoptConfigPayone.php +++ b/Frontend/MoptPaymentPayone/Controllers/Backend/MoptConfigPayone.php @@ -293,6 +293,9 @@ protected function moptGetPaymentConfig($paymentId) if ($paymentHelper->isPayonePayolutionInvoice($paymentData['name'])) { $data['extra'] = 'payolution_invoice'; } + if ($paymentHelper->isPayonePayolutionInstallment($paymentData['name'])) { + $data['extra'] = 'payolution_installment'; + } } $data = $this->getIsoCodesForCountries($data); diff --git a/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneCreditcardConfig.php b/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneCreditcardConfig.php index e24bf2b6..f03e3cee 100644 --- a/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneCreditcardConfig.php +++ b/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneCreditcardConfig.php @@ -56,12 +56,7 @@ public function save($data) } if ($data['errorLocaleId'] === 0) { - $errors[] = array( - 'property' => Shopware()->Snippets()->getNamespace('backend/mopt_payone_creditcard_config/main') - ->get('language'), - 'message' => Shopware()->Snippets()->getNamespace('backend/mopt_payone_creditcard_config/main') - ->get('languageValidationError', 'Bitte eine Sprache auswählen', true) - ); + $data['errorLocaleId'] = 74; } $sql = 'SELECT id FROM s_plugin_mopt_payone_creditcard_config WHERE shop_id = ?'; diff --git a/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneOrder.php b/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneOrder.php index 16d48131..c8096ace 100644 --- a/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneOrder.php +++ b/Frontend/MoptPaymentPayone/Controllers/Backend/MoptPayoneOrder.php @@ -198,7 +198,10 @@ protected function moptPayone_callCaptureService($params, $invoicing = null) $paydata = new Payone_Api_Request_Parameter_Paydata_Paydata(); $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( array('key' => 'b2b', 'data' => 'yes') - )); + )); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'company_trade_registry_number', 'data' => $params['vatid']) + )); $request->setPaydata($paydata); } return $service->capture($request); @@ -262,6 +265,17 @@ protected function moptPayone_callDebitService($params, $invoicing = null) if ($invoicing) { $request->setInvoicing($invoicing); } + + if ($params['payolution_b2b']== true) { + $paydata = new Payone_Api_Request_Parameter_Paydata_Paydata(); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'b2b', 'data' => 'yes') + )); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'company_trade_registry_number', 'data' => $params['vatid']) + )); + $request->setPaydata($paydata); + } return $service->debit($request); } diff --git a/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptAjaxPayone.php b/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptAjaxPayone.php index 776069e6..d8df25bd 100644 --- a/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptAjaxPayone.php +++ b/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptAjaxPayone.php @@ -385,4 +385,243 @@ protected function getPaymentId() { return Shopware()->Session()->sOrderVariables['sUserData']['additional']['payment']['id']; } + + + /** + * get actual payment method id + * + * @return string + */ + protected function ajaxHandlePayolutionPreCheckAction() + { + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $paymentData = Shopware()->Session()->moptPayment; + $paymentData['mopt_payone__installment_company_trade_registry_number'] = $this->Request()->getPost('hreg'); + $paymentData['dob'] = $this->Request()->getPost('dob'); + $config = $this->moptPayoneMain->getPayoneConfig($this->getPaymentId()); + $financeType = Payone_Api_Enum_PayolutionType::PYS; + $paymentType = Payone_Api_Enum_PayolutionType::PYS_FULL; + $userData = Shopware()->Modules()->Admin()->sGetUserData(); + $paymentName = $userData['additional']['payment']['name']; + if ($this->moptPayonePaymentHelper->isPayonePayolutionInstallment($paymentName)) { + $precheckresponse = $this->buildAndCallPrecheck($config, 'fnc', $financeType, $paymentType, $paymentData); + if ($precheckresponse->getStatus() == \Payone_Api_Enum_ResponseType::OK) { + $responseData = $precheckresponse->toArray(); + $workorderId = $responseData['rawResponse']['workorderid']; + $calculation = $this->buildAndCallCalculate($config, 'fnc', $financeType, $paymentType, $paymentData, $workorderId); + $responseData = $calculation->getInstallmentData(); + $data['data'] = $responseData; + $data['status'] = 'success'; + $data['workorderid'] = $workorderId; + $encoded = json_encode($data); + echo $encoded; + exit(0); + } else { + $data['data'] = $precheckresponse; + $data['status'] = 'error'; + $encoded = json_encode($data); + echo $encoded; + exit(0); + } + } + return false; + } + + /** + * render the payolution installment deb container for frontend usage + * + * @return string + */ + protected function renderPayolutionInstallmentAction() + { + $installmentData = $this->Request()->getPost('data'); + $this->View()->assign(array('InstallmentPlan' => $installmentData) + ); + } + + /** + * download the payolution installment info pdf for frontend usage + * + * @return string + */ + protected function getPayolutionDraftUrlAction() + { + $this->Front()->Plugins()->ViewRenderer()->setNoRender(); + $url = $this->Request()->getParam('url'); + $duration = $this->Request()->getParam('duration'); + if ($url) { + $config = $this->moptPayoneMain->getPayoneConfig($this->getPaymentId()); + $user = $config['payolutionDraftUser']; + $password = $config['payolutionDraftPassword']; + + $downloadUrl = str_ireplace('https://', 'https://'.$user.':'.$password.'@', $url.'&duration='.$duration); + // debug + // $downloadUrl = 'http://www.orimi.com/pdf-test.pdf'; + $content = file_get_contents($downloadUrl); + $filename= 'terms-of-payment.pdf'; + if($content) { + header("Content-Type: application/pdf"); + header("Content-Disposition: attachment; filename=\"{$filename}\""); + echo $content; + exit; + } + echo "Es ist ein Fehler beim Download aufgetreten
Bitte versuchen Sie es später noch einmal."; + } + } + + /** + * prepare and do payment server api call + * + * @param array $config + * @param string $clearingType + * @param string $financetype + * @param string $paymenttype + * @return type $response + */ + protected function buildAndCallPrecheck($config, $clearingType, $financetype, $paymenttype, $paymentData) + { + $paramBuilder = $this->moptPayoneMain->getParamBuilder(); + $session = Shopware()->Session(); + $personalData = $paramBuilder->getPersonalData(Shopware()->Modules()->Admin()->sGetUserData()); + $params = $this->moptPayoneMain->getParamBuilder()->buildAuthorize($config['paymentId']); + $params['api_version'] = '3.10'; + $params['financingtype'] = $financetype; + $session = Shopware()->Session(); + $orderVariables = $session['sOrderVariables']->getArrayCopy(); + //create hash + $orderHash = md5(serialize($orderVariables)); + $session->moptOrderHash = $orderHash; + + $request = new Payone_Api_Request_Genericpayment($params); + + $paydata = new Payone_Api_Request_Parameter_Paydata_Paydata(); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'action', 'data' => Payone_Api_Enum_GenericpaymentAction::PAYOLUTION_PRE_CHECK) + )); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'payment_type', 'data' => $paymenttype) + )); + + if ($paymentData && $paymentData['mopt_payone__payolution_b2bmode']) { + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'b2b', 'data' => 'yes') + )); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'company_trade_registry_number', 'data' => $paymentData['mopt_payone__installment_company_trade_registry_number']) + )); + } + $request->setPaydata($paydata); + $request->setAmount($this->getAmount()); + $request->setCurrency($this->getCurrencyShortName()); + $request->setCompany($personalData->getCompany()); + $request->setFirstname($personalData->getFirstname()); + $request->setLastname($personalData->getLastname()); + $request->setStreet($personalData->getStreet()); + $request->setZip($personalData->getZip()); + $request->setCity($personalData->getCity()); + $request->setCountry($personalData->getCountry()); + if ($personalData->getBirthday() !== "00000000" && $personalData->getBirthday() !== ""){ + $request->setBirthday($personalData->getBirthday()); + } else { + $request->setBirthday($paymentData['dob']); + } + + if ($paymentData && $paymentData['mopt_payone__payolution_b2bmode']) { + $request->setBirthday(""); + } + $request->setEmail($personalData->getEmail()); + $request->setIp($personalData->getIp()); + $request->setLanguage($personalData->getLanguage()); + $request->setClearingtype($clearingType); + $this->service = $this->payoneServiceBuilder->buildServicePaymentGenericpayment(); + $response = $this->service->request($request); + return $response; + } + + /** + * prepare and do payment server api call + * + * @param array $config + * @param string $clearingType + * @param string $financetype + * @param string $paymenttype + * @return type $response + */ + protected function buildAndCallCalculate($config, $clearingType, $financetype, $paymenttype, $paymentData, $workorderId) + { + $paramBuilder = $this->moptPayoneMain->getParamBuilder(); + $session = Shopware()->Session(); + $personalData = $paramBuilder->getPersonalData(Shopware()->Modules()->Admin()->sGetUserData()); + $params = $this->moptPayoneMain->getParamBuilder()->buildAuthorize($config['paymentId']); + $params['api_version'] = '3.10'; + $params['financingtype'] = $financetype; + $params['workorderid'] = $workorderId; + $session = Shopware()->Session(); + $orderVariables = $session['sOrderVariables']->getArrayCopy(); + //create hash + $orderHash = md5(serialize($orderVariables)); + $session->moptOrderHash = $orderHash; + + $request = new Payone_Api_Request_Genericpayment($params); + + $paydata = new Payone_Api_Request_Parameter_Paydata_Paydata(); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'action', 'data' => Payone_Api_Enum_GenericpaymentAction::PAYOLUTION_CALCULATION) + )); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'payment_type', 'data' => $paymenttype) + )); + + if ($paymentData && $paymentData['mopt_payone__payolution_b2bmode']) { + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'b2b', 'data' => 'yes') + )); + $paydata->addItem(new Payone_Api_Request_Parameter_Paydata_DataItem( + array('key' => 'company_trade_registry_number', 'data' => $paymentData['mopt_payone__invoice_company_trade_registry_number']) + )); + } + $request->setPaydata($paydata); + $request->setAmount($this->getAmount()); + $request->setCurrency($this->getCurrencyShortName()); + $request->setCompany($personalData->getCompany()); + $request->setFirstname($personalData->getFirstname()); + $request->setLastname($personalData->getLastname()); + $request->setStreet($personalData->getStreet()); + $request->setZip($personalData->getZip()); + $request->setCity($personalData->getCity()); + $request->setCountry($personalData->getCountry()); + $request->setBirthday($paymentData['dob']); + $request->setEmail($personalData->getEmail()); + $request->setIp($personalData->getIp()); + $request->setLanguage($personalData->getLanguage()); + + $request->setClearingtype($clearingType); + $this->service = $this->payoneServiceBuilder->buildServicePaymentGenericpayment(); + $response = $this->service->request($request); + return $response; + } + + /** + * Return the full amount to pay. + * + * @return float + */ + public function getAmount() + { + $session = Shopware()->Session(); + $orderVariables = $session['sOrderVariables']->getArrayCopy(); + $basket = $orderVariables['sBasket']; + return empty($basket['AmountWithTaxNumeric']) ? $basket['AmountNumeric'] : $basket['AmountWithTaxNumeric']; + } + + /** + * Returns the current currency short name. + * + * @return string + */ + public function getCurrencyShortName() + { + return Shopware()->Currency()->getShortName(); + } + } diff --git a/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptPaymentPayone.php b/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptPaymentPayone.php index 732a6a13..d77bce5a 100644 --- a/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptPaymentPayone.php +++ b/Frontend/MoptPaymentPayone/Controllers/Frontend/MoptPaymentPayone.php @@ -156,6 +156,12 @@ public function payolutiondebitAction() $response = $this->mopt_payone__payolution(); $this->mopt_payone__handlePayolutionFeedback($response); } + + public function payolutioninstallmentAction() + { + $response = $this->mopt_payone__payolution(); + $this->mopt_payone__handlePayolutionFeedback($response); + } /** * @return $response @@ -390,6 +396,12 @@ protected function mopt_payone__payolution() return $precheckresponse; } } + + if ($this->moptPayonePaymentHelper->isPayonePayolutionInstallment($this->getPaymentShortName())) { + $financeType = Payone_Api_Enum_PayolutionType::PYS; + $paymentType = Payone_Api_Enum_PayolutionType::PYS_FULL; + $payment = $this->moptPayoneMain->getParamBuilder()->getPaymentPayolutionInstallment($financeType, $paymentData, $workorderId); + } $response = $this->buildAndCallPayment($config, 'fnc', $payment); return $response; } @@ -403,8 +415,6 @@ protected function mopt_payone__finance() if ($this->moptPayonePaymentHelper->isPayoneBillsafe($paymentId)) { $financeType = Payone_Api_Enum_FinancingType::BSV; - } else { - $financeType = Payone_Api_Enum_FinancingType::CFR; } $config = $this->moptPayoneMain->getPayoneConfig($this->getPaymentId()); diff --git a/Frontend/MoptPaymentPayone/Models/MoptPayoneConfig/MoptPayoneConfig.php b/Frontend/MoptPaymentPayone/Models/MoptPayoneConfig/MoptPayoneConfig.php index 718e02ff..29ea8525 100644 --- a/Frontend/MoptPaymentPayone/Models/MoptPayoneConfig/MoptPayoneConfig.php +++ b/Frontend/MoptPaymentPayone/Models/MoptPayoneConfig/MoptPayoneConfig.php @@ -443,6 +443,16 @@ class MoptPayoneConfig extends ModelEntity */ private $payolutionB2bmode; + /** + * @ORM\Column(name="payolution_draft_user", type="string", length=255, nullable=true, unique=false) + */ + private $payolutionDraftUser; + + /** + * @ORM\Column(name="payolution_draft_password", type="string", length=255, nullable=true, unique=false) + */ + private $payolutionDraftPassword; + /** * @ORM\Column(name="show_sofort_iban_bic", type="boolean", precision=0, scale=0, nullable=false, unique=false) */ @@ -1266,6 +1276,26 @@ public function setPayolutionB2bMode($payolutionB2bmode) { $this->payolutionB2bmode = $payolutionB2bmode; } + + public function getPayolutionDraftUser() + { + return $this->payolutionDraftUser; + } + + public function setPayolutionDraftUser($payolutionDraftUser) + { + $this->payolutionDraftUser = $payolutionDraftUser; + } + + public function getPayolutionDraftPassword() + { + return $this->payolutionDraftPassword; + } + + public function setPayolutionDraftPassword($payolutionDraftPassword) + { + $this->payolutionDraftPassword = $payolutionDraftPassword; + } public function getShowSofortIbanBic() { diff --git a/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/errorMessages.ini b/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/errorMessages.ini index dfd10031..630c8caa 100644 --- a/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/errorMessages.ini +++ b/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/errorMessages.ini @@ -1,64 +1,64 @@ -[default] -generalErrorMessage = "Es ist ein Fehler aufgetreten" -addresscheckErrorMessage = "Bitte überprüfen Sie die Adresse" -addresscheckcorrected = "Bitte überprüfen Sie die Adresse" -bankaccountcheckErrorMessage = "Bitte versuchen Sie es mit einer anderen Zahlungsart nochmal." -bankaccountcheckblocked = "Zahlung mit der angegebenen Bankverbindung zur Zeit leider nicht möglich." -creditCardCheckerrorMessage = "Bitte überprüfen Sie die Angaben auf der Karte." -errorMessage1076 = "Ungültiger Kartentyp. Bitte überprüfen Sie die Angaben auf der Karte." -errorMessage1078 = "Ungültige Kartennummer. Bitte überprüfen Sie die Angaben auf der Karte." -errorMessage33 = "Verfallsdatum ungültig. Bitte überprüfen Sie die Angaben auf der Karte." -numberFormField = "Dieses Feld darf nur Zahlen enthalten" -bankcodeFormField = "Die Bankleitzahl muss aus 8 Ziffern bestehen" -ibanbicFormField = "Dieses Feld darf nur Großbuchstaben und Ziffern enthalten" -payolutionErrorMessage = "Diese Zahlung konnte nicht durchgeführt werden.
Dies kann unterschiedliche Gründe haben, wie etwa fehlerhafte Eingabedaten, eine unbekannte Adresse, oder ein vorübergehendes technisches Problem.
Bitte überprüfen Sie die angegebenen Daten, oder wählen Sie ein anderes Zahlungsmittel." - -[de_DE : default] -generalErrorMessage = "Es ist ein Fehler aufgetreten" -addresscheckErrorMessage = "Bitte überprüfen Sie die Adresse" -addresscheckcorrected = "Bitte überprüfen Sie die Adresse" -bankaccountcheckErrorMessage = "Bitte versuchen Sie es mit einer anderen Zahlungsart nochmal." -bankaccountcheckblocked = "Zahlung mit der angegebenen Bankverbindung zur Zeit leider nicht möglich." -creditCardCheckerrorMessage = "Bitte überprüfen Sie die Angaben auf der Karte." -errorMessage1076 = "Ungültiger Kartentyp. Bitte überprüfen Sie die Angaben auf der Karte." -errorMessage1078 = "Ungültige Kartennummer. Bitte überprüfen Sie die Angaben auf der Karte." -errorMessage33 = "Verfallsdatum ungültig. Bitte überprüfen Sie die Angaben auf der Karte." -numberFormField = "Dieses Feld darf nur Zahlen enthalten" -bankcodeFormField = "Die Bankleitzahl muss aus 8 Ziffern bestehen" -ibanbicFormField = "Dieses Feld darf nur Großbuchstaben und Ziffern enthalten" -payolutionErrorMessage = "Diese Zahlung konnte nicht durchgeführt werden.
Dies kann unterschiedliche Gründe haben, wie etwa fehlerhafte Eingabedaten, eine unbekannte Adresse, oder ein vorübergehendes technisches Problem.
Bitte überprüfen Sie die angegebenen Daten, oder wählen Sie ein anderes Zahlungsmittel." - -[en_GB] -generalErrorMessage = "An error occured" -addresscheckErrorMessage = "Please check your address details." -addresscheckGeneralErrorMessage = "Please check your address details." -addresscheckcorrected = "Please check your address details." -bankaccountcheckErrorMessage = "Please try it again with another payment method." -bankaccountcheckGeneralErrorMessage = "Please try it again with another payment method." -bankaccountcheckblocked = "Payment with the given bank account number is currently not possible." -creditCardCheckerrorMessage = "Please check all credit card details." -errorMessage1076 = "Invalid card type. Please check all credit card details." -errorMessage1078 = "Invalid credit card number. Please check all credit card details." -errorMessage33 = "Invalid expiry date. Please check all credit card details." -errorMessage945 = "An error occured" -errorMessage888 = "Please try it again with another payment method." -errorMessage902 = "An error occured" -ErrorNoBankaccount = "Payment with the given bank account number is currently not possible." -payolutionErrorMessage = "This transaction could not be performed.
This may have different causes, such as invalid user input, an unknown address or a temporary technical problem.
Please validate your data or choose an alternative payment method." - -[nl_NL] -generalErrorMessage = "Er is een fout opgetreden" -addresscheckErrorMessage = "Controleer het adres a.u.b." -addresscheckGeneralErrorMessage = "Controleer het adres a.u.b." -addresscheckcorrected = "Controleer het adres a.u.b." -bankaccountcheckErrorMessage = "Probeer het met een andere betaalwijze nogmaals a.u.b." -bankaccountcheckGeneralErrorMessage = "Probeer het met een andere betaalwijze nogmaals a.u.b." -bankaccountcheckblocked = "Betaling via de opgegeven bankrelatie is momenteel helaas niet mogelijk." -creditCardCheckerrorMessage = "Controleer de kaartgegevens a.u.b." -errorMessage1076 = "Ongeldig kaarttype. Controleer de kaartgegevens a.u.b." -errorMessage1078 = "Ongeldig kaartnummer. Controleer de kaartgegevens a.u.b." -errorMessage33 = "Vervaldatum ongeldig. Controleer de kaartgegevens a.u.b." -errorMessage945 = "Er is een fout opgetreden" -errorMessage888 = "Probeer het met een andere betaalwijze nogmaals a.u.b." -errorMessage902 = "Er is een fout opgetreden" +[default] +generalErrorMessage = "Es ist ein Fehler aufgetreten" +addresscheckErrorMessage = "Bitte überprüfen Sie die Adresse" +addresscheckcorrected = "Bitte überprüfen Sie die Adresse" +bankaccountcheckErrorMessage = "Bitte versuchen Sie es mit einer anderen Zahlungsart nochmal." +bankaccountcheckblocked = "Zahlung mit der angegebenen Bankverbindung zur Zeit leider nicht möglich." +creditCardCheckerrorMessage = "Bitte überprüfen Sie die Angaben auf der Karte." +errorMessage1076 = "Ungültiger Kartentyp. Bitte überprüfen Sie die Angaben auf der Karte." +errorMessage1078 = "Ungültige Kartennummer. Bitte überprüfen Sie die Angaben auf der Karte." +errorMessage33 = "Verfallsdatum ungültig. Bitte überprüfen Sie die Angaben auf der Karte." +numberFormField = "Dieses Feld darf nur Zahlen enthalten" +bankcodeFormField = "Die Bankleitzahl muss aus 8 Ziffern bestehen" +ibanbicFormField = "Dieses Feld darf nur Großbuchstaben und Ziffern enthalten" +birthdayUnderageError = "Sie müssen mindestens 18 Jahre alt sein, um diese Zahlart verwenden zu können." + +[de_DE : default] +generalErrorMessage = "Es ist ein Fehler aufgetreten" +addresscheckErrorMessage = "Bitte überprüfen Sie die Adresse" +addresscheckcorrected = "Bitte überprüfen Sie die Adresse" +bankaccountcheckErrorMessage = "Bitte versuchen Sie es mit einer anderen Zahlungsart nochmal." +bankaccountcheckblocked = "Zahlung mit der angegebenen Bankverbindung zur Zeit leider nicht möglich." +creditCardCheckerrorMessage = "Bitte überprüfen Sie die Angaben auf der Karte." +errorMessage1076 = "Ungültiger Kartentyp. Bitte überprüfen Sie die Angaben auf der Karte." +errorMessage1078 = "Ungültige Kartennummer. Bitte überprüfen Sie die Angaben auf der Karte." +errorMessage33 = "Verfallsdatum ungültig. Bitte überprüfen Sie die Angaben auf der Karte." +numberFormField = "Dieses Feld darf nur Zahlen enthalten" +bankcodeFormField = "Die Bankleitzahl muss aus 8 Ziffern bestehen" +ibanbicFormField = "Dieses Feld darf nur Großbuchstaben und Ziffern enthalten" +birthdayUnderageError = "Sie müssen mindestens 18 Jahre alt sein, um diese Zahlart verwenden zu können." + +[en_GB] +generalErrorMessage = "An error occured" +addresscheckErrorMessage = "Please check your address details." +addresscheckGeneralErrorMessage = "Please check your address details." +addresscheckcorrected = "Please check your address details." +bankaccountcheckErrorMessage = "Please try it again with another payment method." +bankaccountcheckGeneralErrorMessage = "Please try it again with another payment method." +bankaccountcheckblocked = "Payment with the given bank account number is currently not possible." +creditCardCheckerrorMessage = "Please check all credit card details." +errorMessage1076 = "Invalid card type. Please check all credit card details." +errorMessage1078 = "Invalid credit card number. Please check all credit card details." +errorMessage33 = "Invalid expiry date. Please check all credit card details." +errorMessage945 = "An error occured" +errorMessage888 = "Please try it again with another payment method." +errorMessage902 = "An error occured" +ErrorNoBankaccount = "Payment with the given bank account number is currently not possible." +birthdayUnderageError = "You have to be older than 18 years to use this paymentmean." + +[nl_NL] +generalErrorMessage = "Er is een fout opgetreden" +addresscheckErrorMessage = "Controleer het adres a.u.b." +addresscheckGeneralErrorMessage = "Controleer het adres a.u.b." +addresscheckcorrected = "Controleer het adres a.u.b." +bankaccountcheckErrorMessage = "Probeer het met een andere betaalwijze nogmaals a.u.b." +bankaccountcheckGeneralErrorMessage = "Probeer het met een andere betaalwijze nogmaals a.u.b." +bankaccountcheckblocked = "Betaling via de opgegeven bankrelatie is momenteel helaas niet mogelijk." +creditCardCheckerrorMessage = "Controleer de kaartgegevens a.u.b." +errorMessage1076 = "Ongeldig kaarttype. Controleer de kaartgegevens a.u.b." +errorMessage1078 = "Ongeldig kaartnummer. Controleer de kaartgegevens a.u.b." +errorMessage33 = "Vervaldatum ongeldig. Controleer de kaartgegevens a.u.b." +errorMessage945 = "Er is een fout opgetreden" +errorMessage888 = "Probeer het met een andere betaalwijze nogmaals a.u.b." +errorMessage902 = "Er is een fout opgetreden" ErrorNoBankaccount = "Betaling via de opgegeven bankrelatie is momenteel helaas niet mogelijk." \ No newline at end of file diff --git a/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/payment.ini b/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/payment.ini index 6f0d7b99..9fdcca64 100644 --- a/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/payment.ini +++ b/Frontend/MoptPaymentPayone/Snippets/frontend/MoptPaymentPayone/payment.ini @@ -58,6 +58,20 @@ ccShowSavedHint = "Ihre Kreditkartennummer wurde erfolgreich geprüft und wird a PaymentMethodCreditCard = "Kreditkarte" backToConfirmPage = "Zurück zu Prüfen und Bestellen" +NumberOfInstallments = "Wählen Sie die Anzahl der Raten" +CheckInstallmentAvailability = "Verfügbare Konditionen prüfen" +Installments = "Raten" +Overview = "Überblick" +NoOfInstallments = "Anzahl der Raten" +Financingamount = "Finanzierungsbetrag" +Total = "Gesamt" +InterestRate = "Zinssatz" +EffectiveInterestRate = "Effektiver Zinssatz" +MonthlyInstallment = "Monatsrate" +PaymentPlan = "Zahlplan" +DownloadInstallment-Contract-Draft = "Ratenzahlungs-Vertrag herunterladen" +Due = "fällig am" + [de_DE : default] amandateDownload = "Download Mandat" @@ -119,6 +133,19 @@ ccShowSavedHint = "Ihre Kreditkartennummer wurde erfolgreich geprüft und wird a PaymentMethodCreditCard = "Kreditkarte" backToConfirmPage = "Zurück zu Prüfen und Bestellen" +NumberOfInstallments = "Wählen Sie die Anzahl der Raten" +CheckInstallmentAvailability = "Verfügbare Konditionen prüfen" +Installments = "Raten" +Overview = "Überblick" +NoOfInstallments = "Anzahl der Raten" +Financingamount = "Finanzierungsbetrag" +Total = "Gesamt" +InterestRate = "Zinssatz" +EffectiveInterestRate = "Effektiver Zinssatz" +MonthlyInstallment = "Monatsrate" +PaymentPlan = "Zahlplan" +DownloadInstallment-Contract-Draft = "Ratenzahlungs-Vertrag herunterladen" +Due = "fällig am" [en_GB] mandateDownload = "download mandate" @@ -164,6 +191,20 @@ ccShowSavedHint = "your credit card number was processed and is shown anonymized PaymentMethodCreditCard = "credit card" +NumberOfInstallments = "Select the number of installments" +CheckInstallmentAvailability = "Check installment availability" +Installments = "Installments" +Overview = "Overview" +NoOfInstallments = "No. of installments" +Financingamount = "Financingamount" +Total = "Total" +InterestRate = "Interest rate" +EffectiveInterestRate = "Effective interest rate" +MonthlyInstallment = "Monthly installment" +PaymentPlan = "Payment Plan" +DownloadInstallment-Contract-Draft = "Download Installment-Contract-Draft" +Due = "due" + [nl_NL] mandateDownload = "Betaalwijze wijzigen" savePayment = "Betaalwijze opslaan" @@ -198,4 +239,4 @@ creditCardValidUntil = "Geldig tot" creditCardCvc = "Controlecode" creditCardCvcProcessed = "Kaartcontrolecode is verwerkt" -PaymentMethodCreditCard = "Creditkaart" \ No newline at end of file +PaymentMethodCreditCard = "Creditkaart" diff --git a/Frontend/MoptPaymentPayone/Subscribers/FrontendPostDispatch.php b/Frontend/MoptPaymentPayone/Subscribers/FrontendPostDispatch.php index 3a70accd..539af0ba 100644 --- a/Frontend/MoptPaymentPayone/Subscribers/FrontendPostDispatch.php +++ b/Frontend/MoptPaymentPayone/Subscribers/FrontendPostDispatch.php @@ -283,7 +283,9 @@ protected function moptPayoneCheckEnvironment($controllerName = false) //prepare additional Payolution information and retrieve birthday from user data if ($moptPayoneMain->getPaymentHelper()->isPayonePayolutionDebitNote($paymentMean['name']) - || $moptPayoneMain->getPaymentHelper()->isPayonePayolutionInvoice($paymentMean['name'])) { + || $moptPayoneMain->getPaymentHelper()->isPayonePayolutionInvoice($paymentMean['name']) + || $moptPayoneMain->getPaymentHelper()->isPayonePayolutionInstallment($paymentMean['name']) + ) { $data['payolutionConfig'] = $moptPayoneMain->getPayoneConfig($paymentMean['id']); $data['moptPayolutionInformation'] = $moptPayoneMain->getPaymentHelper() @@ -304,6 +306,18 @@ protected function moptPayoneCheckEnvironment($controllerName = false) $data['mopt_payone__payolution_invoice_birthday'] = $birthday[2]; $data['mopt_payone__payolution_invoice_birthmonth'] = $birthday[1]; $data['mopt_payone__payolution_invoice_birthyear'] = $birthday[0]; + $data['mopt_payone__payolution_installment_birthday'] = $birthday[2]; + $data['mopt_payone__payolution_installment_birthmonth'] = $birthday[1]; + $data['mopt_payone__payolution_installment_birthyear'] = $birthday[0]; + + // Check if customer is older than 18 Years + if (time() < strtotime('+18 years', strtotime($userData['billingaddress']['birthday']))) { + $data['birthdayunderage'] = "1"; + }else { + $data['birthdayunderage'] = "0"; + } + + } } diff --git a/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxcreditcard.tpl b/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxcreditcard.tpl index 0d79d420..b1a8f017 100644 --- a/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxcreditcard.tpl +++ b/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxcreditcard.tpl @@ -155,6 +155,7 @@ Höhe Stil Css + Platzhalter Kreditkartennummer @@ -177,6 +178,7 @@ + Kreditkartenprüfziffer @@ -199,6 +201,7 @@ + Gültigkeitsmonat @@ -262,7 +265,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Standardübersetzung
MonatÜbersetzungMonatÜbersetzung
JanuarJuli
FebruarAugust
MärzSeptember
AprilOktober
MaiNovember
JuniDezember
+ +

Fehlerausgabe und eigene Fehlermeldungen

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fehlerausgabe aktivieren
Fehlermeldungeigene Fehlermeldung
Ungültige Kreditkartennummer
Ungültige Kartenprüfziffer
Ungültige Kreditkartennummer für den Kartentyp
Ungültiger Kartentyp
Ungültiges Verfallsdatum
Ungültige Ausstellungsnummer
Transaktion abgelehnt
diff --git a/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxfinance.tpl b/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxfinance.tpl index fabf7cb8..851a1ed5 100644 --- a/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxfinance.tpl +++ b/Frontend/MoptPaymentPayone/Views/backend/fc_payone/ajaxfinance.tpl @@ -114,33 +114,51 @@
-