/** * 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); } Hostamy - strumenti per strutture a tema affitti brevi
Have a question?
Message sent Close

 ARE YOU A NEW HOST OR HAVE YOU ALREADY ENTERED THIS WORLD?

Qui di seguito tutti gli strumenti utili per gestire una casa vacanza o locazione turistica:

  • Rental contract for tourist use (to be signed by your guests before arrival, but you could also send it first via email or WhatsApp if you download it as a pdf) – HERE THE AGREEMENT
  • Proforma invoce / Receipt (always fill in two copies, one to keep for the tax declaration) – HERE THE DOCUMENTS
  • House rules to show to the guesta when they arrive or send before their arrival – HERE THE HOUSE RULES
  • Guest book/Welcome book, where you write all the useful information for your guest's stay. HERE THE GUEST BOOK

Take a look at our Shop for Hosts, you'll find everything you need!

If you are new and still have doubts about:

  • What to choose between B&B or holiday home
  • What to do if the tourist refuses to pay the tourist tax
  • What is the tourist tax
  • Doubts on AlloggiatiWeb

Visit our blog, you will find all the answers to your doubts Here is the link to the blog

Our services

WEBSITE FOR YOUR COMPANY

from €109

The site suited to your needs. We have many solutions from "do it yourself" with video instruction to the complete site with photo, structure and booking page

Your choice!

 

SEE PRICES

CREATE A LISTING

FROM €150

We create your listings for you on the various OTA websites, we also include in the price the presence of the listing in the Google maps.

The price varies by the number of listings / apartments / sites

 

CONTACT US

CREATION of SOCIAL PAGES (FACEBOOK, INSTAGRAM, GOOGLE MY BUSINESS ETC.)

FROM €100.00

We manage for you your social channels such as Facebook, Instagram, Google maps and your ads on OTAs.

The price varies by the number of ads / sites

 

CONTACT US

FIRST CONSULTATION

FREE 30 MIN

We offer the first consultation!

We will analyze what you need to improve your offer or start becoming a successful host

 

CONTACT US

MANAGEMENT OF SOCIAL PAGES AND LISTING ON OTA SUCH AS AIRBNB, BOOKING.COM ETC

FROM €100.00

We manage for you your social channels such as Facebook, Instagram, Google maps and your ads on OTAs.

The price varies by the number of listings / apartments / sites

 

CONTACT US

OPTIMIZATION OF EXISTENT LISTINGS

FROM €100.00

We optimize your ads in existing OTA portals.

The price varies by the number of listings / apartments / sites

 

CONTACT US

USEFUL DOCUMENTS FOR HOSTS

FROM €4

The price varies from the various products.
The host tools are: Short term rental contract, house rules, welcome book, worksheet to find the ideal price, Net profit spreadsheet, various home checklists and much more.

Included with each product is a video tutorial to best use your tools.

 

LINK TO THE DOCUMENTS

Our courses

DESCRIZIONE DEL CORSO: In questo corso ci concentreremo sul come far vivere al tuo ospite un’esperienza memorabile, e pertanto far si che tu possa ...
10 Lectures
DESCRIZIONE DEL CORSO: Questo corso è stato idealizzato con l’obiettivo di dare ai proprietari di casa vacanza, locazione turistica o gestore di Be...
Questo corso è pensato per tutti i proprietari di casa, e/o per chi ha una struttura sfitta che potrebbe essere adibita a struttura turistica extra...
28 Lectures
Con 1,5 miliardi di utenti attivi al mese e 60 miliardi di messaggi scambiati al giorno, WhatsApp è senza dubbio diventato lo strumento di comunica...

FOLLOW US SOCIAL

BE PART OF THE HOSTAMY'S SUCCESSFUL HOST GROUP AND START RENTING!

en_GBEnglish
Select your currency
EUR eur