如何使用php代码对Woocommerce的REST API进行身份验证?

时间:2019-01-30 13:13:33

标签: php rest woocommerce woocommerce-rest-api

如果客户订单来自特定类别,我正在尝试使用REST API将它们从一个woocommerce商店传递到另一个商店。

我认为我的身份验证存在问题。我是php的新手,所以在我在functions.php文件中编写代码时,我不确定如何使用使用者密钥和秘密向另一个woocommerce商店进行身份验证。

在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 :(得分:0)

应该具有您要查找的内容:https://woocommerce.github.io/woocommerce-rest-api-docs/#authentication-over-https。这里的想法是HTTP basic access authentication

  

请求包含格式为Authorization: Basic <credentials>的标头字段,其中credentials是由冒号连接的id和密码的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