"Tamara", ]; public function boot() { add_filter('woocommerce_available_payment_gateways', [$this, 'conditional_payment_gateways'], 10, 1); } public function configuration($country, $amount) { $url = $this->testMode ? 'https://tamara-dev.hyperpay.com' : 'https://tamara-prod.hyperpay.com'; $data = [ "country" => $country, "order_value" => [ "amount" => $amount, "currency" => $this->currency ] ]; $res = wp_remote_post("$url/api/tamara-description/{$this->entityId}", ['body' => $data]); $configurations = json_decode(wp_remote_retrieve_body($res), true); $locale = substr(get_locale(), 0, 2); if (isset($configurations['available_payment_labels'][0]["description_$locale"])) { $this->description = $configurations['available_payment_labels'][0]["description_$locale"]; } return $configurations; } public function canMakePayment() { if (!isset($_POST['nonce']) || !wp_verify_nonce(sanitize_text_field(wp_unslash($_POST['nonce'])), 'hyperpay_tamara_nonce')) { return wp_send_json([ "canMakePayment" => false, ]); } if ( !isset($_POST['billingData']['country']) || !isset($_POST['cartTotals']['total_price']) || !isset($_POST['cartTotals']['currency_minor_unit']) ) { return wp_send_json([ "canMakePayment" => false, ]); } $country = sanitize_text_field(wp_unslash($_POST['billingData']['country'])); $amount = sanitize_text_field((wp_unslash($_POST['cartTotals']['total_price'])) / 100 ** (wp_unslash($_POST['cartTotals']['currency_minor_unit']))); $this->configurations = $this->configuration($country, $amount); if (!isset($this->configurations['available_payment_labels']) || !count($this->configurations['available_payment_labels'])) { return wp_send_json([ "canMakePayment" => false, "details" => $this->configurations["message"] ?? $this->configurations ]); } return wp_send_json([ "canMakePayment" => true, "description" => $this->description, ]);; } /** * check if the order have the minimum requirements * to display Tamara * * @param array $available_gateways * * @return array $available_gateways */ public function conditional_payment_gateways($available_gateways) { if (!is_admin() && is_checkout()) { $country = WC()->customer->get_billing_country(); $amount = WC()->cart->total; $this->configurations = $this->configuration($country, $amount); if (!(isset($this->configurations['available_payment_labels']) && count($this->configurations['available_payment_labels']))) { unset($available_gateways['hyperpay_tamara']); } } return $available_gateways; } /** * to set extra parameter on requested data to connector * just uncomment the function below * * @param object $order * @return array */ public function setExtraData(WC_Order $order): array { global $woocommerce; $data = [ "customer.mobile" => $order->get_billing_phone() ]; $cart_index = 0; foreach ($woocommerce->cart->get_cart() as $cart_item) { $data["cart.items[$cart_index].merchantItemId"] = "By_Hyperpay" . $cart_item['data']->get_id(); $data["cart.items[$cart_index].type"] = $cart_item['data']->get_type() ?? 'N/A'; $data["cart.items[$cart_index].name"] = $cart_item['data']->get_title(); $data["cart.items[$cart_index].totalAmount"] = number_format((float)$cart_item['data']->get_price(), 2, '.', ''); $data["cart.items[$cart_index].quantity"] = $cart_item['quantity']; $data["cart.items[$cart_index].sku"] = wp_rand(111111, 999999); $cart_index++; } $amount = number_format($order->get_total(), 2, '.', ''); $country = $order->get_billing_country(); $configurations = $this->configuration($country, $amount); $data["customParameters[discount]"] = 00.00; $data["customParameters[tamara_payment_type]"] = $configurations['available_payment_labels'][0]['payment_type']; $data["customParameters[instalments]"] = $configurations['available_payment_labels'][0]['instalment']; $data["taxAmount"] = 00.00; return ['body' => $data]; } public function iconSrc() { $locale = substr(get_locale(), 0, 2); $img = HYPERPAY_PLUGIN_DIR . '/src/assets/images/default.png'; if (file_exists(Main::ROOT_PATH . "/assets/images/TAMARA-logo_$locale.svg")) { $img = HYPERPAY_PLUGIN_DIR . "/src/assets/images/TAMARA-logo_$locale.svg"; } return [$img]; } /** * Set Tamara terms and conditions * based on Tamara API configuration * @param string $icon * @param string $id * * @return string $icon */ public function set_icons($icon, $id) { if ($id == $this->id) { $img = $this->iconSrc(); $icons = ""; return $icons . "

{$this->description}

"; } return $icon; } }