学习 WooCommerce REST API

主要学习这个技术文档即可
WooCommerce REST API 技术文档

WooCommerce 官方文档

github : woocommerce/woocommerce

以下设置以及测试代码,都来自 WooCommerce REST API 技术文档

设置 REST API

  1. 设置 – 固定链接 (Settings > Permalinks.)
  2. WooCommerce – 设置 – 高级 – REST API --添加Key(WooCommerce > Settings > Advanced > REST API – Generate API keys)
  3. WooCommerce – 设置 – 高级 --旧版 API – 启用旧版 REST API ( Enable legacy REST API ) 我这里直接安装的新版,这一步就不需要了

手动测试

WooCommerce 试试使用了基本身份认证 (Basic),直接使用 VSCode 的 REST Client 插件来测试

验证的时候 consumerKey 相当于 user ,consumerSecret相当于password

$ cat testWoo.http

## 网站20230628
## WooCommerce 试试使用了基本身份认证 (Basic)
## V1,V2,V3 没有发现什么差别

### 获取订单
GET https://wp85.dhbm.cn/wp-json/wc/v2/orders
Authorization: Basic ck_cf61c5516792ddb93aefb45999d3ffd369dc1d58:cs_a9ac5c1ca3d96fad52d36858faf1ffa987435407

### 获取产品 V1
GET https://wp85.dhbm.cn/wp-json/wc/v1/products
Authorization: Basic ck_cf61c5516792ddb93aefb45999d3ffd369dc1d58:cs_a9ac5c1ca3d96fad52d36858faf1ffa987435407

### 获取产品 V2
GET https://wp85.dhbm.cn/wp-json/wc/v2/products
Authorization: Basic ck_cf61c5516792ddb93aefb45999d3ffd369dc1d58:cs_a9ac5c1ca3d96fad52d36858faf1ffa987435407

### 获取产品 V3
GET https://wp85.dhbm.cn/wp-json/wc/v3/products
Authorization: Basic ck_cf61c5516792ddb93aefb45999d3ffd369dc1d58:cs_a9ac5c1ca3d96fad52d36858faf1ffa987435407

### 获取产品 使用 POST 也可以
POST https://wp85.dhbm.cn/wp-json/wc/v3/products
Authorization: Basic ck_cf61c5516792ddb93aefb45999d3ffd369dc1d58:cs_a9ac5c1ca3d96fad52d36858faf1ffa987435407

Nodejs 测试

WooCommerce API - Node.js Client

  1. $ npm install --save woocommerce-api
    不行的话 $ sudo cnpm install --save woocommerce-api

  2. $ cat api_test.js

    请使用自己的 url , 换成自己的 key 和 secret

    var WooCommerceAPI = require('woocommerce-api');
     
    var WooCommerce = new WooCommerceAPI({
      url: 'https://wp85.XXXX.cn',
      consumerKey: 'ck_cf61c5516792ddb93aefb45999d3ffd369dcXXXX',
      consumerSecret: 'cs_a9ac5c1ca3d96fad52d36858faf1ffa98743XXXX',
      wpAPI: true,
      version: 'wc/v1' 
    });
    
    // 可选 products customers orders settings
    WooCommerce.getAsync('products').then(function(result) {
      // JSON.parse 后结果是一个数组,打印头一个试试
      // console.log(JSON.parse(result.toJSON().body));
      console.log(JSON.parse(result.toJSON().body)[0].categories);
      return JSON.parse(result.toJSON().body);
    });
    
  3. $ node api_test.js

     [ { id: 18, name: '电脑', slug: '%e7%94%b5%e8%84%91' } ]
    

PHP 测试

automattic/woocommerce

  1. composer require automattic/woocommerce

  2. $ cat api_test.php
    请使用自己的 url , 换成自己的 key 和 secret

     <?php
     require __DIR__ . '/vendor/autoload.php';
     
     use Automattic\WooCommerce\Client;
     
     $woocommerce = new Client(
       'https://wp85.XXXX.cn',
       'ck_cf61c5516792ddb93aefb45999d3ffd369dcXXXX',
       'cs_a9ac5c1ca3d96fad52d36858faf1ffa98743XXXX',
       [
         'version' => 'wc/v3'
       ]
     );
     
     use Automattic\WooCommerce\HttpClient\HttpClientException;
     
     try {
       // Array of response results.
       $results = $woocommerce->get('products');
       // Example: ['customers' => [[ 'id' => 8, 'created_at' => '2015-05-06T17:43:51Z', 'email' => ...
       // 返回的是一个数组,单独打印头一个 products 试试
       echo '<pre><code>' . print_r($results[0]->categories, true) . '</code><pre>'; // JSON output.
       
       echo '<pre><code>' . print_r($results, true) . '</code><pre>'; // JSON output.
     
       // Last request data.
       $lastRequest = $woocommerce->http->getRequest();
       echo '<pre><code>' . print_r($lastRequest->getUrl(), true) . '</code><pre>'; // Requested URL (string).
       echo '<pre><code>' .
         print_r($lastRequest->getMethod(), true) .
         '</code><pre>'; // Request method (string).
       echo '<pre><code>' .
         print_r($lastRequest->getParameters(), true) .
         '</code><pre>'; // Request parameters (array).
       echo '<pre><code>' .
         print_r($lastRequest->getHeaders(), true) .
         '</code><pre>'; // Request headers (array).
       echo '<pre><code>' . print_r($lastRequest->getBody(), true) . '</code><pre>'; // Request body (JSON).
     
       // Last response data.
       $lastResponse = $woocommerce->http->getResponse();
       echo '<pre><code>' . print_r($lastResponse->getCode(), true) . '</code><pre>'; // Response code (int).
       echo '<pre><code>' .
         print_r($lastResponse->getHeaders(), true) .
         '</code><pre>'; // Response headers (array).
       echo '<pre><code>' . print_r($lastResponse->getBody(), true) . '</code><pre>'; // Response body (JSON).
     } catch (HttpClientException $e) {
       echo '<pre><code>' . print_r($e->getMessage(), true) . '</code><pre>'; // Error message.
       echo '<pre><code>' . print_r($e->getRequest(), true) . '</code><pre>'; // Last request data.
       echo '<pre><code>' . print_r($e->getResponse(), true) . '</code><pre>'; // Last response data.
    
  3. $ php api_test.php

    Array
     (
         [0] => stdClass Object
             (
                 [id] => 18
                 [name] => 电脑
                 [slug] => %e7%94%b5%e8%84%91
             )
     
     )
     ...
    
  4. 或者放到网站目录
    http://127.0.0.1/wooCommerce/api_test.php

在这里插入图片描述

错误处理

问题
  1. php 错误: Error: Consumer Key 无效。 [woocommerce_rest_authentication_error]Automattic\WooCommerce\HttpClient\Request Object

  2. node 错误: body: ‘{“code”:“woocommerce_rest_authentication_error”,“message”:“Consumer Key \u65e0\u6548\u3002”,“data”:{“status”:401}}’,

  3. 其实这个问题就是 WooCommerce REST API 官方文档
    的问题 :
    “woocommerce_rest_cannot_view” or 401 error while making a request?

解决方式

之前学习的时候使用的 IP + 端口方式 ,没有 HTTPS
所以死活过不去!

只好重新配置网站,使用正确的 ssl 证书和 https 访问
因为只在虚拟机学习,本地 /etc/hosts 直接加上一条,居然也可以!

$ cat /etc/hosts

...
# wzh 20230621
192.168.0.105 wp85.XXXX.cn
...

再次测试,OK!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈虎123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值