我可以使用guzzle获取订单详细信息。但我无法更新订单。
这是我的代码:
use stdClass;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
$data = new stdClass();
$data->fulfillment = new stdClass();
$trackingUrl = "123456789";
$shopUrl = "localhost/Test";
$consumerKey = "cs_mykey";
$consumerSecret = "ck_mykey";
$orderId = "123";
$subPath = "/wc-api/v2/orders/".$orderId;
$data->fulfillment->tracking_url = $trackingUrl;
$data->fulfillment->status = 'completed';
$headers = array(
'Content-Type: application/json'
);
$method = "POST";
$url = "http://localhost/Test/wc-api/v2/orders/123?oauth_consumer_key=ck_mykey&consumer_key=ck_mykey&consumer_secret=cs_mykey&oauth_timestamp=1505544895&oauth_nonce=9ecd49e80860e09ddaf91f148451532620976b8d&oauth_signature_method=HMAC-SHA256&oauth_signature=mysignature";
$Result = callApi($url, json_encode($data), $headers, $method);
echo '<pre>'; print_r($Result);
function callApi($url = NULL, $body = NULL, $headers = array(), $requestType = "POST")
{
$client = new GuzzleHttp\Client();
$body = $body ? $body : new stdClass();
$request = $client->POST($url)->setPostField($body)->send();
$data = $request->getBody()->getContents();
return json_decode($data);
}
使用上面的代码我将得到如下错误
产生了400 Bad Request
回复: {&#34;错误&#34;:[{&#34;代码&#34;:&#34; woocommerce_api_missing_callback_param&#34;,&#34;消息&#34;:&#34;缺少参数数据&#34;}]} &#39;在C:\ xampp \ htdocs \ Guzzle \ vendor \ guzzlehttp \ guzzle \ src \ Exception \ RequestException.php:113堆栈跟踪:#0 C:\ xampp \ htdocs \ Guzzle \ vendor \ guzzlehttp \ guzzle \ src \ Middleware.php (65):GuzzleHttp \ Exception \ RequestException :: create(Object(GuzzleHttp \ Psr7 \ Request),Object(GuzzleHttp \ Psr7 \ Response))#1 C:\ xampp \ htdocs \ Guzzle \ vendor \ guzzlehttp \ promises \ src \ Promise.php(203):在第113行的C:\ xampp \ htdocs \ Guzzle \ vendor \ guzzlehttp \ guzzle \ src \ Exception \ RequestException.php
我不知道上面错过了什么。帮我整理一下。
感谢。
答案 0 :(得分:3)
我改变了以下功能后,现在更新了订单。
function callApiPost($url = NULL, $body = NULL, $headers = array(), $requestType = "POST")
{
$client = new Client();
$body = $body ? $body : new stdClass();
$request = new Request($requestType, $url, $headers, json_encode($body));
$response = $client->send($request, ['timeout' => 10]);
if($requestType === 'DELETE') {
return $httpCode = $response->getStatusCode();
} else {
$data = $response->getBody()->getContents();
return json_decode($data);
}
}
通过使用guzzle我们不需要使用Post函数,我们只是获取请求并发送请求它将更新订单。
一个小小的变化......