public function init() { self::$amz_payments = new AmzPayments(); $this->isLogged = (bool) $this->context->customer->id && Customer::customerIdExistsStatic((int) $this->context->cookie->id_customer); parent::init(); header('Cache-Control: no-cache, must-revalidate'); header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); $this->display_column_left = false; $this->display_column_right = false; $this->service = self::$amz_payments->getService(); $this->nbProducts = $this->context->cart->nbProducts(); if (Configuration::get('PS_CATALOG_MODE')) { $this->errors[] = Tools::displayError('This store has not accepted your new order.'); } if ($this->nbProducts) { if (CartRule::isFeatureActive()) { if (Tools::isSubmit('submitAddDiscount')) { if (!($code = trim(Tools::getValue('discount_name')))) { $this->errors[] = Tools::displayError('You must enter a voucher code.'); } elseif (!Validate::isCleanHtml($code)) { $this->errors[] = Tools::displayError('The voucher code is invalid.'); } else { if (($cart_rule = new CartRule(CartRule::getIdByCode($code))) && Validate::isLoadedObject($cart_rule)) { if ($error = $cart_rule->checkValidity($this->context, false, true)) { $this->errors[] = $error; } else { $this->context->cart->addCartRule($cart_rule->id); if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) { Tools::redirect('index.php?controller=order-opc&addingCartRule=1'); } Tools::redirect('index.php?controller=order&addingCartRule=1'); } } else { $this->errors[] = Tools::displayError('This voucher does not exists.'); } } $this->context->smarty->assign(array('errors' => $this->errors, 'discount_name' => Tools::safeOutput($code))); } elseif (($id_cart_rule = (int) Tools::getValue('deleteDiscount')) && Validate::isUnsignedId($id_cart_rule)) { $this->context->cart->removeCartRule($id_cart_rule); Tools::redirect('index.php?controller=order-opc'); } } if ($this->context->cart->isVirtualCart()) { $this->setNoCarrier(); } } else { Tools::redirect('index.php?controller=order-opc'); } $this->context->smarty->assign('back', Tools::safeOutput(Tools::getValue('back'))); if ($this->nbProducts) { $this->context->smarty->assign('virtual_cart', $this->context->cart->isVirtualCart()); } $this->context->smarty->assign('is_multi_address_delivery', $this->context->cart->isMultiAddressDelivery() || (int) Tools::getValue('multi-shipping') == 1); $this->context->smarty->assign('open_multishipping_fancybox', (int) Tools::getValue('multi-shipping') == 1); if ($this->context->cart->nbProducts()) { if (Tools::isSubmit('ajax')) { if (Tools::isSubmit('method')) { switch (Tools::getValue('method')) { case 'setsession': $this->context->cookie->amazon_id = Tools::getValue('amazon_id'); $this->context->cookie->amz_access_token = AmzPayments::prepareCookieValueForPrestaShopUse(Tools::getValue('access_token')); $this->context->cookie->amz_access_token_set_time = time(); if (!$this->context->customer->isLogged() && self::$amz_payments->lpa_mode != 'pay') { $d = self::$amz_payments->requestTokenInfo(AmzPayments::prepareCookieValueForAmazonPaymentsUse($this->context->cookie->amz_access_token)); if ($d->aud != self::$amz_payments->client_id) { error_log('auth error LPA'); die('error'); } $d = self::$amz_payments->requestProfile(AmzPayments::prepareCookieValueForAmazonPaymentsUse($this->context->cookie->amz_access_token)); $customer_userid = $d->user_id; $customer_name = $d->name; $customer_email = $d->email; if ($customers_local_id = AmazonPaymentsCustomerHelper::findByAmazonCustomerId($customer_userid)) { Hook::exec('actionBeforeAuthentication'); $customer = new Customer(); $authentication = AmazonPaymentsCustomerHelper::getByCustomerID($customers_local_id, true, $customer); if (isset($authentication->active) && !$authentication->active) { exit; } elseif (!$authentication || !$customer->id) { exit; } else { $this->context->cookie->id_compare = isset($this->context->cookie->id_compare) ? $this->context->cookie->id_compare : CompareProduct::getIdCompareByIdCustomer($customer->id); $this->context->cookie->id_customer = (int) $customer->id; $this->context->cookie->customer_lastname = $customer->lastname; $this->context->cookie->customer_firstname = $customer->firstname; $this->context->cookie->logged = 1; $customer->logged = 1; $this->context->cookie->is_guest = $customer->isGuest(); $this->context->cookie->passwd = $customer->passwd; $this->context->cookie->email = $customer->email; // Add customer to the context $this->context->customer = $customer; if (Configuration::get('PS_CART_FOLLOWING') && (empty($this->context->cookie->id_cart) || Cart::getNbProducts($this->context->cookie->id_cart) == 0) && ($id_cart = (int) Cart::lastNoneOrderedCart($this->context->customer->id))) { $this->context->cart = new Cart($id_cart); } else { $id_carrier = (int) $this->context->cart->id_carrier; $this->context->cart->id_carrier = 0; $this->context->cart->setDeliveryOption(null); $this->context->cart->id_address_delivery = (int) Address::getFirstCustomerAddressId((int) $customer->id); $this->context->cart->id_address_invoice = (int) Address::getFirstCustomerAddressId((int) $customer->id); } $this->context->cart->id_customer = (int) $customer->id; $this->context->cart->secure_key = $customer->secure_key; if ($this->ajax && isset($id_carrier) && $id_carrier && Configuration::get('PS_ORDER_PROCESS_TYPE')) { $delivery_option = array($this->context->cart->id_address_delivery => $id_carrier . ','); $this->context->cart->setDeliveryOption($delivery_option); } $this->context->cart->save(); $this->context->cookie->id_cart = (int) $this->context->cart->id; $this->context->cookie->write(); $this->context->cart->autosetProductAddress(); Hook::exec('actionAuthentication'); // Login information have changed, so we check if the cart rules still apply CartRule::autoRemoveFromCart($this->context); CartRule::autoAddToCart($this->context); } } } exit; case 'updateMessage': if (Tools::isSubmit('message')) { $txt_message = urldecode(Tools::getValue('message')); $this->_updateMessage($txt_message); if (count($this->errors)) { die('{"hasError" : true, "errors" : ["' . implode('\',\'', $this->errors) . '"]}'); } die(true); } break; case 'updateCarrierAndGetPayments': if ((Tools::isSubmit('delivery_option') || Tools::isSubmit('id_carrier')) && Tools::isSubmit('recyclable') && Tools::isSubmit('gift') && Tools::isSubmit('gift_message')) { $this->_assignWrappingAndTOS(); if ($this->_processCarrier()) { $carriers = $this->context->cart->simulateCarriersOutput(); $return = array_merge(array('HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'carrier_data' => $this->_getCarrierList(), 'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array('carriers' => $carriers))), $this->getFormatedSummaryDetail()); Cart::addExtraCarriers($return); die(Tools::jsonEncode($return)); } else { $this->errors[] = Tools::displayError('An error occurred while updating the cart.'); } if (count($this->errors)) { die('{"hasError" : true, "errors" : ["' . implode('\',\'', $this->errors) . '"]}'); } exit; } break; case 'updateTOSStatusAndGetPayments': if (Tools::isSubmit('checked')) { $this->context->cookie->checkedTOS = (int) Tools::getValue('checked'); die(Tools::jsonEncode(array('HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods()))); } break; case 'getCarrierList': die(Tools::jsonEncode($this->_getCarrierList())); case 'getAddressBlockAndCarriersAndPayments': if ($this->context->customer->isLogged()) { if (!Customer::getAddressesTotalById($this->context->customer->id)) { die(Tools::jsonEncode(array('no_address' => 1))); } if (file_exists(_PS_MODULE_DIR_ . 'blockuserinfo/blockuserinfo.php')) { include_once _PS_MODULE_DIR_ . 'blockuserinfo/blockuserinfo.php'; $block_user_info = new BlockUserInfo(); } $this->context->smarty->assign('isVirtualCart', $this->context->cart->isVirtualCart()); $this->_processAddressFormat(); $this->_assignAddress(); $wrapping_fees = $this->context->cart->getGiftWrappingPrice(false); $wrapping_fees_tax_inc = $wrapping_fees = $this->context->cart->getGiftWrappingPrice(); $return = array_merge(array('order_opc_adress' => $this->context->smarty->fetch(_PS_THEME_DIR_ . 'order-address.tpl'), 'block_user_info' => isset($block_user_info) ? $block_user_info->hookTop(array()) : '', 'carrier_data' => $this->_getCarrierList(), 'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'no_address' => 0, 'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int) $this->context->cookie->id_currency)))), $this->getFormatedSummaryDetail()); die(Tools::jsonEncode($return)); } die(Tools::displayError()); case 'makeFreeOrder': if (($id_order = $this->_checkFreeOrder()) && $id_order) { $order = new Order((int) $id_order); $email = $this->context->customer->email; if ($this->context->customer->is_guest) { $this->context->customer->logout(); } die('freeorder:' . $order->reference . ':' . $email); } exit; case 'updateAddressesSelected': $get_order_reference_details_request = new OffAmazonPaymentsService_Model_GetOrderReferenceDetailsRequest(); $get_order_reference_details_request->setSellerId(self::$amz_payments->merchant_id); $get_order_reference_details_request->setAmazonOrderReferenceId(Tools::getValue('amazonOrderReferenceId')); if (isset($this->context->cookie->amz_access_token)) { $get_order_reference_details_request->setAddressConsentToken(AmzPayments::prepareCookieValueForAmazonPaymentsUse($this->context->cookie->amz_access_token)); } $reference_details_result_wrapper = $this->service->getOrderReferenceDetails($get_order_reference_details_request); $physical_destination = $reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getDestination()->getPhysicalDestination(); $iso_code = (string) $physical_destination->GetCountryCode(); $city = (string) $physical_destination->GetCity(); $postcode = (string) $physical_destination->GetPostalCode(); $state = (string) $physical_destination->GetStateOrRegion(); $address_delivery = AmazonPaymentsAddressHelper::findByAmazonOrderReferenceIdOrNew(Tools::getValue('amazonOrderReferenceId')); $address_delivery->id_country = Country::getByIso($iso_code); $address_delivery->alias = 'Amazon Payments Delivery'; $address_delivery->lastname = 'amzLastname'; $address_delivery->firstname = 'amzFirstname'; $address_delivery->address1 = 'amzAddress1'; $address_delivery->city = $city; $address_delivery->postcode = $postcode; if ($state != '') { $state_id = State::getIdByIso($state, Country::getByIso($iso_code)); if (!$state_id) { $state_id = State::getIdByName($state); } if ($state_id) { $address_delivery->id_state = $state_id; } } $address_delivery->save(); AmazonPaymentsAddressHelper::saveAddressAmazonReference($address_delivery, Tools::getValue('amazonOrderReferenceId')); $this->context->smarty->assign('isVirtualCart', $this->context->cart->isVirtualCart()); $old_delivery_address_id = $this->context->cart->id_address_delivery; $this->context->cart->id_address_delivery = $address_delivery->id; $this->context->cart->id_address_invoice = $address_delivery->id; $this->context->cart->setNoMultishipping(); $this->context->cart->updateAddressId($old_delivery_address_id, $address_delivery->id); if (!$this->context->cart->update()) { $this->errors[] = Tools::displayError('An error occurred while updating your cart.'); } $infos = Address::getCountryAndState((int) $this->context->cart->id_address_delivery); if (isset($infos['id_country']) && $infos['id_country']) { $country = new Country((int) $infos['id_country']); $this->context->country = $country; } $cart_rules = $this->context->cart->getCartRules(); CartRule::autoRemoveFromCart($this->context); CartRule::autoAddToCart($this->context); if ((int) Tools::getValue('allow_refresh')) { $cart_rules2 = $this->context->cart->getCartRules(); if (count($cart_rules2) != count($cart_rules)) { $this->ajax_refresh = true; } else { $rule_list = array(); foreach ($cart_rules2 as $rule) { $rule_list[] = $rule['id_cart_rule']; } foreach ($cart_rules as $rule) { if (!in_array($rule['id_cart_rule'], $rule_list)) { $this->ajax_refresh = true; break; } } } } if (!$this->context->cart->isMultiAddressDelivery()) { $this->context->cart->setNoMultishipping(); } if (!count($this->errors)) { $result = $this->_getCarrierList(); if (isset($result['hasError'])) { unset($result['hasError']); } if (isset($result['errors'])) { unset($result['errors']); } $wrapping_fees = $this->context->cart->getGiftWrappingPrice(false); $wrapping_fees_tax_inc = $wrapping_fees = $this->context->cart->getGiftWrappingPrice(); $result = array_merge($result, array('HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int) $this->context->cookie->id_currency))), 'carrier_data' => $this->_getCarrierList(), 'refresh' => (bool) $this->ajax_refresh), $this->getFormatedSummaryDetail()); die(Tools::jsonEncode($result)); } if (count($this->errors)) { die(Tools::jsonEncode(array('hasError' => true, 'errors' => $this->errors))); } break; case 'multishipping': $this->_assignSummaryInformations(); $this->context->smarty->assign('product_list', $this->context->cart->getProducts()); if ($this->context->customer->id) { $this->context->smarty->assign('address_list', $this->context->customer->getAddresses($this->context->language->id)); } else { $this->context->smarty->assign('address_list', array()); } $this->setTemplate(_PS_THEME_DIR_ . 'order-address-multishipping-products.tpl'); $this->display(); die; case 'cartReload': $this->_assignSummaryInformations(); if ($this->context->customer->id) { $this->context->smarty->assign('address_list', $this->context->customer->getAddresses($this->context->language->id)); } else { $this->context->smarty->assign('address_list', array()); } $this->context->smarty->assign('opc', true); $this->setTemplate(_PS_THEME_DIR_ . 'shopping-cart.tpl'); $this->display(); die; case 'noMultiAddressDelivery': $this->context->cart->setNoMultishipping(); die; case 'executeOrder': $customer = new Customer((int) $this->context->cart->id_customer); if (!Validate::isLoadedObject($customer)) { $customer->is_guest = true; $customer->lastname = 'AmazonPayments'; $customer->firstname = 'AmazonPayments'; $customer->email = 'amazon' . time() . '@localshop.xyz'; $customer->passwd = Tools::substr(md5(time()), 0, 10); $customer->save(); } if (Tools::getValue('confirm')) { $total = $this->context->cart->getOrderTotal(true, Cart::BOTH); $currency_order = new Currency((int) $this->context->cart->id_currency); $currency_code = $currency_order->iso_code; if (!AmazonTransactions::isAlreadyConfirmedOrder(Tools::getValue('amazonOrderReferenceId'))) { $set_order_reference_details_request = new OffAmazonPaymentsService_Model_SetOrderReferenceDetailsRequest(); $set_order_reference_details_request->setSellerId(self::$amz_payments->merchant_id); $set_order_reference_details_request->setAmazonOrderReferenceId(Tools::getValue('amazonOrderReferenceId')); $set_order_reference_details_request->setOrderReferenceAttributes(new OffAmazonPaymentsService_Model_OrderReferenceAttributes()); $set_order_reference_details_request->getOrderReferenceAttributes()->setOrderTotal(new OffAmazonPaymentsService_Model_OrderTotal()); $set_order_reference_details_request->getOrderReferenceAttributes()->getOrderTotal()->setCurrencyCode($currency_code); $set_order_reference_details_request->getOrderReferenceAttributes()->getOrderTotal()->setAmount($total); $set_order_reference_details_request->getOrderReferenceAttributes()->setPlatformId(self::$amz_payments->getPfId()); $set_order_reference_details_request->getOrderReferenceAttributes()->setSellerOrderAttributes(new OffAmazonPaymentsService_Model_SellerOrderAttributes()); $set_order_reference_details_request->getOrderReferenceAttributes()->getSellerOrderAttributes()->setSellerOrderId(self::$amz_payments->createUniqueOrderId((int) $this->context->cart->id)); $set_order_reference_details_request->getOrderReferenceAttributes()->getSellerOrderAttributes()->setStoreName(Configuration::get('PS_SHOP_NAME')); $this->service->setOrderReferenceDetails($set_order_reference_details_request); $confirm_order_reference_request = new OffAmazonPaymentsService_Model_ConfirmOrderReferenceRequest(); $confirm_order_reference_request->setAmazonOrderReferenceId(Tools::getValue('amazonOrderReferenceId')); $confirm_order_reference_request->setSellerId(self::$amz_payments->merchant_id); $this->service->confirmOrderReference($confirm_order_reference_request); $get_order_reference_details_request = new OffAmazonPaymentsService_Model_GetOrderReferenceDetailsRequest(); $get_order_reference_details_request->setSellerId(self::$amz_payments->merchant_id); $get_order_reference_details_request->setAmazonOrderReferenceId(Tools::getValue('amazonOrderReferenceId')); if (isset($this->context->cookie->amz_access_token)) { $get_order_reference_details_request->setAddressConsentToken(AmzPayments::prepareCookieValueForAmazonPaymentsUse($this->context->cookie->amz_access_token)); } $reference_details_result_wrapper = $this->service->getOrderReferenceDetails($get_order_reference_details_request); $sql_arr = array('amz_tx_time' => pSQL(time()), 'amz_tx_type' => 'order_ref', 'amz_tx_status' => pSQL($reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getOrderReferenceStatus()->getState()), 'amz_tx_order_reference' => pSQL(Tools::getValue('amazonOrderReferenceId')), 'amz_tx_expiration' => pSQL(strtotime($reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getExpirationTimestamp())), 'amz_tx_reference' => pSQL(Tools::getValue('amazonOrderReferenceId')), 'amz_tx_amz_id' => pSQL(Tools::getValue('amazonOrderReferenceId')), 'amz_tx_last_change' => pSQL(time()), 'amz_tx_amount' => pSQL($reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getOrderTotal()->getAmount())); Db::getInstance()->insert('amz_transactions', $sql_arr); } else { $get_order_reference_details_request = new OffAmazonPaymentsService_Model_GetOrderReferenceDetailsRequest(); $get_order_reference_details_request->setSellerId(self::$amz_payments->merchant_id); $get_order_reference_details_request->setAmazonOrderReferenceId(Tools::getValue('amazonOrderReferenceId')); if (isset($this->context->cookie->amz_access_token)) { $get_order_reference_details_request->setAddressConsentToken(AmzPayments::prepareCookieValueForAmazonPaymentsUse($this->context->cookie->amz_access_token)); } $reference_details_result_wrapper = $this->service->getOrderReferenceDetails($get_order_reference_details_request); } $physical_destination = $reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getDestination()->getPhysicalDestination(); $iso_code = (string) $physical_destination->GetCountryCode(); $city = (string) $physical_destination->GetCity(); $postcode = (string) $physical_destination->GetPostalCode(); $state = (string) $physical_destination->GetStateOrRegion(); $names_array = explode(' ', (string) $physical_destination->getName(), 2); $regex = '/[^a-zA-ZäöüÄÖÜßÂâÀÁáàÇçÈÉËëéèÎîÏïÙÛùúòóûêôíÍŸÿªñÑ\\s]/u'; $names_array[0] = preg_replace($regex, '', $names_array[0]); $names_array[1] = preg_replace($regex, '', $names_array[1]); if ($customer->is_guest) { $customer->lastname = $names_array[1]; $customer->firstname = $names_array[0]; $customer->email = (string) $reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getBuyer()->getEmail(); $customer->save(); $this->context->cart->id_customer = $customer->id; $this->context->cart->save(); } $s_company_name = ''; if ((string) $physical_destination->getAddressLine3() != '') { $s_street = Tools::substr($physical_destination->getAddressLine3(), 0, Tools::strrpos($physical_destination->getAddressLine3(), ' ')); $s_street_nr = Tools::substr($physical_destination->getAddressLine3(), Tools::strrpos($physical_destination->getAddressLine3(), ' ') + 1); $s_company_name = trim($physical_destination->getAddressLine1() . $physical_destination->getAddressLine2()); } else { if ((string) $physical_destination->getAddressLine2() != '') { $s_street = Tools::substr($physical_destination->getAddressLine2(), 0, Tools::strrpos($physical_destination->getAddressLine2(), ' ')); $s_street_nr = Tools::substr($physical_destination->getAddressLine2(), Tools::strrpos($physical_destination->getAddressLine2(), ' ') + 1); $s_company_name = trim($physical_destination->getAddressLine1()); } else { $s_street = Tools::substr($physical_destination->getAddressLine1(), 0, Tools::strrpos($physical_destination->getAddressLine1(), ' ')); $s_street_nr = Tools::substr($physical_destination->getAddressLine1(), Tools::strrpos($physical_destination->getAddressLine1(), ' ') + 1); } } $phone = ''; if ((string) $physical_destination->getPhone() != '' && ValidateCore::isPhoneNumber((string) $physical_destination->getPhone())) { $phone = (string) $physical_destination->getPhone(); } $address_delivery = AmazonPaymentsAddressHelper::findByAmazonOrderReferenceIdOrNew(Tools::getValue('amazonOrderReferenceId')); $address_delivery->lastname = $names_array[1]; $address_delivery->firstname = $names_array[0]; if ($s_company_name != '') { $address_delivery->company = $s_company_name; } $address_delivery->address1 = (string) $s_street . ' ' . (string) $s_street_nr; $address_delivery->postcode = (string) $physical_destination->getPostalCode(); $address_delivery->id_country = Country::getByIso((string) $physical_destination->getCountryCode()); if ($phone != '') { $address_delivery->phone = $phone; } if ($state != '') { $state_id = State::getIdByIso($state, Country::getByIso((string) $physical_destination->getCountryCode())); if (!$state_id) { $state_id = State::getIdByName($state); } if ($state_id) { $address_delivery->id_state = $state_id; } } $address_delivery->save(); AmazonPaymentsAddressHelper::saveAddressAmazonReference($address_delivery, Tools::getValue('amazonOrderReferenceId')); $this->context->cart->id_address_delivery = $address_delivery->id; $billing_address_object = $reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getBillingAddress(); if (method_exists($billing_address_object, 'getPhysicalAddress')) { $amz_billing_address = $reference_details_result_wrapper->GetOrderReferenceDetailsResult->getOrderReferenceDetails()->getBillingAddress()->getPhysicalAddress(); $iso_code = (string) $amz_billing_address->GetCountryCode(); $city = (string) $amz_billing_address->GetCity(); $postcode = (string) $amz_billing_address->GetPostalCode(); $state = (string) $amz_billing_address->GetStateOrRegion(); $invoice_names_array = explode(' ', (string) $amz_billing_address->getName(), 2); $regex = '/[^a-zA-ZäöüÄÖÜßÂâÀÁáàÇçÈÉËëéèÎîÏïÙÛùúòóûêôíÍŸÿªñÑ\\s]/u'; $invoice_names_array[0] = preg_replace($regex, '', $invoice_names_array[0]); $invoice_names_array[1] = preg_replace($regex, '', $invoice_names_array[1]); $s_company_name = ''; if ((string) $amz_billing_address->getAddressLine3() != '') { $s_street = Tools::substr($amz_billing_address->getAddressLine3(), 0, Tools::strrpos($amz_billing_address->getAddressLine3(), ' ')); $s_street_nr = Tools::substr($amz_billing_address->getAddressLine3(), Tools::strrpos($amz_billing_address->getAddressLine3(), ' ') + 1); $s_company_name = trim($amz_billing_address->getAddressLine1() . $amz_billing_address->getAddressLine2()); } else { if ((string) $amz_billing_address->getAddressLine2() != '') { $s_street = Tools::substr($amz_billing_address->getAddressLine2(), 0, Tools::strrpos($amz_billing_address->getAddressLine2(), ' ')); $s_street_nr = Tools::substr($amz_billing_address->getAddressLine2(), Tools::strrpos($amz_billing_address->getAddressLine2(), ' ') + 1); $s_company_name = trim($amz_billing_address->getAddressLine1()); } else { $s_street = Tools::substr($amz_billing_address->getAddressLine1(), 0, Tools::strrpos($amz_billing_address->getAddressLine1(), ' ')); $s_street_nr = Tools::substr($amz_billing_address->getAddressLine1(), Tools::strrpos($amz_billing_address->getAddressLine1(), ' ') + 1); } } $phone = ''; if ((string) $amz_billing_address->getPhone() != '' && ValidateCore::isPhoneNumber((string) $amz_billing_address->getPhone())) { $phone = (string) $amz_billing_address->getPhone(); } $address_invoice = AmazonPaymentsAddressHelper::findByAmazonOrderReferenceIdOrNew(Tools::getValue('amazonOrderReferenceId') . '-inv'); $address_invoice->alias = 'Amazon Payments Invoice'; $address_invoice->lastname = $invoice_names_array[1]; $address_invoice->firstname = $invoice_names_array[0]; if ($s_company_name != '') { $address_invoice->company = $s_company_name; } $address_invoice->address1 = (string) $s_street . ' ' . (string) $s_street_nr; $address_invoice->postcode = (string) $amz_billing_address->getPostalCode(); $address_invoice->city = $city; $address_invoice->id_country = Country::getByIso((string) $amz_billing_address->getCountryCode()); if ($phone != '') { $address_invoice->phone = $phone; } if ($state != '') { $state_id = State::getIdByIso($state, Country::getByIso((string) $amz_billing_address->getCountryCode())); if (!$state_id) { $state_id = State::getIdByName($state); } if ($state_id) { $address_invoice->id_state = $state_id; } } $address_invoice->save(); AmazonPaymentsAddressHelper::saveAddressAmazonReference($address_invoice, Tools::getValue('amazonOrderReferenceId') . '-inv'); $this->context->cart->id_address_invoice = $address_invoice->id; } else { $this->context->cart->id_address_invoice = $address_delivery->id; $address_invoice = $address_delivery; } $this->context->cart->save(); if (self::$amz_payments->authorization_mode == 'fast_auth') { $authorization_reference_id = Tools::getValue('amazonOrderReferenceId'); if (isset($this->context->cookie->setHadErrorNowWallet) && $this->context->cookie->setHadErrorNowWallet == 1) { $confirm_order_ref_req_model = new OffAmazonPaymentsService_Model_ConfirmOrderReferenceRequest(); $confirm_order_ref_req_model->setAmazonOrderReferenceId(Tools::getValue('amazonOrderReferenceId')); $confirm_order_ref_req_model->setSellerId(self::$amz_payments->merchant_id); try { $this->service->confirmOrderReference($confirm_order_ref_req_model); } catch (OffAmazonPaymentsService_Exception $e) { echo 'ERROR: ' . $e->getMessage(); } unset($this->context->cookie->setHadErrorNowWallet); } $authorization_response_wrapper = AmazonTransactions::fastAuth(self::$amz_payments, $this->service, $authorization_reference_id, $total, $currency_code); if (is_object($authorization_response_wrapper)) { $details = $authorization_response_wrapper->getAuthorizeResult()->getAuthorizationDetails(); $status = $details->getAuthorizationStatus()->getState(); if ($status == 'Declined') { $reason = $details->getAuthorizationStatus()->getReasonCode(); if ($reason == 'InvalidPaymentMethod') { $this->context->cookie->setHadErrorNowWallet = 1; die(Tools::jsonEncode(array('hasError' => true, 'errors' => array(Tools::displayError(self::$amz_payments->l('Your selected payment method is currently not available. Please select another one.')))))); } else { die(Tools::jsonEncode(array('hasError' => true, 'redirection' => 'index.php?controller=order', 'errors' => array(Tools::displayError(self::$amz_payments->l('Your selected payment method has been declined. Please chose another one.')))))); } } $amazon_authorization_id = $authorization_response_wrapper->getAuthorizeResult()->getAuthorizationDetails()->getAmazonAuthorizationId(); /* if (self::$amz_payments->capture_mode == 'after_auth') { $amazon_capture_response = AmazonTransactions::capture(self::$amz_payments, $this->service, $amazon_authorization_id, $total, $currency_code); if (is_object($amazon_capture_response)) { $amazon_capture_id = $amazon_capture_response->getCaptureResult() ->getCaptureDetails() ->getAmazonCaptureId(); $amazon_capture_reference_id = $amazon_capture_response->getCaptureResult() ->getCaptureDetails() ->getCaptureReferenceId(); } } */ } } if ($this->context->cart->secure_key == '') { $this->context->cart->secure_key = $customer->secure_key; $this->context->cart->save(); } $new_order_status_id = (int) Configuration::get('PS_OS_PREPARATION'); if ((int) Configuration::get('AMZ_ORDER_STATUS_ID') > 0) { $new_order_status_id = Configuration::get('AMZ_ORDER_STATUS_ID'); } $this->module->validateOrder((int) $this->context->cart->id, $new_order_status_id, $total, $this->module->displayName, null, array(), null, false, $customer->secure_key); if (self::$amz_payments->authorization_mode == 'after_checkout') { $authorization_reference_id = Tools::getValue('amazonOrderReferenceId'); $authorization_response_wrapper = AmazonTransactions::authorize(self::$amz_payments, $this->service, $authorization_reference_id, $total, $currency_code); $amazon_authorization_id = @$authorization_response_wrapper->getAuthorizeResult()->getAuthorizationDetails()->getAmazonAuthorizationId(); /* if (self::$amz_payments->capture_mode == 'after_auth' && isset($amazon_authorization_id) && $amazon_authorization_id !== false && $amazon_authorization_id != null) { $amazon_capture_response = AmazonTransactions::capture(self::$amz_payments, $this->service, $amazon_authorization_id, $total, $currency_code); if (is_object($amazon_capture_response)) { $amazon_capture_id = $amazon_capture_response->getCaptureResult() ->getCaptureDetails() ->getAmazonCaptureId(); $amazon_capture_reference_id = $amazon_capture_response->getCaptureResult() ->getCaptureDetails() ->getCaptureReferenceId(); } } */ } self::$amz_payments->setAmazonReferenceIdForOrderId(Tools::getValue('amazonOrderReferenceId'), $this->module->currentOrder); self::$amz_payments->setAmazonReferenceIdForOrderTransactionId(Tools::getValue('amazonOrderReferenceId'), $this->module->currentOrder); if (isset($authorization_reference_id)) { self::$amz_payments->setAmazonAuthorizationReferenceIdForOrderId($authorization_reference_id, $this->module->currentOrder); } if (isset($amazon_authorization_id)) { self::$amz_payments->setAmazonAuthorizationIdForOrderId($amazon_authorization_id, $this->module->currentOrder); } /* if (isset($amazon_capture_reference_id)) { self::$amz_payments->setAmazonCaptureReferenceIdForOrderId($amazon_capture_reference_id, $this->module->currentOrder); } if (isset($amazon_capture_id)) { self::$amz_payments->setAmazonCaptureIdForOrderId($amazon_capture_id, $this->module->currentOrder); } */ if (isset($this->context->cookie->amzSetStatusAuthorized)) { $tmpOrderRefs = Tools::unSerialize($this->context->cookie->amzSetStatusAuthorized); if (is_array($tmpOrderRefs)) { foreach ($tmpOrderRefs as $order_ref) { AmazonTransactions::setOrderStatusAuthorized($order_ref); } } unset($this->context->cookie->amzSetStatusAuthorized); } if (isset($this->context->cookie->amzSetStatusCaptured)) { $tmpOrderRefs = Tools::unSerialize($this->context->cookie->amzSetStatusCaptured); if (is_array($tmpOrderRefs)) { foreach ($tmpOrderRefs as $order_ref) { AmazonTransactions::setOrderStatusCaptured($order_ref); } } unset($this->context->cookie->amzSetStatusCaptured); } if (Tools::getValue('connect_amz_account') == '1') { $this->context->cookie->amz_connect_order = $this->module->currentOrder; $this->context->cookie->amz_payments_address_id = $address_delivery->id; $this->context->cookie->amz_payments_invoice_address_id = $address_invoice->id; $login_redirect = $this->context->link->getModuleLink('amzpayments', 'process_login'); $login_redirect = str_replace('http://', 'https://', $login_redirect); $login_redirect .= '?fromCheckout=1&access_token=' . $this->context->cookie->amz_access_token; die(Tools::jsonEncode(array('orderSucceed' => true, 'redirection' => $login_redirect))); } if (!$customer->is_guest) { if (!AmzPayments::addressAlreadyExists($address_delivery, $customer)) { $address_delivery->id_customer = $customer->id; $address_delivery->save(); } if (!AmzPayments::addressAlreadyExists($address_invoice, $customer)) { $address_invoice->id_customer = $customer->id; $address_invoice->save(); } } else { if ($registered_customer = AmazonPaymentsCustomerHelper::findByEmailAddress($customer->email)) { if (!AmzPayments::addressAlreadyExists($address_delivery, $registered_customer)) { $address_delivery->id_customer = $registered_customer->id; $address_delivery->save(); } if (!AmzPayments::addressAlreadyExists($address_invoice, $registered_customer)) { $address_invoice->id_customer = $registered_customer->id; $address_invoice->save(); } } $this->context->cookie->show_success_amz_message = true; } die(Tools::jsonEncode(array('orderSucceed' => true, 'redirection' => __PS_BASE_URI__ . 'index.php?controller=order-confirmation&id_cart=' . (int) $this->context->cart->id . '&id_module=' . $this->module->id . '&id_order=' . $this->module->currentOrder . '&key=' . $customer->secure_key))); } die; default: throw new PrestaShopException('Unknown method "' . Tools::getValue('method') . '"'); } } else { throw new PrestaShopException('Method is not defined'); } } } elseif (Tools::isSubmit('ajax')) { throw new PrestaShopException('Method is not defined'); } }
public function __construct() { $this->controller_type = 'modulefront'; $this->module = Module::getInstanceByName(Tools::getValue('module')); if (!$this->module->active) { Tools::redirect('index'); } file_put_contents(dirname(__FILE__) . '/../../amz.log', '[' . date("Y-m-d H:i:s") . '] IPN wurde aufgerufen' . "\n", FILE_APPEND); $headers_tmp = getallheaders(); $headers = array(); foreach ($headers_tmp as $k => $v) { $headers[Tools::strtolower($k)] = $v; } $response = Tools::file_get_contents('php://input'); //file_put_contents(dirname(__FILE__) . '/../../amz.log', '[' . date("Y-m-d H:i:s") . '] Headers: ' . print_r($headers,1) . "\n", FILE_APPEND); //file_put_contents(dirname(__FILE__) . '/../../amz.log', '[' . date("Y-m-d H:i:s") . '] Response: ' . $response . "\n", FILE_APPEND); $amz_payments = new AmzPayments(); try { $client = $amz_payments->getService(false, 'notification'); file_put_contents(dirname(__FILE__) . '/../../amz.log', '[' . date("Y-m-d H:i:s") . '] Notification response received' . "\n", FILE_APPEND); $result = $client->parseRawMessage($headers, $response); } catch (OffAmazonPaymentsNotifications_InvalidMessageException $ex) { error_log($ex->getMessage()); file_put_contents(dirname(__FILE__) . '/../../amz.log', '[' . date("Y-m-d H:i:s") . '] Error: ' . $ex->getMessage() . "\n", FILE_APPEND); header("HTTP/1.1 503 Service Unavailable"); exit(0); } ob_start(); $response = $this->jsonCleanDecode($response); $message = $this->jsonCleanDecode($response->Message); $response_xml = simplexml_load_string($message->NotificationData); $response_xml = $response_xml; if ($amz_payments->ipn_status == '1') { echo '[' . date("Y-m-d H:i:s") . '] [' . $message->NotificationType . '] '; switch ($message->NotificationType) { case 'PaymentAuthorize': $q = 'SELECT * FROM ' . _DB_PREFIX_ . 'amz_transactions WHERE amz_tx_type = \'auth\' AND amz_tx_amz_id = \'' . pSQL($response_xml->AuthorizationDetails->AmazonAuthorizationId) . '\''; $r = Db::getInstance()->getRow($q); $sqlArr = array('amz_tx_status' => pSQL((string) $response_xml->AuthorizationDetails->AuthorizationStatus->State), 'amz_tx_last_change' => time(), 'amz_tx_expiration' => strtotime($response_xml->AuthorizationDetails->ExpirationTimestamp), 'amz_tx_last_update' => time()); Db::getInstance()->update('amz_transactions', $sqlArr, ' amz_tx_id = ' . (int) $r['amz_tx_id']); $amz_payments->refreshAuthorization($response_xml->AuthorizationDetails->AmazonAuthorizationId); if ($sqlArr['amz_tx_status'] == 'Open') { AmazonTransactions::setOrderStatusAuthorized($r['amz_tx_order_reference'], true); if ($amz_payments->capture_mode == 'after_auth') { $order_id = AmazonTransactions::getOrdersIdFromOrderRef($r['amz_tx_order_reference']); $order = new Order((int) $order_id); if (Validate::isLoadedObject($order)) { $currency = new Currency($order->id_currency); if (Validate::isLoadedObject($currency)) { AmazonTransactions::capture($amz_payments, $amz_payments->getService(), $response_xml->AuthorizationDetails->AmazonAuthorizationId, $r['amz_tx_amount'], $currency->iso_code); } } } } elseif ($sqlArr['amz_tx_status'] == 'Declined') { $reason = (string) $response_xml->AuthorizationDetails->AuthorizationStatus->ReasonCode; $amz_payments->intelligentDeclinedMail($response_xml->AuthorizationDetails->AmazonAuthorizationId, $reason); if ($amz_payments->decline_status_id > 0) { AmazonTransactions::setOrderStatusDeclined(r['amz_tx_order_reference']); } } break; case 'PaymentCapture': $q = 'SELECT * FROM ' . _DB_PREFIX_ . 'amz_transactions WHERE amz_tx_type = \'capture\' AND amz_tx_amz_id = \'' . pSQL($response_xml->CaptureDetails->AmazonCaptureId) . '\''; $r = Db::getInstance()->getRow($q); $sqlArr = array('amz_tx_status' => pSQL((string) $response_xml->CaptureDetails->CaptureStatus->State), 'amz_tx_last_change' => time(), 'amz_tx_amount_refunded' => (double) $response_xml->CaptureDetails->RefundedAmount->Amount, 'amz_tx_last_update' => time()); Db::getInstance()->update('amz_transactions', $sqlArr, ' amz_tx_id = ' . (int) $r['amz_tx_id']); $orderTotal = AmazonTransactions::getOrderRefTotal($r['amz_tx_order_reference']); if ($r['amz_tx_amount'] == $orderTotal) { AmazonTransactions::closeOrder($amz_payments, $amz_payments->getService(), $r['amz_tx_order_reference']); } break; case 'PaymentRefund': $q = 'SELECT * FROM ' . _DB_PREFIX_ . 'amz_transactions WHERE amz_tx_type = \'refund\' AND amz_tx_amz_id = \'' . pSQL($response_xml->RefundDetails->AmazonRefundId) . '\''; $r = Db::getInstance()->getRow($q); $sqlArr = array('amz_tx_status' => pSQL((string) $response_xml->RefundDetails->RefundStatus->State), 'amz_tx_last_change' => time(), 'amz_tx_last_update' => time()); Db::getInstance()->update('amz_transactions', $sqlArr, ' amz_tx_id = ' . (int) $r['amz_tx_id']); break; case 'OrderReferenceNotification': $q = 'SELECT * FROM ' . _DB_PREFIX_ . 'amz_transactions WHERE amz_tx_type = \'order_ref\' AND amz_tx_amz_id = \'' . pSQL($response_xml->OrderReference->AmazonOrderReferenceId) . '\''; $r = Db::getInstance()->getRow($q); $sqlArr = array('amz_tx_status' => pSQL((string) $response_xml->OrderReference->OrderReferenceStatus->State), 'amz_tx_last_change' => time(), 'amz_tx_last_update' => time()); Db::getInstance()->update('amz_transactions', $sqlArr, ' amz_tx_id = ' . (int) $r['amz_tx_id']); break; } if ($amz_payments->capture_mode == 'after_shipping') { $amz_payments->shippingCapture(); } } $str = ob_get_contents(); ob_end_clean(); if (trim($str) != '') { $str .= "\n"; } file_put_contents(dirname(__FILE__) . '/../../amz.log', $str, FILE_APPEND); echo 'OK'; exit; }
public function refreshAuthorization($auth_id) { $service = $this->getService(); $authorization_request = new OffAmazonPaymentsService_Model_GetAuthorizationDetailsRequest(); $authorization_request->setSellerId($this->merchant_id); $authorization_request->setAmazonAuthorizationId($auth_id); try { $response = $service->getAuthorizationDetails($authorization_request); $details = $response->getGetAuthorizationDetailsResult()->getAuthorizationDetails(); // $address = $details->getAuthorizationBillingAddress(); $sql_arr = array('amz_tx_status' => pSQL((string) $details->getAuthorizationStatus()->getState()), 'amz_tx_last_change' => pSQL(strtotime((string) $details->getAuthorizationStatus()->getLastUpdateTimestamp())), 'amz_tx_last_update' => pSQL(time())); Db::getInstance()->update('amz_transactions', $sql_arr, " amz_tx_amz_id = '" . pSQL($auth_id) . "'"); if ((string) $details->getAuthorizationStatus()->getState() == 'Declined') { $reason = (string) $details->getAuthorizationStatus()->getReasonCode(); if ($reason == 'AmazonRejected') { $order_ref = AmazonTransactions::getOrderRefFromAmzId($auth_id); $this->cancelOrder($order_ref); } $this->intelligentDeclinedMail($auth_id, $reason); if ($this->decline_status_id > 0) { $order_ref = AmazonTransactions::getOrderRefFromAmzId($auth_id); AmazonTransactions::setOrderStatusDeclined($order_ref, true); } } elseif ((string) $details->getAuthorizationStatus()->getState() == 'Open') { $order_ref = AmazonTransactions::getOrderRefFromAmzId($auth_id); AmazonTransactions::setOrderStatusAuthorized($order_ref, true); } elseif ((string) $details->getAuthorizationStatus()->getState() == 'Closed' && (string) $details->getAuthorizationStatus()->getReasonCode() == 'MaxCapturesProcessed') { $captureIds = $details->getIdList()->getMember(); if (isset($captureIds[0])) { $captureId = (string) $captureIds[0]; $order_ref = AmazonTransactions::getOrderRefFromAmzId($auth_id); $capture_request = new OffAmazonPaymentsService_Model_GetCaptureDetailsRequest(); $capture_request->setSellerId($this->merchant_id); $capture_request->setAmazonCaptureId($captureId); try { $response = $service->getCaptureDetails($capture_request); $details = $response->getGetCaptureDetailsResult()->getCaptureDetails(); $sql_arr = array('amz_tx_order_reference' => pSQL($order_ref), 'amz_tx_type' => 'capture', 'amz_tx_time' => pSQL(time()), 'amz_tx_expiration' => 0, 'amz_tx_amount' => pSQL((string) $details->getCaptureAmount()->getAmount()), 'amz_tx_status' => pSQL($details->getCaptureStatus()->getState()), 'amz_tx_reference' => pSQL($details->getCaptureReferenceId()), 'amz_tx_amz_id' => pSQL($details->getAmazonCaptureId()), 'amz_tx_last_change' => pSQL(time()), 'amz_tx_last_update' => pSQL(time())); $checkQuery = 'SELECT * FROM ' . _DB_PREFIX_ . 'amz_transactions WHERE `amz_tx_order_reference` = \'' . pSQL($order_ref) . '\' AND `amz_tx_type` = \'capture\' '; if ($row = Db::getInstance()->getRow($checkQuery)) { return; } else { Db::getInstance()->insert('amz_transactions', $sql_arr); AmazonTransactions::setOrderStatusCapturedSuccesfully($order_ref); } } catch (OffAmazonPaymentsService_Exception $e) { echo 'ERROR: ' . $e->getMessage(); } } } } catch (OffAmazonPaymentsService_Exception $e) { echo 'ERROR: ' . $e->getErrorMessage(); } }