我正在尝试在Nodejs中复制这个PHP脚本,可以在这里找到。我正在使用"完整OAuth流程,没有图书馆"脚本
https://developer.yahoo.com/fantasysports/guide/GettingStarted.html
我能够获取我的请求令牌并使用它来获取访问令牌而没有任何问题。但是,当我使用我的Nodejs脚本对API进行实际调用时,我收到错误代码401,其中包含消息" Unauthorized"。当我运行PHP脚本时,我从返回的内容
中获取XML返回代码:401 内容:
<yahoo:error xmlns:yahoo='http://yahooapis.com/v1/base.rng'
xml:lang='en-US'>
<yahoo:description>Please provide valid credentials. OAuth oauth_problem="timestamp_refused", realm="yahooapis.com"</yahoo:description>
</yahoo:error>
我假设我自己的Nodejs脚本与时间戳有同样的问题,但我无法证明它。
这是我的Nodejs代码:
var accessToken = accessTokenData["oauth_token"];
var accessTokenSecret = accessTokenData["oauth_token_secret"];
// 4. Make request using access token
var protocol = "https:"
var baseUrl = "fantasysports.yahooapis.com";
var requestUri = "/fantasy/v2/game/nfl";
var requestUrl = protocol + "//" + baseUrl + requestUri;
console.log("Making request for " + requestUrl + " ...\n");
makeRequest(
consumerKey,
consumerSecret,
accessToken,
accessTokenSecret,
protocol,
baseUrl,
requestUri
)
//In makeSignedRequest
paramString += "&oauth_signature=" + encodeURIComponent(signature);
var finalPath = path + "?" + paramString
return new Promise(function(resolve, reject) {
var data = {
"error_str": "",
"errno": 0,
"return_code": 0,
"contents": ""
}
var options = {
"protocol": protocol,
"host": host,
"path": finalPath,
"timeout": 2
};
console.log("options: " + JSON.stringify(options, null, 2));
https.get(options, (res) => {
//....
还有其他人使用过这个基本的入门脚本吗?时间戳是绝对的,因为它是基于1970年新世纪的格林威治时间。
更新
我的服务器时钟错了。我更新了时钟,现在运行PHP脚本时出现以下错误:
返回代码:500 内容:
<?xml version='1.0' encoding='UTF-8'?>
<yahoo:error xmlns:yahoo='http://yahooapis.com/v1/base.rng'
xml:lang='en-US'>
<yahoo:description>Internal server error</yahoo:description>
</yahoo:error>
我在笔记本电脑上本地运行脚本时也遇到此错误。也许服务暂时停止了?
但是,我仍然在我的Nodejs中收到401 Unauthorized错误,这意味着脚本之间存在不同之处。一旦我可以让这个PHP脚本返回有效的有效负载,我将开始修复我的节点以匹配它。