编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

使用Woocommerce API 编写你的第一个脚本

wxchong 2024-09-10 22:39:32 开源技术 9 ℃ 0 评论

许多人都知道WooCommerce API,但却没有开始使用它。还有一些人刚刚了解它。还有一些人可能曾尝试使用它,但在某个地方卡住了,又回到了传统的做事方式。

事实是,WooCommerce API并不特别复杂,但是就像任何新技术或产品功能一样,需要一点时间来适应。学习这类东西的最佳方式是找到一个简单易懂的教程,逐步引导你完成一个过程,即使它不是最真实的例子。不要过于复杂,只需一个快速的概念验证脚本,看看你是否能够让它工作。这样的东西可以让你渲染一个页面,就像这样:

几分钟的搜索后,你可能已经意识到关于WooCommerce API有大量的好信息,比如WooCommerce API是什么;支持的端点列表;如何生成API密钥;以及如何在Postman或Insomnia等工具中测试API。

找不到 的是解释如何迈出下一步的文章:从API测试工具中的工作GET请求到一个功能性(即使是基本的)脚本,从你的WooCommerce安装中提取信息并将其显示在不是你的WordPress网站上 - 无论是一个独立的Web服务器还是一个移动应用程序或其他什么地方。

这篇文章将向你展示:使用WooCommerce API实现你的第一个“Hello Woo”步骤的逐步指南。

我今天构建的示例脚本故意简单和简约,因为我不希望细节在花哨的代码中丢失。我构建的示例:

  • 使用PHP构建(但应该很容易将其转换为Node、Python或其他语言)。
  • 从现有的WooCommerce网站中提取产品列表。
  • 在一个简单的HTML表格中显示图像、名称、描述和价格。

在开始编码之前

为了让这篇文章简短易读,我假设你已经完成了一些步骤。但是在本博客的前面和下面的项目符号中都有链接,可以告诉你如何完成这些任务。

  • 你有一个安装了WordPress和WooCommerce的工作环境。
  • 你至少有一两个产品在WooCommerce商店中发布。
  • 你已经创建了一个只读API密钥,并且你有消费者密钥和消费者密钥准备就绪。
  • 你已经成功从URL“http://YOUR_SERVER/wp-json/wc/v3/products”中获得了一个响应,使用Postman或Insomnia等工具。“YOUR_SERVER”显然是你实际的WordPress安装的URL。
  • 你有一个运行PHP代码的Web服务器。

一旦这些都就位了,我们就可以开始编码了!

对于困惑的Oauth

毫无疑问,当新开发者尝试使用WooCommerce API时,让他们遇到困难的是认证的工作。

这与WooCommerce无关,而与OAuth有关,它只是…奇怪。很难理解。令人沮丧地缺乏文档 - 尤其是对于新开发者来说。现在,我将解释一些关于OAuth与WooCommerce相关的内容,以帮助你克服这个障碍。

  • 简单的WooCommerce API操作使用OAuth 1.0版本。不是 基本认证,就像网上的一些信息可能会说的那样。OAuth 2.0与OAuth 1.0不兼容。因此,如果你的系统支持2.0,你可能需要添加一些库来使这个脚本工作。
  • 对于PHP来说,有一些不同的OAuth客户端。在这个例子中,我使用了(有点)原生的PHP oauth模块。我使用它是因为它简单,而不是因为它是最好的。对于一个真实的实现,你几乎肯定会想使用一些更新和更健壮的东西。
  • 无论你使用哪个客户端,你都需要确保你能生成以下元素:一个时间戳一个“nonce” - 一个随机数。一个OAuth签名

如果你对这些项目不是100%确定,没关系,因为你将在下面的示例中看到它们的位置。但我希望在我们深入代码之前你能理解这些必需的元素。

但是,尽管说了这么多…

让我们开始编码!

我将分阶段构建我们的脚本,这样你就可以理解它们在彼此之上的关键元素。

阶段一:认证、获取数据、退出。

<?php 
# 设置一些初始变量
$url = 'http://localhost:8888/wp-json/wc/v3/products';
$consumerKey = '1234567890';
$consumerSecret = '09876564321';
$nonce = mt_rand();
$timestamp = time();

# 设置OAuth
$oauth = new OAuth($consumerKey,$consumerSecret);
$oauth->setTimestamp($timestamp);
$oauth->setNonce($nonce);
$sig = $oauth->generateSignature('GET',$url);

# 创建CURL命令
$curl = curl_init();
curl_setopt_array($curl, array(
  CURLOPT_URL => $url.'?oauth_consumer_key='.$consumerKey.'&oauth_signature_method=HMAC-SHA1&oauth_timestamp='.$timestamp.'&oauth_nonce='.$nonce.'&oauth_version=1.0&oauth_signature='.$sig,
  CURLOPT_RETURNTRANSFER => true,
));

# 执行CURL命令并返回数据
$response = curl_exec($curl);
curl_close($curl);
echo $response;
?>

在这个阶段,大部分工作是OAuth连接。需要注意的几点是:

  • 我将URL、消费者密钥等拆分成单独的简单变量。
  • 你在上面看到的消费者密钥和消费者密钥是(显然)假的。请使用你真实的密钥。同样显而易见的是,你不应该将你的密钥硬编码到你的代码中。我在这里这样做只是为了清晰起见。
  • 有更优雅的方法来将所有这些变量组合到CURLOPT_URL中。再次强调,我以这种方式呈现它们是为了让代码易于理解,而不是因为这是最好的做法。

如果一切顺利,你可以从命令行运行这个脚本,得到的输出看起来像这样:

它不够美观,但你可以看到我们从WooCommerce网站中提取了数据,包括名称、描述、URL等一系列信息。这已经足够让我们进入下一步了。

阶段二:提取我们需要的数据。

<?php 
# 设置一些初始变量

### 代码在这里缺失 ###

# 执行CURL命令并返回数据
$curl_response = curl_exec($curl);
curl_close($curl);
$response_array = json_decode($curl_response,true);

foreach($response_array as $product) {
  $name = $product['name'];
  $permalink = $product['permalink'];
  $short_desc = $product['short_description'];
  $price = $product['price'];
  foreach($product['images'] as $image) {
    $image = $image['src'];
    break;
  }

echo $name.', '.$permalink.', '.$short_desc.', '.$price.', '.$image."\n";

}
?>

这个版本的关键之处在于,我们使用了foreach循环来遍历每个产品,并提取我们想要的数据元素:名称、描述和价格;以及图像链接和指向WooCommercce服务器本身的链接。

我想指出的一些细节是:

  • 从# 设置一些初始变量到# 执行CURL命令并返回数据的部分与前一个阶段相同,所以我没有包含它。每个脚本的完整版本都可以在本文末尾的下载中找到。
  • 我们的API调用的原始输出是字符串格式,所以我使用json_decode()将其转换为PHP可以处理的数组。
  • 一个产品可能有多个图像。我的代码获取第一个图像并退出。如果你的产品没有图像,代码很可能会出错。

和之前一样,你可以直接从命令行运行这个脚本,输出看起来像这样:

你可以看到我们更清晰地了解了我们提取的数据。唯一需要注意的是描述中的HTML格式仍然存在。

到了这一步,我们的脚本已经准备好进入它的第三个和最终形式。

阶段三:准备投入生产!

<?php 
# 设置一些初始变量

### 代码(仍然)在这里缺失 ###

# 执行CURL命令并返回数据
$curl_response = curl_exec($curl);
curl_close($curl);
$response_array = json_decode($curl_response,true);

$productlist = '<tr><td>Image</td><td>Name</td><td>Description</td><td>Price</td></tr>'."\n";
foreach($response_array as $product) {
  $name = $product['name'];
  $permalink = $product['permalink'];
  $short_desc = $product['short_description'];
  $price = $product['price'];
  foreach($product['images'] as $image) {
    $image = $image['src'];
    break;
  }
  $productlist = $productlist.'<tr><td><IMG SRC="'.$image.'" width="100"></td><td><A HREF="'.$permalink.'"">'.$name.'</a></td><td>'.$short_desc.'</td><td>'.$price.'</td></tr>'."\n";  
}
?>

<!DOCTYPE html>
<html>
  <head>
    <title>My Simple Product Page</title>
  </head>
  <body>
    <table border=1>
      <?php echo $productlist; ?>
    </table>
  </body>
</html>

在这个版本的代码中,我们只是添加了一些元素,使它可以显示为一个网页。这些包括:

  • $productlist变量,将数据包装成HTML表格结构。
  • 显示产品图像,而不是列出URL。
  • 将名称与产品URL结合在一起,使名称可点击。

结果,正如我们之前看到的,应该是这样的:

##

总结

从所有这些中得出的关键要点是,设置和使用WooCommerce API并不特别困难。通过看到一个简单的例子,你很可能已经有了如何扩展和增强你在这里学到的东西的想法。最好的部分是,现在你有了将这些想法变成现实的知识!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表