gpt4 book ai didi

wordpress - WooCommerce REST Client API - 以编程方式获取消费者 key 和 secret

转载 作者:行者123 更新时间:2023-12-04 18:03:24 25 4
gpt4 key购买 nike

我目前正在使用客户端 API 来实现一个简单的用户前端来上传产品。函数client->products->create()似乎工作正常,但我始终无法解决一个问题。
每次上传产品,vendor设置为admin用户,而不是当前登录的用户,有没有办法通过API设置vendor?有没有人做到这一点?
这是我创建的函数,在提交表单时由 AJaX 调用(我故意将键和网站字段留空):

function addProduct()
{

$options = array(
'debug' => false,
'return_as_array' => false,
'validate_url' => false,
'timeout' => 30,
'ssl_verify' => false,
);

try {

$client = new WC_API_Client('', '', '', $options);

$productName = $_POST["productname"];
$price = $_POST["price"];
$discountPrice = $_POST["discountPrice"];
$description = $_POST["description"];
$shortDescription = $_POST["shortDescription"];
$authorId = 5;

$client->products->create(array('title' => $productName, 'type' => 'simple', 'regular_price' => $price, 'description' => $description));
} catch (WC_API_Client_Exception $e) {

echo $e->getMessage() . PHP_EOL;
echo $e->getCode() . PHP_EOL;

if ($e instanceof WC_API_Client_HTTP_Exception) {

print_r($e->get_request());
print_r($e->get_response());
}
}

echo ("Publicado" . $authorId);

// Una función AJaX en WordPress debe siempre terminarse con die().
die();
}
问题似乎是消费者 key 和消费者 secret ,那么,有没有办法以编程方式为客户端提供 API key 并动态获取这些 key ?

最佳答案

更新 :下面描述的获取消费者 key 的方法将不起作用; 一旦生成,就无法再从数据库中获取消费者 key .存储在这个新表中的消费者 key 与在管理屏幕中生成并传递给最终用户的消费者 key 不同。它appears to be an SHA256 hashed a version这把 key 。这更安全(以前存储在 wp_usermeta 中的消费者 key 和 secret 相当于存储明文密码,因为任何有权访问该数据的人都可以作为这些用户中的任何一个登录 API),但要少一些方便的。赢一些,输一些,但赢在安全上。

您的 new WC_API_Client()将在选项之前采用三个参数:$store_url、$consumer_key 和 $consumer_secret。

WC 商店中用于访问 API 的任何用户都需要消费者 key 或消费者 secret 。使用者 key 将标识 API 将以哪个用户身份运行,并且该用户将链接到通过 API 创建的任何实体。

直到最近,您还可以获得这样的用户的这两条信息:

$consumer_key = get_user_meta($user_id, 'woocommerce_api_consumer_key', true);
$consumer_secret = get_user_meta($user_id, 'woocommerce_api_consumer_secret', true);

其中 $user_id 是将创建项目的用户的 ID。如果您希望当前登录的用户能够以他们的名义创建项目,则需要为该用户提供消费者 key 和 secret ,并且需要在适当的 WC/WP 组中授予他们这样做的权限.

请注意,如果您这样做,那么用户还可以访问 WC 的管理页面以创建这些项目,而不仅仅是通过 API。

在 WC 的更高版本中,用户元项已移至单独的表: wp_woocommerce_api_keys所以你需要在那里而不是在用户元中查看。

这将为您提供给定用户 ID 的消费者 key 和 secret :
global $wpdb;
$key = $wpdb->get_row( $wpdb->prepare("
SELECT consumer_key, consumer_secret, permissions
FROM {$wpdb->prefix}woocommerce_api_keys
WHERE user_id = %d
", $user_id), ARRAY_A);

结果是这样的:
array(3) {
["consumer_key"]=>
string(64) "58043812eee6aa75c80407f8eb9cec025825f138eb7d60118af66cf4b38060fa"
["consumer_secret"]=>
string(43) "cs_1da716412bb9680d8b06b09160872b7e54416799"
["permissions"]=>
string(10) "read_write"
}

当然,我假设您使用 API 来“回送”到当前站点而不是访问远程站点。即使在当前站点上使用 WC API 创建产品也比通过 PHP 对象 API 方便得多。

我还没有找到任何公共(public) WC 方法来获取这些详细信息;它们都是私有(private)的,假设只有 WC 需要知道这些细节。

关于wordpress - WooCommerce REST Client API - 以编程方式获取消费者 key 和 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31327994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com