如果客户订单来自特定类别,我正在尝试使用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);
}
}
}
预期:客户订单已传递到商店 结果:客户订单未传递到商店
答案 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