• ДОБРО ПОЖАЛОВАТЬ В КЛУБ ПО WORDPRESS

    Мы активно растущий клуб по WordPress и нам нужна помощь каждого человека, в том числе и Ваша! Не стесняйтесь и станьте частью большого сообщества.
    Мы делимся новостями, отытом и полезными советами! Пройдите простую регистрацию, чтобы пользоваться всеми возможностями нашего клуба.

    Присоединяйтесь к нам, вам обязательно понравится - Присоединится

Вопрос woocommerce - отправка idorder после оформления

rznzap1

НОВИЧОК

rznzap1

НОВИЧОК
Сообщения
4
Мне нужно отправить idorder после оформление заказа на внешний сервер

Пробую делать следующим образом:
add_action( 'woocommerce_create_order', 'so_woocommerce_create_order' );
function so_woocommerce_create_order( $order_id ){
$order = wc_get_order( $order_id );
$url = 'site.ru/savehook.php';

wp_remote_post( $url, array(
'method' => 'POST',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(),
'body' => array('order'=>$order),
'cookies' => array()
)
);

}

Но данные мне не возвращаются.
Правильно ли я выбрал action? пробовал и название хука на добавление заказа, и с использованием экшенов из апи, но возможно, ошибаюсь.
с wp_remote_post вроде правильно указал?
буду рад любой помощи!
 

Wildcdu

ЭКСПЕРТ

Wildcdu

ЭКСПЕРТ
Сообщения
1,120
Мне нужно отправить idorder после оформление заказа на внешний сервер

Пробую делать следующим образом:
add_action( 'woocommerce_create_order', 'so_woocommerce_create_order' );
function so_woocommerce_create_order( $order_id ){
$order = wc_get_order( $order_id );
$url = 'site.ru/savehook.php';

wp_remote_post( $url, array(
'method' => 'POST',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(),
'body' => array('order'=>$order),
'cookies' => array()
)
);

}

Но данные мне не возвращаются.
Правильно ли я выбрал action? пробовал и название хука на добавление заказа, и с использованием экшенов из апи, но возможно, ошибаюсь.
с wp_remote_post вроде правильно указал?
буду рад любой помощи!
Пожалуйста используйте инструмент для вставки кода. Ну а по Вашей проблеме. Вот такой пример:
PHP:
$url = 'http://site.ru/profile';
$args = array(
    'method' => 'POST',
    'timeout' => 45,
    'redirection' => 5,
    'httpversion' => '1.0',
    'blocking' => true,
    'headers' => array(),
    'body' => array( 'username' => 'bob', 'password' => '1234xyz' ),
    'cookies' => array()
);
$response = wp_remote_post( $url, $args );

// проверка ошибки
if ( is_wp_error( $response ) ) {
   $error_message = $response->get_error_message();
   echo "Что-то пошло не так: $error_message";
} else {
   echo 'Ответ: <pre>';
   print_r( $response );
   echo '</pre>';
}
Вам нужно только заполнить массив правильно
Если не ошибаюсь тут выдается нужный параметр
PHP:
            $order_data = array(
                'status'        => apply_filters( 'woocommerce_default_order_status', 'pending' ),
                'customer_id'   => $this->customer_id,
                'customer_note' => isset( $this->posted['order_comments'] ) ? $this->posted['order_comments'] : '',
                'cart_hash'     => md5( json_encode( wc_clean( WC()->cart->get_cart_for_session() ) ) . WC()->cart->total ),
                'created_via'   => 'checkout',
            );

            // Insert or update the post data
            $order_id = absint( WC()->session->order_awaiting_payment );
Функция выдачи ID так если не ошибаюсь
PHP:
function wc_get_order( $the_order = false ) {
    if ( ! did_action( 'woocommerce_init' ) ) {
        _doing_it_wrong( __FUNCTION__, __( 'wc_get_order should not be called before the woocommerce_init action.', 'woocommerce' ), '2.5' );
        return false;
    }
    return WC()->order_factory->get_order( $the_order );
}
 
Последнее редактирование:

Wildcdu

ЭКСПЕРТ

Wildcdu

ЭКСПЕРТ
Сообщения
1,120
action правильно выбрал?
а код который вы привели - его в функцию вставляю?
Так с ходу я Вам не подскажу, я сделал выборку по Вашей проблеме, как сформировать код для вставки надо смотреть, быстро дать Вам код с ответом не получится. Попробуйте поанализируйте
 

Wildcdu

ЭКСПЕРТ

Wildcdu

ЭКСПЕРТ
Сообщения
1,120
Мне нужно отправить idorder после оформление заказа на внешний сервер

Пробую делать следующим образом:
add_action( 'woocommerce_create_order', 'so_woocommerce_create_order' );
function so_woocommerce_create_order( $order_id ){
$order = wc_get_order( $order_id );
$url = 'site.ru/savehook.php';

wp_remote_post( $url, array(
'method' => 'POST',
'timeout' => 45,
'redirection' => 5,
'httpversion' => '1.0',
'blocking' => true,
'headers' => array(),
'body' => array('order'=>$order),
'cookies' => array()
)
);

}

Но данные мне не возвращаются.
Правильно ли я выбрал action? пробовал и название хука на добавление заказа, и с использованием экшенов из апи, но возможно, ошибаюсь.
с wp_remote_post вроде правильно указал?
буду рад любой помощи!
wc_get_order( $the_order) вот этот момент в Вашем варианте на мой взгляд нужно поправить
 

Wildcdu

ЭКСПЕРТ

Wildcdu

ЭКСПЕРТ
Сообщения
1,120
Извиняюсь не правильно
вот так правильно
PHP:
$url = 'http://site.ru/profile';
$args = array(
    'method' => 'POST',
    'timeout' => 45,
    'redirection' => 5,
    'httpversion' => '1.0',
    'blocking' => true,
    'headers' => array(),
    'body' => array( 'username' => 'bob', 'password' => '1234xyz' ),
    'cookies' => array()
);
$response = wc_get_order( $the_order ); // либо это нужно проверить get_order( $the_order )

// проверка ошибки
if ( is_wp_error( $response ) ) {
   $error_message = $response->get_error_message();
   echo "Что-то пошло не так: $error_message";
} else {
   echo 'Ответ: <pre>';
   print_r( $response );
   echo '</pre>';
}
 
Сверху