Как аутентифицировать REST API Woocommerce в php-коде? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь передать заказы клиентов, если они относятся к определенной категории, использующей REST API, из одного магазина woocommerce в другой.

Я думаю, что есть проблема с моей аутентификацией.Я новичок в php, поэтому я не уверен, как пройти аутентификацию в другом магазине woocommerce с ключом и секретом потребителя, когда я пишу код в файле functions.php.

Какой правильный форматавторизоваться при написании кода в файле functions.php?И да, я посмотрел официальную документацию WOO REST API, но все еще не уверен.

add_action( 'woocommerce_payment_complete', 'my_api_call');
function my_api_call( $order_id ){ 

// Order Setup Via WooCommerce

$order = new WC_Order( $order_id );

// Iterate Through Items

$items = $order->get_items(); 
foreach ( $items as $item ) {   

    // Store Product ID

$product_id = $item['product_id'];
    $product = new WC_Product($item['product_id']);

    // Check for "categoryx" Category and Run

    if ( has_term( 'categoryx', 'product_cat', $product_id ) ) {

        $name       = $order->billing_first_name;
        $surname    = $order->billing_last_name;
        $email      = $order->billing_email;
        $projectsku     = $product->get_sku(); 
        $apikey     ="astringoflettersandnumbers";

        // API Callout to URL

        $url = 'https://mystagingsite/wp-json/wc/v3/orders/';

        $body = array(
            "Project"   => $projectsku,
            "Name"      => $name,
            "Surname"   => $surname,
            "Email"     => $email,
            "KEY"       => $apikey
        );

        $response = wp_remote_post( $url, 
            array(
                'headers'   => array('Content-Type' => 'application/json; charset=utf-8'),
                'method'    => 'POST',
                'timeout' => 75,                    
                'body'      => json_encode($body),
            )
        );

        $vars = json_decode($response['body'],true);

    }

}

}

Ожидается: заказ клиента передается в магазин Результат: заказ клиента не передается в магазин

1 Ответ

0 голосов
/ 31 января 2019

Это должно иметь то, что вы ищете: https://woocommerce.github.io/woocommerce-rest-api-docs/#authentication-over-https. Идея здесь Аутентификация с базовым доступом HTTP :

запрос содержит поле заголовкаформа Authorization: Basic <credentials>, где credentials - это кодировка base64 идентификатора и пароля, соединенных двоеточием.

Это означает, что вам нужно добавить дополнительный заголовок в массив headers:

'Authorization' => 'Basic '. base64_encode("user:password")

У меня мало опыта работы с PHP, поэтому синтаксис может быть неправильным, но это суть.Согласно документации Woocommerce, пользователь = ключ потребителя и пароль = секрет потребителя, поэтому убедитесь, что строка "user:password" включает эти фактические значения.

И если это по какой-то причине не работает, кажется, что Woocommerce позволяетпередать параметры через строки URL-запроса, но это менее безопасно, поэтому не используйте его, если вы не уверены, что другой метод не работает.

https://www.example.com/wp-json/wc/v3/orders?consumer_key=123&consumer_secret=abc

...