/** * The API for operations with orders. * * @package WooCommerce\PayPalCommerce\Api * * @phpcs:disable Squiz.Commenting.FunctionCommentThrowTag */ declare (strict_types=1); namespace WooCommerce\PayPalCommerce\Api; use Exception; use InvalidArgumentException; use RuntimeException; use WC_Order; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\PPCP; use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway; use WooCommerce\PayPalCommerce\WcGateway\Helper\RefundFeesUpdater; use WooCommerce\PayPalCommerce\WcGateway\Processor\AuthorizedPaymentsProcessor; use WooCommerce\PayPalCommerce\WcGateway\Processor\OrderProcessor; use WooCommerce\PayPalCommerce\WcGateway\Processor\RefundProcessor; /** * Returns the PayPal order. * * @param string|WC_Order $paypal_id_or_wc_order The ID of PayPal order or a WC order (with the ID in meta). * @throws InvalidArgumentException When the argument cannot be used for retrieving the order. * @throws Exception When the operation fails. */ function ppcp_get_paypal_order($paypal_id_or_wc_order): Order { if ($paypal_id_or_wc_order instanceof WC_Order) { $paypal_id_or_wc_order = $paypal_id_or_wc_order->get_meta(PayPalGateway::ORDER_ID_META_KEY); if (!$paypal_id_or_wc_order) { throw new InvalidArgumentException('PayPal order ID not found in meta.'); } } if (!is_string($paypal_id_or_wc_order)) { throw new InvalidArgumentException('Invalid PayPal order ID, string expected.'); } $order_endpoint = PPCP::container()->get('api.endpoint.order'); assert($order_endpoint instanceof OrderEndpoint); return $order_endpoint->order($paypal_id_or_wc_order); } /** * Creates a PayPal order for the given WC order. * * @param WC_Order $wc_order The WC order. * @throws Exception When the operation fails. */ function ppcp_create_paypal_order_for_wc_order(WC_Order $wc_order): Order { $order_processor = PPCP::container()->get('wcgateway.order-processor'); assert($order_processor instanceof OrderProcessor); return $order_processor->create_order($wc_order); } /** * Captures the PayPal order. * * @param WC_Order $wc_order The WC order. * @throws InvalidArgumentException When the order cannot be captured. * @throws Exception When the operation fails. */ function ppcp_capture_order(WC_Order $wc_order): void { $intent = strtoupper((string) $wc_order->get_meta(PayPalGateway::INTENT_META_KEY)); if ($intent !== 'AUTHORIZE') { throw new InvalidArgumentException('Only orders with "authorize" intent can be captured.'); } $captured = wc_string_to_bool($wc_order->get_meta(AuthorizedPaymentsProcessor::CAPTURED_META_KEY)); if ($captured) { throw new InvalidArgumentException('The order is already captured.'); } $authorized_payment_processor = PPCP::container()->get('wcgateway.processor.authorized-payments'); assert($authorized_payment_processor instanceof AuthorizedPaymentsProcessor); if (!$authorized_payment_processor->capture_authorized_payment($wc_order)) { throw new RuntimeException('Capture failed.'); } } /** * Reauthorizes the PayPal order. * * @param WC_Order $wc_order The WC order. * @throws InvalidArgumentException When the order cannot be captured. * @throws Exception When the operation fails. */ function ppcp_reauthorize_order(WC_Order $wc_order): void { $intent = strtoupper((string) $wc_order->get_meta(PayPalGateway::INTENT_META_KEY)); if ($intent !== 'AUTHORIZE') { throw new InvalidArgumentException('Only orders with "authorize" intent can be reauthorized.'); } $captured = wc_string_to_bool($wc_order->get_meta(AuthorizedPaymentsProcessor::CAPTURED_META_KEY)); if ($captured) { throw new InvalidArgumentException('The order is already captured.'); } $authorized_payment_processor = PPCP::container()->get('wcgateway.processor.authorized-payments'); assert($authorized_payment_processor instanceof AuthorizedPaymentsProcessor); if ($authorized_payment_processor->reauthorize_payment($wc_order) !== AuthorizedPaymentsProcessor::SUCCESSFUL) { throw new RuntimeException($authorized_payment_processor->reauthorization_failure_reason() ?: 'Reauthorization failed.'); } } /** * Refunds the PayPal order. * Note that you can use wc_refund_payment() to trigger the refund in WC and PayPal. * * @param WC_Order $wc_order The WC order. * @param float $amount The refund amount. * @param string $reason The reason for the refund. * @return string The PayPal refund ID. * @throws InvalidArgumentException When the order cannot be refunded. * @throws Exception When the operation fails. */ function ppcp_refund_order(WC_Order $wc_order, float $amount, string $reason = ''): string { $order = ppcp_get_paypal_order($wc_order); $refund_processor = PPCP::container()->get('wcgateway.processor.refunds'); assert($refund_processor instanceof RefundProcessor); return $refund_processor->refund($order, $wc_order, $amount, $reason); } /** * Voids the authorization. * * @param WC_Order $wc_order The WC order. * @throws InvalidArgumentException When the order cannot be voided. * @throws Exception When the operation fails. */ function ppcp_void_order(WC_Order $wc_order): void { $order = ppcp_get_paypal_order($wc_order); $refund_processor = PPCP::container()->get('wcgateway.processor.refunds'); assert($refund_processor instanceof RefundProcessor); $refund_processor->void($order); } /** * Updates the PayPal refund fees totals on an order. * * @param WC_Order $wc_order The WC order. */ function ppcp_update_order_refund_fees(WC_Order $wc_order): void { $updater = PPCP::container()->get('wcgateway.helper.refund-fees-updater'); assert($updater instanceof RefundFeesUpdater); $updater->update($wc_order); } {"id":7015,"date":"2025-06-12T21:51:46","date_gmt":"2025-06-12T21:51:46","guid":{"rendered":"https:\/\/hostamy.com\/?p=7015"},"modified":"2025-06-12T21:51:46","modified_gmt":"2025-06-12T21:51:46","slug":"free-casino-games-slot-machines-the-ultimate-guide","status":"publish","type":"post","link":"https:\/\/hostamy.com\/en_gb\/free-casino-games-slot-machines-the-ultimate-guide\/","title":{"rendered":"Free Casino Games Slot Machines: The Ultimate Guide"},"content":{"rendered":"
Are you a follower of casino site video games? Do you take pleasure in playing slots? If so, you’re in luck! In this write-up, we’ll be exploring the world of free casino site video games slots and whatever you require to understand about them. From the basics of exactly how they function to the different sorts of slots available, we have actually got you covered. So let’s dive in and uncover the exciting world of totally free gambling enterprise video games ports!<\/p>\n
Free gambling enterprise video games slots are on-line fruit machine that allow gamers to delight in the excitement of playing slots without needing to spend any kind of actual cash. These games commonly have the same features and gameplay as their paid equivalents, giving players with a realistic casino site experience.<\/p>\n
These ports are typically readily available on on-line casino site web sites, and they can be accessed on both desktop and smart phones. Free casino site video games ports are a wonderful option for players who want to have fun without the danger of shedding cash.<\/p>\n
Unlike paid ports, where gamers need to make a deposit and wager genuine cash, totally free gambling establishment video games slots are played with online credit scores. These credit reports are provided by the game and can be renewed when they run out. This enables gamers to play as long as they want with no financial implications.<\/p>\n
When it involves totally free gambling establishment games slots, there is a variety of alternatives readily available. Right here are several of the most typical kinds:<\/p>\n
Traditional slots are similar to the standard fruit machine located in land-based online casinos. They generally have three reels and attribute signs such as fruits, bars, and fortunate sevens. These ports are easy and simple, making them perfect for beginners.<\/p>\n
Traditional ports often have actually less paylines compared to various other types of ports. They also have a tendency to have fewer benefit functions and special symbols. Nevertheless, they can still give lots of entertainment and winning possibilities.<\/p>\n
Video slots are one of the most preferred kind of port video games in online gambling establishments. They come with advanced graphics, interesting animations, and immersive sound impacts. Video slots generally have five reels and offer a variety of paylines.<\/p>\n
These ports usually feature a variety of styles, ranging from ancient worlds to popular flicks and TV shows. They likewise include various perk functions, such as totally free rotates, multipliers, and interactive bonus offer rounds. Video clip slots offer a thrilling gaming experience and can give substantial payments.<\/p>\n
Progressive ports are recognized for their huge T\u00fcmbet<\/a> rewards that can reach life-changing quantities. These ports are linked to a network, and a part of each wager made by gamers goes towards the jackpot pool. Therefore, the reward maintains boosting till a person wins it.<\/p>\n