HEX
Server: Apache
System: Linux webm019.cluster128.gra.hosting.ovh.net 6.18.42-ovh-vps-grsec-zfs+ #1 SMP PREEMPT_DYNAMIC Wed Aug 5 15:59:48 CEST 2026 x86_64
User: petsclubcc (68997)
PHP: 5.4.45
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/petsclubcc/shop/modules/amazonpay/src/classes/Helper/AmazonPayHelper.php
<?php
/**
 * 2007-2021 patworx.de
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade AmazonPay to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to http://www.prestashop.com for more information.
 *
 *  @author    patworx multimedia GmbH <service@patworx.de>
 *  @copyright 2007-2021 patworx multimedia GmbH
 *  @license   http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
 */

class AmazonPayHelper
{

    /**
     * Fetch region specific checkout-JS URL, default EU
     *
     * @return string
     */
    public static function getCheckoutJSURL()
    {
        if (Configuration::get('AMAZONPAY_REGION') != '') {
            return AmazonPayDefinitions::$checkoutJs[Configuration::get('AMAZONPAY_REGION')];
        }
        return AmazonPayDefinitions::$checkoutJs['EU'];
    }

    /**
     * Fetch region specific keyexchange URL, default EU
     *
     * @return string
     */
    public static function getPublicKeyURL()
    {
        if (Configuration::get('AMAZONPAY_REGION') != '') {
            return AmazonPayDefinitions::$getPublicKeyURL[Configuration::get('AMAZONPAY_REGION')];
        }
        return AmazonPayDefinitions::$getPublicKeyURL['EU'];
    }

    /**
     * @return bool
     */
    public static function isAmazonPayCheckout()
    {
        $amazonPayCheckoutSession = new AmazonPayCheckoutSession(false);
        if ($amazonPayCheckoutSession->checkStatus()) {
            return true;
        }
        return false;
    }

    /**
     * @param false $specific
     * @param false $params
     * @return bool
     * @throws PrestaShopException
     */
    public static function orderAllowed($specific = false, $params = false)
    {
        $minimalPurchase = Tools::convertPrice((float) Configuration::get('PS_PURCHASE_MINIMUM'));
        Hook::exec('overrideMinimalPurchasePrice', [
            'minimalPurchase' => &$minimalPurchase,
        ]);
        if ($specific == 'product') {
            if (is_array($params)) {
                $pPrice = Product::getPriceStatic((int)$params['id_product'], false);
            } else {
                if (!isset($params->id_product)) {
                    return false;
                }
                $pPrice = Product::getPriceStatic((int)$params->id_product, false);
            }
            if ((Context::getContext()->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) + $pPrice) < $minimalPurchase) {
                return false;
            }
        } else {
            if (Context::getContext()->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) < $minimalPurchase) {
                return false;
            }
        }
        return true;
    }

    /**
     * @return mixed
     */
    public static function showInCheckoutSection()
    {
        return Configuration::get('AMAZONPAY_PLACEMENT_CHECKOUT');
    }

    /**
     * @return mixed
     */
    public static function showInLoginSection()
    {
        return Configuration::get('AMAZONPAY_PLACEMENT_LOGIN');
    }

    /**
     * @return bool
     */
    public static function showStandardCheckoutPaymentOption()
    {
        return Configuration::get('AMAZONPAY_SHOW_STANDARD_PAYMENT_OPTION');
    }

    /**
     * @return bool
     */
    public static function hideAmazonPayButtonInRegularCheckoutStep()
    {
        return Configuration::get('AMAZONPAY_HIDE_BUTTON_IN_REGULAR_CHECKOUT_STEP');
    }

    /**
     * @return bool
     */
    public static function isButtonHiddenMode()
    {
        return Configuration::get('AMAZONPAY_BUTTONS_HIDDEN_MODE');
    }

    /**
     * @return array
     */
    public static function getAmazonPayConfig()
    {
        $amazonpay_config = array(
            'public_key_id' => Configuration::get('AMAZONPAY_PUBLIC_KEY_ID'),
            'private_key'   => Configuration::get('AMAZONPAY_PRIVATE_KEY'),
            'region'        => Configuration::get('AMAZONPAY_REGION'),
            'sandbox'       => Configuration::get('AMAZONPAY_LIVEMODE') ? false : true
        );
        return $amazonpay_config;
    }

    /**
     * @return AmazonPayClient
     * @throws Exception
     */
    public static function getClient()
    {
        return new AmazonPayClient(self::getAmazonPayConfig());
    }

    /**
     * May capture directly after checkout?
     *
     * @return bool
     */
    public static function captureDirectlyAfterCheckout()
    {
        return Configuration::get('AMAZONPAY_CAPTURE_MODE') == 'on_order';
    }

    /**
     * Capture at shipping?
     *
     * @return bool
     */
    public static function captureAtShipping()
    {
        return Configuration::get('AMAZONPAY_CAPTURE_MODE') == 'on_shipment';
    }

    /**
     * Return configured payment intent
     *
     * @return string
     */
    public static function getPaymentIntent()
    {
        // UPDATE 04.07.2020 - To fix bug at Amazon Pay for Optimized auth mode
        // Always return 'Authorize' if Optimized Sync mode!
        // To be removed after Amazon Pay has fixed it on their side.
        if (self::canHandlePendingAuthorization()) {
            return 'Authorize';
        }

        // Regular handling
        if (Configuration::get('AMAZONPAY_AUTH_MODE') == 'confirm') {
            return 'Confirm';
        } else {
            return 'Authorize';
        }
    }

    /**
     * @return string
     */
    public static function getMerchantReferenceId()
    {
        return 'AP' . Context::getContext()->cart->id . '-' . Tools::passwdGen(8);
    }

    /**
     * Return specific configured Order-Status-ID
     *
     * @param $type
     * @return int
     */
    public static function getStatus($type)
    {
        $status = 0;
        switch ($type) {
            case 'decline':
                $status = (int)Configuration::get('AMAZONPAY_DECLINE_STATUS_ID');
                if ($status == 0) {
                    $status = (int)Configuration::get('_PS_OS_ERROR_');
                }
                break;
            case 'authorized':
                $status = (int)Configuration::get('AMAZONPAY_AUTHORIZED_STATUS_ID');
                if ($status == 0) {
                    $status = (int)Configuration::get('PS_OS_PAYMENT');
                }
                break;
            case 'captured':
                $status = (int)Configuration::get('AMAZONPAY_CAPTURED_STATUS_ID');
                if ($status == 0) {
                    $status = (int)Configuration::get('_PS_OS_WS_PAYMENT_');
                }
                break;
        }
        return $status;
    }

    /**
     * Returns if can handle pending auth
     *
     * @return bool
     */
    public static function canHandlePendingAuthorization()
    {
        return Configuration::get('AMAZONPAY_SYNC_MODE') == '0';
    }

    /**
     * Returns currency currently set by user in frontend
     *
     * @return string
     */
    public static function getCurrentCurrency()
    {
        try {
            $id_currency = Context::getContext()->currency->id;
            $currency = new Currency((int)$id_currency);
            if ($currency->iso_code != '') {
                return $currency->iso_code;
            } else {
                return 'EUR';
            }
        } catch (\Exception $e) {
            return 'EUR';
        }
        return 'EUR';
    }

    /**
     * Returns currency
     *
     * @return string
     */
    public static function getLedgerCurrency()
    {
        switch (Configuration::get('AMAZONPAY_REGION')) {
            case 'UK':
                return 'GBP';
            case 'US':
                return 'USD';
            case 'JP':
                return 'JPY';
        }
        return 'EUR';
    }

    /**
     * @param $type
     * @return string
     */
    public static function getButtonColor($type)
    {
        $color = 'Gold';
        switch (Tools::strtolower($type)) {
            case 'checkout':
                $color = Configuration::get('AMAZONPAY_BUTTON_COLOR_CHECKOUT');
                break;
            case 'cart':
                $color = Configuration::get('AMAZONPAY_BUTTON_COLOR_CART');
                break;
            case 'product':
                $color = Configuration::get('AMAZONPAY_BUTTON_COLOR_PRODUCT');
                break;
        }
        return $color;
    }

    /**
     * @return bool
     */
    public static function jumpInvoiceAddress()
    {
        return Configuration::get('AMAZONPAY_JUMP_INVOICE_ADDRESS') == 1;
    }

    /**
     * Returns specific checkout Language
     *
     * @return string
     */
    public static function getCheckoutLanguage()
    {
        if (Configuration::get('AMAZONPAY_REGION') == 'UK') {
            return 'en_GB';
        } elseif (Configuration::get('AMAZONPAY_REGION') == 'US') {
            return 'en_US';
        } elseif (Configuration::get('AMAZONPAY_REGION') == 'JP') {
            return 'ja_JP';
        }
        if (in_array(Context::getContext()->language->iso_code, ['de', 'fr', 'it', 'es'])) {
            return Context::getContext()->language->iso_code . '_' . Tools::strtoupper(Context::getContext()->language->iso_code);
        }
        return 'en_GB';
    }

    /**
     * @return array
     */
    public static function getBannersForLanguageCode()
    {
        $banners =  AmazonPayDefinitions::$banners;
        switch (Context::getContext()->language->iso_code) {
            case 'de':
                return $banners['de'];
            case 'at':
                return $banners['at'];
            case 'us':
            case 'en':
                return $banners['uk'];
            case 'fr':
                return $banners['fr'];
            case 'it':
                return $banners['it'];
            case 'es':
                return $banners['es'];
            default:
                return $banners['uk'];
        }
    }

    /**
     * @param $redirectUrl
     * @return array
     * @throws Exception
     */
    public static function getButtonPayloadAndSignature()
    {
        $session = new AmazonPayCheckoutSession(false);
        $client = self::getClient();
        $payload = json_encode($session->createNewCheckoutSession(true));
        return [
            'payload' => $payload,
            'signature' => $client->generateButtonSignature($payload)
        ];
    }

    public static function getLoginOnlyButtonPayloadAndSignature($toCheckout = false)
    {
        if ($toCheckout) {
            $signInReturnUrl = Context::getContext()->link->getModuleLink('amazonpay', 'processlogin', array('toCheckout' => '1'));
        } else {
            $signInReturnUrl = Context::getContext()->link->getModuleLink('amazonpay', 'processlogin');
        }
        $client = self::getClient();
        $payload = json_encode(
            array(
                'signInReturnUrl' => $signInReturnUrl,
                'storeId' => Configuration::get('AMAZONPAY_STORE_ID'),
                'signInScopes' => array(
                    "name", "email", "postalCode"
                )
            )
        );
        return [
            'payload' => $payload,
            'signature' => $client->generateButtonSignature($payload)
        ];
    }

    /**
     * @param $iso_code
     * @return bool
     */
    public static function isValidAmazonDeliveryCountry($iso_code)
    {
        return in_array(Tools::strtoupper($iso_code), AmazonPayDefinitions::$valid_country_codes);
    }

    /**
     * @param $country
     * @return bool
     */
    public static function hasAtLeastOneCarrier($country)
    {
        $countries = Carrier::getDeliveredCountries(Context::getContext()->language->id, true, true);
        if (isset($countries[$country['id_country']])) {
            return true;
        }
        return false;
    }
}