Order_Endpoint::handle_create_order( WP_REST_Request $request )
Handles the request that creates an order with Tickets Commerce and the PayPal gateway.
Contents
Parameters
- $request
-
(WP_REST_Request) (Required) The request object.
Return
(WP_Error|WP_REST_Response) An array containing the data on success or a WP_Error instance on failure.
Source
File: src/Tickets/Commerce/Gateways/PayPal/REST/Order_Endpoint.php
public function handle_create_order( WP_REST_Request $request ) {
$response = [
'success' => false,
];
$messages = $this->get_error_messages();
$data = $request->get_json_params();
$purchaser = tribe( Order::class )->get_purchaser_data( $data );
if ( is_wp_error( $purchaser ) ) {
return $purchaser;
}
$order = tribe( Order::class )->create_from_cart( tribe( Gateway::class ), $purchaser );
$unit = [
'reference_id' => $order->ID,
'value' => (string) $order->total_value->get_decimal(),
'currency' => $order->currency,
'first_name' => $order->purchaser['first_name'],
'last_name' => $order->purchaser['last_name'],
'email' => $order->purchaser['email'],
];
foreach ( $order->items as $item ) {
$ticket = \Tribe__Tickets__Tickets::load_ticket_object( $item['ticket_id'] );
$unit['items'][] = [
'name' => $ticket->name,
'unit_amount' => [ 'value' => (string) $item['price'], 'currency_code' => $order->currency ],
'quantity' => $item['quantity'],
'item_total' => [ 'value' => (string) $item['sub_total'], 'currency_code' => $order->currency ],
'sku' => $ticket->sku,
];
}
$paypal_order = tribe( Client::class )->create_order( $unit );
if ( empty( $paypal_order['id'] ) || empty( $paypal_order['create_time'] ) ) {
return new WP_Error( 'tec-tc-gateway-paypal-failed-creating-order', $messages['failed-creating-order'], $order );
}
$debug_header = tribe( Client::class )->get_debug_header();
if ( ! empty( $debug_header ) ) {
$paypal_order['debug_id'] = $debug_header;
}
$updated = tribe( Order::class )->modify_status( $order->ID, Pending::SLUG, [
'gateway_payload' => $paypal_order,
'gateway_order_id' => $paypal_order['id'],
] );
if ( is_wp_error( $updated ) ) {
return $updated;
}
// Respond with the ID for Paypal Usage.
$response['success'] = true;
$response['id'] = $paypal_order['id'];
return new WP_REST_Response( $response );
}
Changelog
| Version | Description |
|---|---|
| 5.6.4 | Include Event/Post title in the Ticket name. |
| 5.1.9 | Introduced. |