WC_REST_Paypal_Buttons_Controller::create_orderpublicWC 1.0

Create a PayPal order.

Метод класса: WC_REST_Paypal_Buttons_Controller{}

Хуков нет.

Возвращает

WP_REST_Response. The response object.

Использование

$WC_REST_Paypal_Buttons_Controller = new WC_REST_Paypal_Buttons_Controller();
$WC_REST_Paypal_Buttons_Controller->create_order( $request );
$request(WP_REST_Request) (обязательный)
The request object.

Код WC_REST_Paypal_Buttons_Controller::create_order() WC 10.3.4

public function create_order( WP_REST_Request $request ) {
	$data = $request->get_json_params();

	if ( empty( $data['order_id'] ) || empty( $data['order_key'] ) ) {
		return new WP_REST_Response( array( 'error' => 'Invalid request' ), 400 );
	}

	$payment_source = isset( $data['payment_source'] ) ? sanitize_text_field( $data['payment_source'] ) : '';
	if ( empty( $payment_source ) || ! in_array( $payment_source, WC_Gateway_Paypal_Constants::SUPPORTED_PAYMENT_SOURCES, true ) ) {
		return new WP_REST_Response( array( 'error' => 'Missing/Invalid payment source: ' . esc_html( $payment_source ) ), 400 );
	}

	$order_id = $data['order_id'];
	$order    = wc_get_order( $order_id );

	if ( ! $order ) {
		return new WP_REST_Response( array( 'error' => 'Order not found' ), 404 );
	}

	$order_key = $data['order_key'];
	if ( ! $order_key || ! hash_equals( $order->get_order_key(), $order_key ) ) {
		return new WP_REST_Response( array( 'error' => 'Order not found' ), 404 );
	}

	if ( ! in_array( $order->get_status(), array( OrderStatus::CHECKOUT_DRAFT, OrderStatus::PENDING ), true ) ) {
		return new WP_REST_Response( array( 'error' => 'Invalid order status' ), 409 );
	}

	$gateway = WC_Gateway_Paypal::get_instance();

	// For Buttons requests, we need to explicitly set the payment method to PayPal.
	$order->set_payment_method( $gateway->id );
	$order->save();

	$paypal_request = new WC_Gateway_Paypal_Request( $gateway );
	$paypal_order   = $paypal_request->create_paypal_order(
		$order,
		$payment_source,
		array(
			'is_js_sdk_flow'            => true,
			'app_switch_request_origin' => $data['app_switch_request_origin'] ?? '',
		)
	);

	if ( ! $paypal_order || empty( $paypal_order['id'] ) ) {
		return new WP_REST_Response( array( 'error' => 'Failed to create PayPal order' ), 400 );
	}

	$order->update_meta_data( '_paypal_order_id', $paypal_order['id'] );
	$order->update_status( OrderStatus::PENDING );
	$order->save();

	return new WP_REST_Response(
		array(
			'paypal_order_id' => $paypal_order['id'] ?? null,
			'order_id'        => $order_id,
			'return_url'      => esc_url_raw( add_query_arg( 'utm_nooverride', '1', $gateway->get_return_url( $order ) ) ),
		),
		200
	);
}