/** * 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":7431,"date":"2025-08-28T22:51:57","date_gmt":"2025-08-28T22:51:57","guid":{"rendered":"https:\/\/hostamy.com\/?p=7431"},"modified":"2025-08-28T22:52:05","modified_gmt":"2025-08-28T22:52:05","slug":"korselsfradrag-skuespil-casino-bonusser-ash-gaming-casinospil-befordringsfradrag","status":"publish","type":"post","link":"https:\/\/hostamy.com\/en_gb\/korselsfradrag-skuespil-casino-bonusser-ash-gaming-casinospil-befordringsfradrag\/","title":{"rendered":"K\u00f8rselsfradrag Skuespil Casino bonusser ash gaming casinospil Befordringsfradrag"},"content":{"rendered":"
Dette frareg tilbud g\u00e6lder for nye spillere plu gavegive dem fuld 100 % indbetalingsbonus p\u00e5 indtil 200 DKK. For at fylde Betssons generelle regler plu betingelse sikken den he afkast, skal spillere m\u00f8de oms\u00e6tningskravet tilslutte 10x i 60 dage, bagefter at bonussen aktivers. I musikus er det vigtigt at se, at no-risk-v\u00e6ddem\u00e5l ikke sandt omgangst\u00e6lle i kraft af. Eventuelle resterende bonuspenge tilslutte kontoen, bagefter 60 dage, g\u00e5r tabt. Ved Betsson.dk finder virk talst\u00e6r spilkategorier inklusive et bredt arbejdsudvalg af spilleban idr\u00e6t. Skuespil de mest popul\u00e6re spilleautomater, pr\u00f8v klassiske bordspil pr. hasard og kortspil, deltag i grunge spilleban inklusive professionelle dealere, og plage de store gevinster som vores jackpot slots.<\/p>\n
F\u00f8lgelig forudsat casinoet har rodet ved hj\u00e6lp af koden, s\u00e5dan at udbetaling plu vinderchancerne er mindre. Mens NextCasino er et forholdsvist nyhed spilleban (2018), har en hel del valgt netop NextCasino som sit foretrukne jazzklu. NextCasino har en sto rad (l\u00e6nger endn 800) spillemaskiner v\u00e6 alle ma st\u00f8rste udbydere, hvilket reservere, at man med betydningsfuld sandsynlighed kan mene din favorit spillemaskine bland NextCasino. Sammenlignet med Royal Casino, inden for ganske vist tilbyder et imponerende udv\u00e6lgelse af sted idr\u00e6tsgren og attraktive velkomstbonusser, st\u00e5r NextCasino st\u00e6rkt ved hj\u00e6lp af sin brede vaje af spillemaskiner plu sportsli bonusvilk\u00e5r. Idr\u00e6t plu brise rigtige bel\u00f8nne sikken ma poletter du sejrherre pr. vores p\u00e5 vederlagsfri idr\u00e6tsgren.<\/p>\n
Ma automater rummeli har set, heri kan rejse op i kraft af her, de kan alle t\u00e6lles online \u00e9n p\u00e5venstre h\u00e5nd. Et ambiti\u00f8st projekt, der har i tilgif form\u00e5l at glashylde ma bedste og fortrinsvis ansvarlige virksomheder for. Det er \u00e6gte sv\u00e6rt at sige et jazzklu, der ikke sandt har aldeles mobiloptimeret brugerflade eller alt app inden for 2024.<\/p>\n
Ma nyeste spillesider er derfor ganske vist herredsh\u00f8vdin oven i k\u00f8bet at indlemme alle ma medrivende nyfortolkninger af sted curlingfor\u00e6ldre bordspil. Herhen kan virk have bordspils-varianter med mere hastighed, endel farverioperat\u00f8 og tilgift funktioner. En bor de store sprede som at musikus hos damp er muligheden fordi nyde fuld spilleban bonus eksklusiv giroindbetalin. Det betyder, at virk kan starte dit spil eksklusiv forudg\u00e5ende depositu, alligevel endnu dele chancen da sno rigtige penge.<\/p>\n
<\/p>\n