Order_Endpoint::handle_recheck_order( string $order_id, WP_Post $order )
Gets the Order object again, in another request, to check for purchases possibly denied after creation.
Contents
Parameters
- $order_id
-
(string) (Required) The PayPal order ID.
- $order
-
(WP_Post) (Required) The TC Order object.
Return
(bool|WP_Error|WP_REST_Response)
Source
File: src/Tickets/Commerce/Gateways/PayPal/REST/Order_Endpoint.php
public function handle_recheck_order( $order_id, $order ) { $paypal_order_response = tribe( Client::class )->get_order( $order_id ); $paypal_order_status = Arr::get( $paypal_order_response, [ 'status' ] ); $paypal_order_purchase_units = Arr::get( $paypal_order_response, [ 'purchase_units' ], [] ); $paypal_order_captures = []; $messages = $this->get_error_messages(); foreach( $paypal_order_purchase_units as $unit ) { if ( ! empty( $unit['payments']['captures'] ) ) { $paypal_order_captures[] = $unit['payments']['captures']; } } if ( Status::CREATED === $paypal_order_status && ! empty( $paypal_order_captures ) ) { $paypal_order_captures = array_shift( $paypal_order_captures ); if ( count( $paypal_order_captures ) > 1 ) { // Sort the captures array by the update timestamp usort( $paypal_order_captures, function( $a, $b ) { return strtotime( $a['update_time'] ) <=> strtotime( $b['update_time'] ); } ); } foreach( $paypal_order_captures as $capture ) { $paypal_order_status = $capture['status']; $final = $capture['final_capture'] ?? false; if ( $final ) { break; } } } $status = tribe( Status::class )->convert_to_commerce_status( $paypal_order_status ); if ( ! $status ) { return new WP_Error( 'tec-tc-gateway-paypal-invalid-capture-status', $messages['invalid-capture-status'], $paypal_order_response ); } $updated = tribe( Order::class )->modify_status( $order->ID, $status->get_slug(), [ 'gateway_payload' => $paypal_order_response, ] ); if ( is_wp_error( $updated ) ) { return $updated; } if ( in_array( $paypal_order_status, [ Status::FAILED, Status::DECLINED ], true ) ) { return new WP_Error( 'tec-tc-gateway-paypal-capture-declined', $messages['capture-declined'], $paypal_order_response ); } $response['success'] = true; $response['status'] = $status->get_slug(); $response['order_id'] = $order->ID; // When we have success we clear the cart. tribe( Cart::class )->clear_cart(); $response['redirect_url'] = add_query_arg( [ 'tc-order-id' => $order_id ], tribe( Success::class )->get_url() ); return new WP_REST_Response( $response ); }
Changelog
Version | Description |
---|---|
5.4.0.2 | Introduced. |