mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-08-30 05:00:51 +08:00
Merge pull request #3588 from woocommerce/PCP-2908-create-snippet-to-automatically-add-tracking-details-for-sendle-shipping-plugin
Some checks failed
CI / PHP 7.4 (push) Has been cancelled
CI / PHP 8.0 (push) Has been cancelled
CI / PHP 8.1 (push) Has been cancelled
CI / PHP 8.2 (push) Has been cancelled
CI / PHP 8.3 (push) Has been cancelled
CI / PHP 8.4 (push) Has been cancelled
PR Playground Demo / prepare_version (push) Has been cancelled
PR Playground Demo / build_plugin (push) Has been cancelled
PR Playground Demo / create_archive (push) Has been cancelled
PR Playground Demo / Comment on PR with Playground details (push) Has been cancelled
Some checks failed
CI / PHP 7.4 (push) Has been cancelled
CI / PHP 8.0 (push) Has been cancelled
CI / PHP 8.1 (push) Has been cancelled
CI / PHP 8.2 (push) Has been cancelled
CI / PHP 8.3 (push) Has been cancelled
CI / PHP 8.4 (push) Has been cancelled
PR Playground Demo / prepare_version (push) Has been cancelled
PR Playground Demo / build_plugin (push) Has been cancelled
PR Playground Demo / create_archive (push) Has been cancelled
PR Playground Demo / Comment on PR with Playground details (push) Has been cancelled
Create an API function for adding tracking info. (2908)
This commit is contained in:
commit
3467d39eca
2 changed files with 54 additions and 2 deletions
|
@ -17,6 +17,8 @@ use RuntimeException;
|
||||||
use WC_Order;
|
use WC_Order;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint;
|
use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint;
|
||||||
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
|
use WooCommerce\PayPalCommerce\ApiClient\Entity\Order;
|
||||||
|
use WooCommerce\PayPalCommerce\OrderTracking\Endpoint\OrderTrackingEndpoint;
|
||||||
|
use WooCommerce\PayPalCommerce\OrderTracking\Shipment\ShipmentFactoryInterface;
|
||||||
use WooCommerce\PayPalCommerce\PPCP;
|
use WooCommerce\PayPalCommerce\PPCP;
|
||||||
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
|
use WooCommerce\PayPalCommerce\WcGateway\Gateway\PayPalGateway;
|
||||||
use WooCommerce\PayPalCommerce\WcGateway\Helper\RefundFeesUpdater;
|
use WooCommerce\PayPalCommerce\WcGateway\Helper\RefundFeesUpdater;
|
||||||
|
@ -159,3 +161,53 @@ function ppcp_update_order_refund_fees( WC_Order $wc_order ): void {
|
||||||
assert( $updater instanceof RefundFeesUpdater );
|
assert( $updater instanceof RefundFeesUpdater );
|
||||||
$updater->update( $wc_order );
|
$updater->update( $wc_order );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates or updates PayPal order tracking information for a WooCommerce order.
|
||||||
|
*
|
||||||
|
* Retrieves the PayPal capture ID associated with the given WooCommerce order,
|
||||||
|
* creates a shipment instance, and sends it to the PayPal Order Tracking API.
|
||||||
|
* If tracking information for the given tracking number already exists, it will
|
||||||
|
* be updated; otherwise, it will be added as new tracking information.
|
||||||
|
*
|
||||||
|
* @param WC_Order $wc_order WooCommerce order instance to attach tracking to.
|
||||||
|
* @param string $tracking_number Tracking number provided by the carrier.
|
||||||
|
* @param string $carrier Name of the shipping carrier (must be PayPal-approved).
|
||||||
|
* @param string $status Shipment status (must be PayPal-approved). Defaults to 'SHIPPED'.
|
||||||
|
*
|
||||||
|
* @see https://developer.paypal.com/docs/tracking/reference/carriers/ List of PayPal-approved carriers.
|
||||||
|
* @see https://developer.paypal.com/docs/tracking/reference/shipping-status/ List of PayPal-approved shipment statuses.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
function ppcp_create_order_tracking( WC_Order $wc_order, string $tracking_number, string $carrier, string $status = 'SHIPPED' ): void {
|
||||||
|
$shipment_factory = PPCP::container()->get( 'order-tracking.shipment.factory' );
|
||||||
|
assert( $shipment_factory instanceof ShipmentFactoryInterface );
|
||||||
|
|
||||||
|
$endpoint = PPCP::container()->get( 'order-tracking.endpoint.controller' );
|
||||||
|
assert( $endpoint instanceof OrderTrackingEndpoint );
|
||||||
|
|
||||||
|
$paypal_order = ppcp_get_paypal_order( $wc_order );
|
||||||
|
$capture_id = $endpoint->get_paypal_order_transaction_id( $paypal_order );
|
||||||
|
if ( is_null( $capture_id ) ) {
|
||||||
|
throw new RuntimeException( 'Could not retrieve transaction ID from PayPal order' );
|
||||||
|
}
|
||||||
|
|
||||||
|
$wc_order_id = $wc_order->get_id();
|
||||||
|
|
||||||
|
$ppcp_shipment = $shipment_factory->create_shipment(
|
||||||
|
$wc_order_id,
|
||||||
|
$capture_id,
|
||||||
|
$tracking_number,
|
||||||
|
$status,
|
||||||
|
'OTHER',
|
||||||
|
$carrier,
|
||||||
|
array()
|
||||||
|
);
|
||||||
|
|
||||||
|
$tracking_information = $endpoint->get_tracking_information( $wc_order_id, $tracking_number );
|
||||||
|
|
||||||
|
$tracking_information
|
||||||
|
? $endpoint->update_tracking_information( $ppcp_shipment, $wc_order_id )
|
||||||
|
: $endpoint->add_tracking_information( $ppcp_shipment, $wc_order_id );
|
||||||
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ use function WooCommerce\PayPalCommerce\Api\ppcp_get_paypal_order;
|
||||||
* status: SupportedStatuses,
|
* status: SupportedStatuses,
|
||||||
* tracking_number: string,
|
* tracking_number: string,
|
||||||
* carrier: string,
|
* carrier: string,
|
||||||
* items?: list<int>,
|
* items?: array,
|
||||||
* carrier_name_other?: string,
|
* carrier_name_other?: string,
|
||||||
* }
|
* }
|
||||||
* Class OrderTrackingEndpoint
|
* Class OrderTrackingEndpoint
|
||||||
|
@ -393,7 +393,7 @@ class OrderTrackingEndpoint {
|
||||||
'carrier_name_other' => $data['carrier_name_other'] ?? '',
|
'carrier_name_other' => $data['carrier_name_other'] ?? '',
|
||||||
);
|
);
|
||||||
|
|
||||||
if ( ! empty( $data['items'] ) ) {
|
if ( ! empty( $data['items'] ) && is_numeric( reset( $data['items'] ) ) ) {
|
||||||
$tracking_info['items'] = array_map( 'intval', $data['items'] );
|
$tracking_info['items'] = array_map( 'intval', $data['items'] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue