WC_REST_Paypal_Buttons_Controller::create_order
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 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
);
}