display_column_left = false; $this->display_column_right = false; parent::init(); } /** * @throws PrestaShopException * @throws Exception */ public function initContent() { parent::initContent(); $imojeToken = Configuration::get('IMOJE_TOKEN'); $merchantId = Configuration::get('IMOJE_MERCHANT_ID'); $serviceId = Configuration::get('IMOJE_SERVICE_ID'); if (!$imojeToken || !$merchantId || !$serviceId) { Tools::redirect('index'); return; } // region check/get $_POST vars $post = [ 'profileId' => isset($_POST['profileId']) && $_POST['profileId'] ? $_POST['profileId'] : '', 'deactivate' => isset($_POST['deactivate']) && $_POST['deactivate'] ? $_POST['deactivate'] : '', 'blikKey' => isset($_POST['blikKey']) && $_POST['blikKey'] ? $_POST['blikKey'] : '', 'checkTransaction' => isset($_POST['checkTransaction']) && $_POST['checkTransaction'] ? $_POST['checkTransaction'] : '', 'transactionId' => isset($_POST['transactionId']) && $_POST['transactionId'] ? $_POST['transactionId'] : '', 'rememberBlikCode' => isset($_POST['rememberBlikCode']) && $_POST['rememberBlikCode'] ? $_POST['rememberBlikCode'] : '', 'continuePayment' => isset($_POST['continuePayment']) && $_POST['continuePayment'] ? $_POST['continuePayment'] : '', 'blikCode' => isset($_POST['blikCode']) && $_POST['blikCode'] && is_numeric($_POST['blikCode']) && (strlen($_POST['blikCode']) === 6) ? $_POST['blikCode'] : '', ]; // endregion $environment = Configuration::get('IMOJE_SANDBOX') ? Util::ENVIRONMENT_SANDBOX : Util::ENVIRONMENT_PRODUCTION; // region initialize Api $imojeApi = new Api( $imojeToken, $merchantId, $serviceId, $environment ); // endregion // region check trx in imoje and make response for ajax call if ($post['checkTransaction'] && $post['transactionId']) { $transaction = $imojeApi->getTransaction( $post['transactionId'] ); if (!$transaction['success']) { Util::doResponseJson(json_encode([ 'status' => $transaction['success'], ])); } Util::doResponseJson(json_encode($this->prepareSuccessResponse($transaction))); } // endregion $cart = $this->context->cart; if (!$cart->date_upd) { Tools::redirect('index'); return; } $imoje = new IMoje(); $paymentMethodBlik = Util::getPaymentMethod('blik'); $paymentMethodCodeBlik = Util::getPaymentMethodCode('blik'); $paymentMethodCodeBlikOneclick = Util::getPaymentMethodCode('blik_oneclick'); if (!Configuration::get('IMOJE_BLIK_CODE_CHECKOUT')) { $transaction = $imojeApi->createTransaction( $imoje->getDataForRequestToApi( $cart, $paymentMethodBlik, $paymentMethodCodeBlik ) ); if (!$transaction['success']) { Tools::redirect($this->context->link->getPageLink('history', true)); return; } $this->context->smarty->assign([ 'form' => $imojeApi->buildOrderForm($transaction), 'ga_key' => Configuration::get('IMOJE_GA_KEY'), 'blik_msg' => true, 'checkout_link' => $this->context->link->getPageLink(Configuration::get('PS_ORDER_PROCESS_TYPE') ? 'order-opc' : 'order'), 'text_return_to_checkout' => $this->module->l('Please wait, you will be returned to checkout.', 'payment'), ]); $this->setTemplate(IMoje::buildTemplatePath('pay', 'front')); return; } // region deactivate profile if ($post['profileId'] && $post['deactivate'] && $post['blikKey']) { $deactivate = $imojeApi->createTransaction( json_encode([ 'blikProfileId' => $post['profileId'], 'blikKey' => $post['blikKey'], ]), $imojeApi->getDeactivateBlikProfileUrl() ); Util::doResponseJson(json_encode([ 'status' => $deactivate['success'], ])); } // endregion // region debit profile if ($post['profileId'] && ($post['blikKey'] || ($post['rememberBlikCode'] && $post['blikCode']))) { $data = json_decode($imoje->getDataForRequestToApi( $cart, $paymentMethodBlik, $paymentMethodCodeBlikOneclick, $post['profileId'] ), true); $transaction = $imojeApi->createTransaction( $imojeApi->prepareBlikOneclickData( $post['profileId'], Util::convertAmountToMain($data['amount']), $data['currency'], $data['orderId'], $data['title'], $data['clientIp'], $post['blikKey'], $post['blikCode'] ), $imojeApi->getDebitBlikProfileUrl() ); if (!$transaction['success']) { Util::doResponseJson(json_encode([ 'status' => $transaction['success'], ])); } Util::doResponseJson(json_encode($this->prepareSuccessResponse($transaction))); } // endregion $activeProfile = []; $profileId = null; $isCustomerLogger = $this->context->customer->isLogged(); // $isImojeBlikOneclick = Configuration::get('IMOJE_BLIK_ONECLICK'); $isImojeBlikOneclick = false; $createOrderArrangement = Configuration::get('IMOJE_CREATE_ORDER_ARRANGEMENT'); if ($isCustomerLogger && $isImojeBlikOneclick && $createOrderArrangement) { $profileList = $imojeApi->getBlikProfileList( Util::getCid($this->context->customer->id . $this->context->customer->email) ); if ((isset($profileList['success']) && $profileList['success']) && $profileList['body']['blikProfiles']) { foreach ($profileList['body']['blikProfiles'] as $profile) { if ($profile['isActive']) { $isProfileLabel = isset($profile['aliasList'][1]); foreach ($profile['aliasList'] as $k => $v) { if (!$isProfileLabel) { $profile['aliasList'][$k]['label'] = $profile['label']; } } $profileId = $profile['id']; $activeProfile = $profile; break; } } } } if ($post['blikCode']) { $transaction = $imojeApi->createTransaction( $imoje->getDataForRequestToApi( $cart, $paymentMethodBlik, $post['rememberBlikCode'] ? $paymentMethodCodeBlikOneclick : $paymentMethodCodeBlik, $post['blikCode'] ) ); if (!$transaction['success']) { Util::doResponseJson(json_encode([ 'status' => $transaction['success'], ])); } Util::doResponseJson(json_encode($this->prepareSuccessResponse($transaction))); } // region display blik code template $this->context->smarty->assign([ 'create_order_arrangement' => $createOrderArrangement, 'loading_gif' => Media::getMediaPath(_PS_MODULE_DIR_ . $imoje->name . '/assets/img/loading.gif'), 'payment_blik_url' => $this->context->link->getModuleLink( 'imoje', 'paymentblik'), 'profile_id' => $profileId, 'payment_tip' => $this->module->l('Please wait, payment is processing.', 'paymentblik'), 'accept_tip1' => $this->module->l('Now accept your payment in bank application.', 'paymentblik'), 'accept_tip2' => $this->module->l('You will be informed via e-mail about it end status, or you can check your payment status later.', 'paymentblik'), 'failure_tip1' => $this->module->l('Unable to complete your payment request.', 'paymentblik'), 'failure_tip2' => $this->module->l('Try again later or contact with shop staff.', 'paymentblik'), 'active_profile' => $activeProfile, 'is_customer_logged' => $isCustomerLogger, 'is_imoje_blik_oneclick' => $isImojeBlikOneclick && $createOrderArrangement, ]); $this->setTemplate(IMoje::buildTemplatePath('payBlikCode', 'front')); // endregion } /** * @param array $transaction * * @return array */ private function prepareSuccessResponse($transaction) { $array = [ 'status' => $transaction['success'], 'body' => [ 'transaction' => [ 'status' => $transaction['body']['transaction']['status'], 'id' => $transaction['body']['transaction']['id'], ], ], ]; if (isset($transaction['body']['transaction']['statusCode']) && $transaction['body']['transaction']['statusCode']) { $array['body']['error'] = $this->getErrorMessage($transaction['body']['transaction']['statusCode']); } if (isset($transaction['body']['code']) && $transaction['body']['code']) { $array['body']['code'] = $transaction['body']['code']; } if (isset($transaction['body']['newParamAlias']) && $transaction['body']['code']) { $array['body']['newParamAlias'] = $transaction['body']['newParamAlias']; } return $array; } /** * @param string $code * * @return string */ private function getErrorMessage($code) { $tEnterT6 = $this->module->l('Insert BLIK code.', 'paymentblik'); $tTryAgain = $this->module->l('Please try again.', 'paymentblik'); switch ($code) { case 'BLK-ERROR-210000': return $this->module->l('Payment failed.', 'paymentblik') . ' ' . $tTryAgain; case 'BLK-ERROR-210001': return $this->module->l('Technical break in your bank. Pay later or use another bank\'s application.', 'paymentblik'); case 'BLK-ERROR-210002': return $this->module->l('Alias not found. To proceed the payment you need to pay with BLIK code.', 'paymentblik'); case 'BLK-ERROR-210003': case 'BLK-ERROR-210004': return $this->module->l('Alias declined. To proceed the payment you need to pay with BLIK code.', 'paymentblik'); case 'BLK-ERROR-210005': $msg = $this->module->l('You have entered wrong BLIK code.', 'paymentblik'); break; case 'BLK-ERROR-210006': $msg = $this->module->l('BLIK code expired.', 'paymentblik'); break; case 'BLK-ERROR-210007': case 'BLK-ERROR-210008': $msg = $this->module->l('Something went wrong with BLIK code.', 'paymentblik'); break; case 'BLK-ERROR-210009': $msg = $this->module->l('Payment declined at the banking application.', 'paymentblik'); break; case 'BLK-ERROR-210010': case 'BLK-ERROR-210011': $msg = $this->module->l('Payment failed - not confirmed on time in the banking application.', 'paymentblik'); break; case 'BLK-ERROR-210012': $msg = $this->module->l('Inserted wrong PIN code in banking application.', 'paymentblik'); break; case 'BLK-ERROR-210013': $msg = $this->module->l('Payment failed (security).', 'paymentblik'); break; case 'BLK-ERROR-210014': $msg = $this->module->l('Limit exceeded in your banking application.', 'paymentblik'); break; case 'BLK-ERROR-210015': $msg = $this->module->l('Insufficient funds in your bank account.', 'paymentblik'); break; case 'BLK-ERROR-210016': $msg = $this->module->l('Issuer declined.', 'paymentblik'); break; case 'BLK-ERROR-210017': $msg = $this->module->l('Transaction not found.', 'paymentblik'); break; case 'BLK-ERROR-210018': $msg = $this->module->l('Bad IBAN.', 'paymentblik'); break; case 'BLK-ERROR-210019': $msg = $this->module->l('Transfer not possible.', 'paymentblik'); break; case 'BLK-ERROR-210020': $msg = $this->module->l('Return late.', 'paymentblik'); break; case 'BLK-ERROR-210021': $msg = $this->module->l('Return amount exceeded.', 'paymentblik'); break; case 'BLK-ERROR-210022': $msg = $this->module->l('Transfer late.', 'paymentblik'); break; default: return $this->module->l('Payment failed.', 'paymentblik') . ' ' . $tEnterT6; } return $msg . ' ' . $tEnterT6; } /** * Verify that error code needs to retype BLIK code in frontend * * @param string $code * * @return bool */ private function checkRetypeCode($code) { $array = [ 'BLK-ERROR-210002', 'BLK-ERROR-210003', 'BLK-ERROR-210004', 'BLK-ERROR-210005', 'BLK-ERROR-210006', 'BLK-ERROR-210007', 'BLK-ERROR-210008', 'BLK-ERROR-210009', 'BLK-ERROR-210010', 'BLK-ERROR-210011', 'BLK-ERROR-210012', 'BLK-ERROR-210013', 'BLK-ERROR-210014', 'BLK-ERROR-210015', 'BLK-ERROR-210016', 'BLK-ERROR-210017', 'BLK-ERROR-210018', 'BLK-ERROR-210019', 'BLK-ERROR-210020', 'BLK-ERROR-210021', 'BLK-ERROR-210022', ]; return in_array($code, $array); } /** * Verify that error code needs to create new paramAlias * * @param string $code * * @return bool */ private function checkNewParamAlias($code) { $array = [ 'BLK-ERROR-210002', 'BLK-ERROR-210003', 'BLK-ERROR-210004', ]; return in_array($code, $array); } }