Node.js 如何将节点js连接到quickbooks v3 REST API

Node.js 如何将节点js连接到quickbooks v3 REST API,node.js,oauth,intuit-partner-platform,Node.js,Oauth,Intuit Partner Platform,我正在尝试使用node.js连接Intuits v3 REST api。我正在使用SuperAgent和SuperAgent oauth发出请求。我使用Intuits Oauth游乐场生成了访问令牌。但我一直收到“ApplicationAuthenticationFailed;errorCode=003200;statusCode=401” 这就是我正在使用的 var OAuth = require('oauth') ,request = require('superagent'); requ

我正在尝试使用node.js连接Intuits v3 REST api。我正在使用SuperAgent和SuperAgent oauth发出请求。我使用Intuits Oauth游乐场生成了访问令牌。但我一直收到“ApplicationAuthenticationFailed;errorCode=003200;statusCode=401”

这就是我正在使用的

var  OAuth = require('oauth')
,request = require('superagent');
require('superagent-oauth')(request);
var oauth = new OAuth.OAuth('','', consumerKey, consumerSecret, '1.0.A', null, 'HMAC-SHA1')  

request.get("https://quickbooks.api.intuit.com/v3/company/672198300/customer/102")
.set('Content-Type', 'text/plain')
.accept('json')
.sign(oauth,accessToken,accessTokenSecret )
.end(function (err, res) {
    console.log(res.text)
})
下面是回应

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <IntuitResponse time="2014-06-14T18:33:49.228-07:00" xmlns="http://schema.intuit.com/finance/v3">
<Fault type="AUTHENTICATION">
    <Error code="3200">
        <Message>message=ApplicationAuthenticationFailed; errorCode=003200; statusCode=401</Message>
    </Error>
</Fault>

消息=ApplicationAuthenticationFailed;错误代码=003200;状态代码=401


有人能解释一下发生了什么吗?

我在node.js中没有任何关于ou的信息,但可以为您提供原始的请求和响应。将您的原始请求与此进行比较。签名应该是双重编码的。 获取请求令牌调用-

获取HTTP/1.1 主持人:oauth.intuit.com

HTTP/1.1200ok 日期:2014年2月13日星期四15:56:03 GMT 服务器:Apache 缓存控制:无缓存,无存储 Pragma:没有缓存 内容长度:150 连接:关闭 内容类型:文本/纯文本

oauth_-token_-secret=dxhhhms1efdrq32 uabomscirwt5bljnx3zkljjbc&oauth_-callback_-confirm=true&oauth_-token=qyprdbwxdwrat0xm2ngkllj79ycp4i2smdg7tahdpja6wti

获取访问令牌-

获取HTTP/1.1 主持人:oauth.intuit.com

HTTP/1.1200ok 日期:2014年2月14日星期五17:03:20 GMT 服务器:Apache 缓存控制:无缓存,无存储 Pragma:没有缓存 内容长度:120 连接:关闭 内容类型:文本/纯文本


oauth_token_secret=474gtp6xsfznj1ehrrjihrth96xxiearinnpoma&oauth_token=qyprdnipwn2ypupmpeh8byf9bhun5rppizzttbnspyftb4我在node.js中没有任何可供您使用的内容,但可以为您提供原始请求和调用响应。将您的原始请求与此进行比较。签名应该是双重编码的。 获取请求令牌调用-

获取HTTP/1.1 主持人:oauth.intuit.com

HTTP/1.1200ok 日期:2014年2月13日星期四15:56:03 GMT 服务器:Apache 缓存控制:无缓存,无存储 Pragma:没有缓存 内容长度:150 连接:关闭 内容类型:文本/纯文本

oauth_-token_-secret=dxhhhms1efdrq32 uabomscirwt5bljnx3zkljjbc&oauth_-callback_-confirm=true&oauth_-token=qyprdbwxdwrat0xm2ngkllj79ycp4i2smdg7tahdpja6wti

获取访问令牌-

获取HTTP/1.1 主持人:oauth.intuit.com

HTTP/1.1200ok 日期:2014年2月14日星期五17:03:20 GMT 服务器:Apache 缓存控制:无缓存,无存储 Pragma:没有缓存 内容长度:120 连接:关闭 内容类型:文本/纯文本

oauth_token_secret=474gtp6xsfznj1ehrrjihrth96xxirinpoma&oauth_token=qyprdnipwn2ypupmpeh8byf9bhun5rppizzttbnspyftb4已解决

我曾经创建请求。它成功了。然后,我将Postman生成的oAuth头与我使用node生成的头进行对比(我使用requestBin查看请求的头)。我发现唯一真正的区别是我使用了“1.0A”作为版本。将其更改为“1.0”成功了

解决了

我曾经创建请求。它成功了。然后,我将Postman生成的oAuth头与我使用node生成的头进行对比(我使用requestBin查看请求的头)。我发现唯一真正的区别是我使用了“1.0A”作为版本。将其更改为“1.0”成功了

您可以使用node.js

与大多数其他客户端一样,这将使您不必手动构建http请求。只需提供应用程序凭据和单个用户凭据,就可以简单地调用Javascript对象上的方法。所有REST端点在QuickBooks对象上都有相应的方法,该对象遵循node.js约定,并将可选回调作为最后一个参数

您可以使用node.js


与大多数其他客户端一样,这将使您不必手动构建http请求。只需提供应用程序凭据和单个用户凭据,就可以简单地调用Javascript对象上的方法。所有REST端点在QuickBooks对象上都有相应的方法,该对象遵循node.js约定,并将可选回调作为最后一个参数

请使用正确的内容类型:application/json。我没有使用node尝试这些调用。因此,不确定内容类型是否是这里唯一的问题。感谢根据SuperAgent文档,accept('application/json')是设置accept的有效方法。我遗漏了什么吗?请使用正确的内容类型:application/json。我没有使用node尝试这些调用。因此,不确定内容类型是否是这里唯一的问题。感谢根据SuperAgent文档,accept('application/json')是设置accept的有效方法。我错过什么了吗?谢谢。我已经有了accessToken,这是我通过IntuitOAuth控制台获得的。不过,我的签名是双重编码的,其他所有东西看起来都一样。我想,我缺少了一些基本的东西。但是我不知道它是什么。你添加了内容类型:text/plain吗?我只是尝试了一下。我将请求内容类型设置为“text/plain”,将accept设置为“json”。还是不行,谢谢。我已经有了accessToken,这是我通过IntuitOAuth控制台获得的。不过,我的签名是双重编码的,其他所有东西看起来都一样。我想,我缺少了一些基本的东西。但是我不知道它是什么。你添加了内容类型:text/plain吗?我只是尝试了一下。我将请求内容类型设置为“text/plain”,将accept设置为“json”。还是不行。Michael,做得很好顺便说一句,我看不到你的DSL在Quickbooks API之上与Quickbooks提供的新支付API相匹配,也没有遵循API中描述的费用捕获生命周期。因此,我不得不执行与OP相同的操作,并使用
request
针对api发出请求。Michael,做得很好,顺便说一句,我没有看到Quickbooks api上的DSL与Quickbooks提供的新支付api匹配,也没有遵循api中描述的费用捕获生命周期。因此,我不得不执行与OP相同的操作,并使用
request
发出请求
var oauth = new OAuth.OAuth('','', consumerKey, consumerSecret, '1.0', null, 'HMAC-SHA1')