我已经把它做好了,我将概述我是如何做到这一点的。
我正在使用Postman应用程序来测试和完善API调用。我强烈建议使用这个。一旦你得到了调用工作,你可以导出到PHP Curl(或任何你需要的东西)。
如果您使用Postman,则可以使用此共享链接查看我的API调用。
对于第一次通话,您遇到问题,我有以下设置
首先,我确保我的终端节点 URL 是:
{{url}}/oauth1/request
我将 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"
这为我提供了以下输出:
oauth_token=xbTb4E93K6pP2tcg4qGJIYgl&oauth_token_secret=qWo01WL2ish205yvjiU8qyCkKVPMNUvSbKpFBB1T1oOuOtBc&oauth_callback_confirmed=true
我可以使用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;
}
这是 OAuth 身份验证的 3 步过程的第 1 步。我刚刚开始连接它们的旅程。没有太多的文档,也没有很多例子。
步骤 2 类似于使用提供的令牌和机密调用 /oauth1/authorize。这看起来需要用户登录并创建新的(和永久的)令牌和机密。
步骤 3 看起来像是对 /oauth1/access 的调用
我还没有成功地让步骤2和步骤3正确链接在一起,但我认为我应该发布以帮助解决有关第一步未返回正确令牌的原始查询
本文是解释如何使用WP-API和OAuth的更好的文章之一。