/** * 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":7221,"date":"2025-07-31T23:54:22","date_gmt":"2025-07-31T23:54:22","guid":{"rendered":"https:\/\/hostamy.com\/?p=7221"},"modified":"2025-07-31T23:54:22","modified_gmt":"2025-07-31T23:54:22","slug":"free-slot-machines-a-guide-to-the-exciting-world-of-online-port-games","status":"publish","type":"post","link":"https:\/\/hostamy.com\/en_gb\/free-slot-machines-a-guide-to-the-exciting-world-of-online-port-games\/","title":{"rendered":"Free Slot Machines: A Guide to the Exciting World of Online Port Games"},"content":{"rendered":"
Are you ready to start an exciting trip with the globe of on the internet port games? Look no more than complimentary ports! These digital gambling enterprise games provide limitless entertainment and the opportunity to win big, all without spending a penny. In this detailed guide, we will certainly look into the globe of free melbet casino es confiable<\/a> slots, discovering their advantages, different kinds, and how to locate the best free port video games online.<\/p>\n Free ports have actually gotten tremendous appeal in recent times, many thanks to their accessibility and amazing gameplay. With the advancement of online gambling establishments, gamers can currently take pleasure in a wide range of slot games from the convenience of their homes, and even on the go by means of mobile phones. Free ports use all the delights and exhilaration of their real-money equivalents, without the risk of shedding your hard-earned cash money.<\/p>\n What release ports apart is their availability to all gamers, regardless of their budget. Whether you’re a novice looking to try out different games or an experienced gamer refining your abilities, free slots cater to all degrees of experience. In addition, these video games act as a wonderful method to relax and have fun with no monetary stress.<\/p>\n Furthermore, the surge of free ports has likewise caused a boosted need for ingenious and immersive gameplay experiences. Game developers continually make every effort to develop visually stunning and feature-rich port games to astound gamers and keep them returning for more.<\/p>\n Free ports can be found in various kinds, each providing a special video gaming experience. Recognizing these different types can assist you select the games that straighten with your choices. Allow’s check out a few of the most preferred types of free slots:<\/p>\n With countless online casinos and video game carriers providing totally free slot video games, it can be frustrating to recognize where to start. However, with a little support, you can conveniently find the best totally free port games online. Below are some ideas to help you get started:<\/p>\n Free slots supply an amazing and risk-free way to appreciate the excitement of on the internet port video games. Whether you’re a laid-back gamer searching for some enjoyment or a committed port fanatic, totally free slots deal with all levels of experience. With a wide range of game kinds and numerous choices available online, finding the best free port video games has never been easier. Make the effort to discover different casino sites, reviewed player evaluations, and try out demo variations to uncover the perfect free slots for you. Get ready to rotate the reels and experience the adrenaline thrill of cost-free slot games today!<\/p>","protected":false},"excerpt":{"rendered":" Are you ready to start an exciting trip with the globe of on the internet port games? Look no more than complimentary ports! These digital gambling enterprise games provide limitless entertainment and the opportunity to win big, all without spending a penny. In this detailed guide, we will certainly look into the globe of free […]<\/p>","protected":false},"author":23,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"pmpro_default_level":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-7221","post","type-post","status-publish","format-standard","hentry","category-uncategorized","pmpro-has-access"],"yoast_head":"\nThe Rise of Free Slot Machines<\/h2>\n
\n
\n
Just how to Locate the very best Free Port Games Online<\/h2>\n
\n
Verdict<\/h2>\n