WordPress rest API OAuth curl命令

AK0*_*101 37 php wordpress curl oauth

我有WordPress休息APIWordPress OAuth服务器设置插件设置,并且 每次呼叫内容没有给我OAuth令牌或OAuth秘密时,我尝试使用http://sevengoslings.net/~fangel/oauth-explorer/进行身份验证我需要.

我尝试了这些步骤 https://wordpress.org/support/topic/json-rest-api-from-mobile-app-with-authentication

1. Enter base url (http(s)://your.domain.com/oauth1
2. Access token = request
3. Authorize = authorize
4. Access_Token = access
5. Enter your consumer key and secret (leave method as HMAC-SHA1)
Run Code Online (Sandbox Code Playgroud)

点击即可Get Request Token获得通话内容

我应该在Call Content中得到这个

Call content now = 

oauth_token=xxxxxxxxxxxxxxx&oauth_token_secret=xxxxxxxxxxxxxxxxxxxxx&oauth_call_back_confirmed=true
Run Code Online (Sandbox Code Playgroud)

但我只能得到这个

 page not found 
Run Code Online (Sandbox Code Playgroud)

在这里,他们无法使三脚OAuth1.0a工作,所以他们使用基本的OAuth,这需要另一个插件,不建议用于生产.

我应该使用不同的签名方法吗?

我正在寻找两个curl命令来从服务器获取OAuth授权,另一个用于交换此授权以获取访问令牌+刷新令牌.

rai*_*son 5

我已经做到了这一点,我将概述我是如何做到这一点的。

我正在使用Postman 应用程序来测试和完善 API 调用。我强烈建议使用这个。一旦你的调用工作正常,你就可以导出到 PHP Curl (或任何你需要的)。

如果您使用 Postman,您可以使用此共享链接查看我的 API 调用。

对于您在第一次通话时遇到的问题,我有以下设置

首先,我确保我的端点 URL 是:

{{url}}/oauth1/request
Run Code Online (Sandbox Code Playgroud)

我将 API 调用设置为 PUSH,将 AuthType 设置为 OAuth 1.0

我添加了在 WP 后端 > 用户 > 应用程序中创建的consumer_key 和consumer_secret(这是通过OAuth 插件添加的)。

签名方法-HSAC-SHA1

然后 Postman 将更新它并动态创建您的 Nonce、时间戳和版本。

我将我的领域设置为“示例”

然后,我确保启用了以下选项: - 将参数添加到标头 - 将空参数添加到签名

这是我得到的参数:

realm="Example",oauth_consumer_key="AdPuqyWrAQQc",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1470248765",oauth_nonce="dnOTvG",oauth_version="1.0",oauth_signature="gUahTX2hfV1lqZCfMUvHtLLoauI%3D"
Run Code Online (Sandbox Code Playgroud)

这为我提供了以下输出:

oauth_token=xbTb4E93K6pP2tcg4qGJIYgl&oauth_token_secret=qWo01WL2ish205yvjiU8qyCkKVPMNUvSbKpFBB1T1oOuOtBc&oauth_callback_confirmed=true
Run Code Online (Sandbox Code Playgroud)

我可以使用 Postman 将此 API 调用导出到 cURL 函数,如果是这样,我会得到以下结果:

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "http://mydomain.dev/oauth1/request",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_consumer_key\"\r\n\r\nAdPuqyWrAQQc\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_token\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_signature_method\"\r\n\r\nHMAC-SHA1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_timestamp\"\r\n\r\n1470241356\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_nonce\"\r\n\r\n7VKp4N\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_version\"\r\n\r\n1.0\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"oauth_signature\"\r\n\r\n9qRrIkDxt56S9Ikf061eFOVLAdA%3D\r\n-----011000010111000001101001--",
  CURLOPT_HTTPHEADER => array(
    "authorization: OAuth realm=\"Example\",oauth_consumer_key=\"AdPuqyWrAQQc\",oauth_signature_method=\"HMAC-SHA1\",oauth_timestamp=\"1470248765\",oauth_nonce=\"dnOTvG\",oauth_version=\"1.0\",oauth_signature=\"gUahTX2hfV1lqZCfMUvHtLLoauI%3D\"",
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=---011000010111000001101001",
    "postman-token: dd85258e-a72a-b731-82d1-00109e30962f"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo 'response ' . $response;

  $a = parse_str($response);

  echo 'token ' . $oauth_token;
  echo '<br>';
  echo 'secret '. $oauth_token_secret;


}
Run Code Online (Sandbox Code Playgroud)

这是 OAuth 身份验证 3 步流程中的第 1 步。我刚刚开始踏上将他们联系起来的旅程。那里没有太多文档,也没有太多示例。

第 2 步看起来像是使用提供的令牌和密钥调用 /oauth1/authorize。这看起来需要用户登录并创建新的(且永久的)令牌和秘密。

第 3 步看起来像是对 /oauth1/access 的调用

我尚未成功地将步骤 2 和步骤 3 正确链接在一起,但我认为我应该发布以帮助解决有关第一步未返回正确标记的原始查询

这篇文章是解释如何使用 WP-API 和 OAuth 的更好的文章之一。