我正在尝试使用WP REST API发布帖子。我能够使用OAuth1和PAW http客户端进行身份验证。我还可以在网站上发布帖子(再次使用PAW)。
PAW生成了PHP代码供我在网站上使用。我创建了测试。php并在那里插入代码。已尝试在浏览器中打开页面。它没有得到验证。它说,(第一次)签名无效,另一次,时间戳无效,另一次,nonce无效。
我检查了PAW,发现在每次新运行时,PAW都会生成一个唯一的nonce、时间戳和HMAC-SHA1签名,但我编写的代码在每次运行时都具有相同的nonce、时间戳和HMAC-SHA1签名。我想我需要找到一种方法来自动生成唯一的nonce、时间戳和签名。
有人能帮我吗?
代码如下:
<?php
// Get cURL resource
$ch = curl_init();
// Set url
curl_setopt($ch, CURLOPT_URL, \'http://sitename.com/wp-json/wp/v2/posts\');
// Set method
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, \'POST\');
// Set options
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: OAuth oauth_consumer_key=\\"zfksKSt8m7Bk\\", oauth_nonce=\\"dWXo8bGuKTMEqbmLf8cwqcWjfjDyqwKh\\", oauth_signature=\\"%2BOy0fDsKilNymYOOZRqjJN5q3tg%3D\\", oauth_signature_method=\\"HMAC-SHA1\\", oauth_timestamp=\\"1468900106\\", oauth_token=\\"IG6x6jIjboVhmyzFtjzn1fGT\\", oauth_version=\\"1.0\\"",
"Content-Type: application/json; charset=utf-8",
]
);
// Create body
$json_array = [
"title" => "This is going to be a newww posttt"
];
$body = json_encode($json_array);
// Set body
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
// Send the request & save response to $resp
$resp = curl_exec($ch);
if(!$resp) {
die(\'Error: "\' . curl_error($ch) . \'" - Code: \' . curl_errno($ch));
} else {
echo "Response HTTP Status Code : " . curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo "\\nResponse HTTP Body : " . $resp;
}
// Close request to clear up some resources
curl_close($ch);
SO网友:Leon
我也有同样的问题,但对于自动生成时间和nonce,您可以执行以下操作:
<?php
$nonce = md5(mt_rand());
// Set headers
curl_setopt($ch, CURLOPT_HTTPHEADER, [\'
Authorization: OAuth oauth_consumer_key="zfksKSt8m7Bk",
oauth_nonce=\'.$nonce.\',
oauth_signature="%2BOy0fDsKilNymYOOZRqjJN5q3tg%3D",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp=\'.time().\',
oauth_token="IG6x6jIjboVhmyzFtjzn1fGT",
oauth_version="1.0"
\',
\'Content-Type: application/json; charset=utf-8\',
]
);
我正在学习生成签名。我认为使用以下内容生成签名会很有用
$signature = hash_hmac( \'sha1\', $base_string, $key );