diff --git a/conektaprestashop.php b/conektaprestashop.php index 5062f8886..4eab8f3a7 100755 --- a/conektaprestashop.php +++ b/conektaprestashop.php @@ -237,7 +237,7 @@ private function _createPendingCashState() */ public function uninstall() { - return parent::uninstall() && Configuration::deleteByName('CONEKTA_PRESTASHOP_VERSION') && Configuration::deleteByName('CONEKTA_MSI') && Configuration::deleteByName('CONEKTA_CARDS') && Configuration::deleteByName('CONEKTA_CASH') && Configuration::deleteByName('CONEKTA_BANORTE') && Configuration::deleteByName('CONEKTA_SPEI') && Configuration::deleteByName('CONEKTA_PUBLIC_KEY_TEST') && Configuration::deleteByName('CONEKTA_PUBLIC_KEY_LIVE') && Configuration::deleteByName('CONEKTA_MODE') && Configuration::deleteByName('CONEKTA_PRIVATE_KEY_TEST') && Configuration::deleteByName('CONEKTA_PRIVATE_KEY_LIVE') && Configuration::deleteByName('CONEKTA_PAYMENT_ORDER_STATUS') && Configuration::deleteByName('CONEKTA_WEBHOOK') && Configuration::deleteByName('CONEKTA_WEBHOOK_FAILED_ATTEMPTS') && Configuration::deleteByName('CONEKTA_WEBHOOK_ERROR_MESSAGE') && Configuration::deleteByName('CONEKTA_WEBHOOK_FAILED_URL') && Db::getInstance()->Execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'conekta_customer`') && Db::getInstance()->Execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'conekta_transaction`'); + return parent::uninstall() && Configuration::deleteByName('CONEKTA_PRESTASHOP_VERSION') && Configuration::deleteByName('CONEKTA_MSI') && Configuration::deleteByName('CONEKTA_CARDS') && Configuration::deleteByName('CONEKTA_CASH') && Configuration::deleteByName('CONEKTA_BANORTE') && Configuration::deleteByName('CONEKTA_SPEI') && Configuration::deleteByName('CONEKTA_PUBLIC_KEY_TEST') && Configuration::deleteByName('CONEKTA_PUBLIC_KEY_LIVE') && Configuration::deleteByName('CONEKTA_MODE') && Configuration::deleteByName('CONEKTA_PRIVATE_KEY_TEST') && Configuration::deleteByName('CONEKTA_PRIVATE_KEY_LIVE') && Configuration::deleteByName('CONEKTA_SIGNATURE_KEY_LIVE') && Configuration::deleteByName('CONEKTA_SIGNATURE_KEY_TEST') && Configuration::deleteByName('CONEKTA_PAYMENT_ORDER_STATUS') && Configuration::deleteByName('CONEKTA_WEBHOOK') && Configuration::deleteByName('CONEKTA_WEBHOOK_FAILED_ATTEMPTS') && Configuration::deleteByName('CONEKTA_WEBHOOK_ERROR_MESSAGE') && Configuration::deleteByName('CONEKTA_WEBHOOK_FAILED_URL') && Db::getInstance()->Execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'conekta_customer`') && Db::getInstance()->Execute('DROP TABLE IF EXISTS `' . _DB_PREFIX_ . 'conekta_transaction`'); } /** @@ -602,11 +602,13 @@ public function processPayment($token, $type, $monthly_installments) array( 'source' => array( 'type' => 'card', - 'token_id' => $token, - 'monthly_installments' => $monthly_installments > 1 ? $monthly_installments : null + 'token_id' => $token ), 'amount' => $amount ); + if($monthly_installments > 1){ + array_merge($charge_params->source, array('monthly_installments' => $monthly_installments)) ; + } $charge_response = $order->createCharge($charge_params); $order_status = (int)Configuration::get('PS_OS_PAYMENT'); $message = $this->l('Conekta Transaction Details:') . "\n\n" . $this->l('Amount:') . ' ' . ($charge_response->amount * 0.01) . "\n" . $this->l('Status:') . ' ' . ($charge_response->status == 'paid' ? $this->l('Paid') : $this->l('Unpaid')) . "\n" . $this->l('Processed on:') . ' ' . strftime('%Y-%m-%d %H:%M:%S', $charge_response->created_at) . "\n" . $this->l('Currency:') . ' ' . Tools::strtoupper($charge_response->currency) . "\n" . $this->l('Mode:') . ' ' . ($charge_response->livemode == 'true' ? $this->l('Live') : $this->l('Test')) . "\n"; @@ -770,16 +772,18 @@ public function getContent() if ($submitConfigEvent) { $configuration_values = array( - 'CONEKTA_MODE' => Tools::getValue('conekta_mode') , - 'CONEKTA_PUBLIC_KEY_TEST' => rtrim(Tools::getValue('conekta_public_key_test')) , - 'CONEKTA_PUBLIC_KEY_LIVE' => rtrim(Tools::getValue('conekta_public_key_live')) , - 'CONEKTA_PRIVATE_KEY_TEST' => rtrim(Tools::getValue('conekta_private_key_test')) , - 'CONEKTA_PRIVATE_KEY_LIVE' => rtrim(Tools::getValue('conekta_private_key_live')) , - 'CONEKTA_CARDS' => rtrim(Tools::getValue('conekta_cards')) , - 'CONEKTA_MSI' => rtrim(Tools::getValue('conekta_msi')) , - 'CONEKTA_CASH' => rtrim(Tools::getValue('conekta_cash')) , - 'CONEKTA_BANORTE' => rtrim(Tools::getValue('conekta_banorte')) , - 'CONEKTA_SPEI' => rtrim(Tools::getValue('conekta_spei')) + 'CONEKTA_MODE' => Tools::getValue('conekta_mode') , + 'CONEKTA_PUBLIC_KEY_TEST' => rtrim(Tools::getValue('conekta_public_key_test')) , + 'CONEKTA_PUBLIC_KEY_LIVE' => rtrim(Tools::getValue('conekta_public_key_live')) , + 'CONEKTA_PRIVATE_KEY_TEST' => rtrim(Tools::getValue('conekta_private_key_test')) , + 'CONEKTA_PRIVATE_KEY_LIVE' => rtrim(Tools::getValue('conekta_private_key_live')) , + 'CONEKTA_CARDS' => rtrim(Tools::getValue('conekta_cards')) , + 'CONEKTA_MSI' => rtrim(Tools::getValue('conekta_msi')) , + 'CONEKTA_CASH' => rtrim(Tools::getValue('conekta_cash')) , + 'CONEKTA_BANORTE' => rtrim(Tools::getValue('conekta_banorte')) , + 'CONEKTA_SPEI' => rtrim(Tools::getValue('conekta_spei')), + 'CONEKTA_SIGNATURE_KEY_TEST' => rtrim(Tools::getValue('conekta_signature_key_test')), + 'CONEKTA_SIGNATURE_KEY_LIVE' => rtrim(Tools::getValue('conekta_signature_key_live')) ); foreach ($configuration_values as $configuration_key => $configuration_value) { @@ -829,6 +833,8 @@ public function getContent() $this->smarty->assign("conekta_private_key_test", Configuration::get('CONEKTA_PRIVATE_KEY_TEST')); $this->smarty->assign("conekta_public_key_live", Configuration::get('CONEKTA_PUBLIC_KEY_LIVE')); $this->smarty->assign("conekta_private_key_live", Configuration::get('CONEKTA_PRIVATE_KEY_LIVE')); + $this->smarty->assign("conekta_signature_key_test", Configuration::get('CONEKTA_SIGNATURE_KEY_TEST')); + $this->smarty->assign("conekta_signature_key_live", Configuration::get('CONEKTA_SIGNATURE_KEY_LIVE')); $this->smarty->assign("url", $url); diff --git a/notification.php b/notification.php index cab4fd516..c295001ec 100755 --- a/notification.php +++ b/notification.php @@ -20,6 +20,7 @@ // To configure, add webhook in account storename.com/modules/conektaefectivo/notification.php $body = Tools::file_get_contents('php://input'); +authenticateEvent($body, $_SERVER['HTTP_DIGEST']); $event_json = Tools::jsonDecode($body); if ($event_json->type == 'charge.paid') { @@ -46,5 +47,32 @@ } } +function authenticateEvent($body, $digest) { + if (Configuration::get('CONEKTA_MODE')) { + $private_key_string = Configuration::get('CONEKTA_SIGNATURE_KEY_LIVE'); + } else { + $private_key_string = Configuration::get('CONEKTA_SIGNATURE_KEY_TEST'); + } + if (!empty($private_key_string) && !empty($body)) { + if (!empty($digest)) { + $private_key = openssl_pkey_get_private($private_key_string); + $encrypted_message = base64_decode($digest); + $sha256_message = ""; + openssl_private_decrypt($encrypted_message, $sha256_message, $private_key); + if (hash("sha256", $body) != $sha256_message) { + authenticateLogger("unauthenticated event"); + } + } else { + authenticateLogger("Empty digest"); + } + } + } + + function authenticateLogger($log_message){ + if (version_compare(_PS_VERSION_, '1.4.0.3', '>') && class_exists('Logger')) { + Logger::addLog($log_message, 1, null,'notification', ''); + } + } + header('HTTP/1.1 200 OK'); exit; diff --git a/views/templates/hook/content.tpl b/views/templates/hook/content.tpl index e16898c46..6314f4ccb 100755 --- a/views/templates/hook/content.tpl +++ b/views/templates/hook/content.tpl @@ -137,6 +137,24 @@ +