new RouteException( 'woocommerce_rest_checkout_process_payment_error', esc_html( $e->getMessage() ), 400, array_map( 'esc_attr', $additional_data ) );
}
}
/**
* Gets the chosen payment method ID from the request.
*
* @throws RouteException On error.
* @param \WP_REST_Request $request Request object.
* @return string
*/
private function get_request_payment_method_id( \WP_REST_Request $request ) {
$payment_method = $this->get_request_payment_method( $request );
return is_null( $payment_method ) ? '' : $payment_method->id;
}
/**
* Gets and formats payment request data.
*
* @param \WP_REST_Request $request Request object.
* @return array
*/
private function get_request_payment_data( \WP_REST_Request $request ) {
static $payment_data = [];
if ( ! empty( $payment_data ) ) {
return $payment_data;
}
if ( ! empty( $request['payment_data'] ) ) {
foreach ( $request['payment_data'] as $data ) {
$payment_data[ sanitize_key( $data['key'] ) ] = wc_clean( $data['value'] );
}
}
return $payment_data;
}
/**
* Update the current order using the posted values from the request.
*
* @param \WP_REST_Request $request Full details about the request.
*/
private function update_order_from_request( \WP_REST_Request $request ) {
$this->order->set_customer_note( wc_sanitize_textarea( $request['customer_note'] ) ?? '' );
$payment_method = $this->get_request_payment_method( $request );
if ( null !== $payment_method ) {
WC()->session->set( 'chosen_payment_method', $payment_method->id );
$this->order->set_payment_method( $payment_method->id );
$this->order->set_payment_method_title( $payment_method->title );
}
$this->persist_additional_fields_for_order( $request );
wc_do_deprecated_action(
'__experimental_woocommerce_blocks_checkout_update_order_from_request',
array(
$this->order,
$request,
),
'6.3.0',
'woocommerce_store_api_checkout_update_order_from_request',
'This action was deprecated in WooCommerce Blocks version 6.3.0. Please use woocommerce_store_api_checkout_update_order_from_request instead.'
);
wc_do_deprecated_action(
'woocommerce_blocks_checkout_update_order_from_request',
array(
$this->order,
$request,
),
'7.2.0',
'woocommerce_store_api_checkout_update_order_from_request',
'This action was deprecated in WooCommerce Blocks version 7.2.0. Please use woocommerce_store_api_checkout_update_order_from_request instead.'
);
/**
* Fires when the Checkout Block/Store API updates an order's from the API request data.
*
* This hook gives extensions the chance to update orders based on the data in the request. This can be used in
* conjunction with the ExtendSchema class to post custom data and then process it.
*
* @since 7.2.0
*
* @param \WC_Order $order Order object.
* @param \WP_REST_Request $request Full details about the request.
*/
do_action( 'woocommerce_store_api_checkout_update_order_from_request', $this->order, $request );
$this->order->save();
}
/**
* Gets the chosen payment method title from the request.
*
* @throws RouteException On error.
* @param \WP_REST_Request $request Request object.
* @return string
*/
private function get_request_payment_method_title( \WP_REST_Request $request ) {
$payment_method = $this->get_request_payment_method( $request );
return is_null( $payment_method ) ? '' : $payment_method->get_title();
}
/**
* Persist additional fields for the order after validating them.
*
* @param \WP_REST_Request $request Full details about the request.
*/
private function persist_additional_fields_for_order( \WP_REST_Request $request ) {
if ( Features::is_enabled( 'experimental-blocks' ) ) {
$document_object = $this->get_document_object_from_rest_request( $request );
$document_object->set_context( 'order' );
$additional_fields_order = $this->additional_fields_controller->get_contextual_fields_for_location( 'order', $document_object );
$additional_fields_contact = $this->additional_fields_controller->get_contextual_fields_for_location( 'contact', $document_object );
$additional_fields = array_merge( $additional_fields_order, $additional_fields_contact );
} else {
$additional_fields_order = $this->additional_fields_controller->get_fields_for_location( 'order' );
$additional_fields_contact = $this->additional_fields_controller->get_fields_for_location( 'contact' );
$additional_fields = array_merge( $additional_fields_order, $additional_fields_contact );
}
$field_values = (array) $request['additional_fields'] ?? [];
foreach ( $additional_fields as $key => $field ) {
if ( isset( $field_values[ $key ] ) ) {
$this->additional_fields_controller->persist_field_for_order( $key, $field_values[ $key ], $this->order, 'other', false );
}
}
// We need to sync the customer additional fields with the order otherwise they will be overwritten on next page load.
if ( 0 !== $this->order->get_customer_id() && get_current_user_id() === $this->order->get_customer_id() ) {
$customer = new WC_Customer( $this->order->get_customer_id() );
$this->additional_fields_controller->sync_customer_additional_fields_with_order(
$this->order,
$customer
);
$customer->save();
}
}
/**
* Returns a document object from a REST request.
*
* @param \WP_REST_Request $request The REST request.
* @return DocumentObject The document object or null if experimental blocks are not enabled.
*/
public function get_document_object_from_rest_request( \WP_REST_Request $request ) {
return new DocumentObject(
[
'customer' => [
'billing_address' => $request['billing_address'],
'shipping_address' => $request['shipping_address'],
'additional_fields' => array_intersect_key(
$request['additional_fields'] ?? [],
array_flip( $this->additional_fields_controller->get_contact_fields_keys() )
),
],
'checkout' => [
'payment_method' => $request['payment_method'],
'create_account' => $request['create_account'],
'customer_note' => $request['customer_note'],
'additional_fields' => array_intersect_key(
$request['additional_fields'] ?? [],
array_flip( $this->additional_fields_controller->get_order_fields_keys() )
),
],
]
);
}
}
Fatal error: Trait 'Automattic\WooCommerce\StoreApi\Utilities\CheckoutTrait' not found in /home/htzanetatos/public_html/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Checkout.php on line 17