【问题标题】:how to connect node js to quickbooks v3 REST API如何将节点 js 连接到 quickbooks v3 REST API
【发布时间】:2014-06-15 01:40:48
【问题描述】:

我正在尝试使用 node.js 连接到 Intuits v3 REST api。我正在使用 SuperAgent 和 superagent-oauth 来提出请求。我使用 Intuits Oauth playground 生成了访问令牌。但我不断收到“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>

任何人都可以了解正在发生的事情吗?

【问题讨论】:

  • 请使用正确的 Content-Type:application/json。我没有使用 node.js 尝试过这些调用。所以,不确定 Content-Type 是否是这里唯一的问题。谢谢
  • 根据 SuperAgent 文档,accept('application/json') 是设置接受的有效方法。 visionmedia.github.io/superagent/#setting-accept。我错过了什么吗?

标签: node.js oauth intuit-partner-platform


【解决方案1】:

你可以使用 node.js client library

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

【讨论】:

  • Michael,干得好顺便说一句,我没有看到您在 Quickbooks API 之上的 DSL 与 Quickbooks 提供的新支付 API 相匹配,也没有遵循 API 中描述的费用捕获生命周期。结果,我不得不和 OP 做同样的事情,并使用 request 向 api 发出请求。
【解决方案2】:

解决了!

我使用Postman 创建请求。它奏效了。然后,我检查了 Postman 生成的 oAuth 标头与我使用 node 生成的标头(我使用 requestBin 来查看我的请求的标头)。我发现唯一真正的区别是我使用“1.0A”作为版本。将其更改为“1.0”有效!

var oauth = new OAuth.OAuth('','', consumerKey, consumerSecret, '1.0', null, 'HMAC-SHA1')

【讨论】:

    【解决方案3】:

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

    GET https://oauth.intuit.com/oauth/v1/get_request_token?oauth_callback=oob&oauth_nonce=34562646-ab97-46e1-9aa7-f814d83ef9d1&oauth_consumer_key=qyprd7I5WvVgWDFnPoiBh1ejZn&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1392306961&oauth_version=1.0&oauth_signature=0EtvSnzsuumeyib2fiEcnSyu8%3D HTTP/1.1 主机:oauth.intuit.com

    HTTP/1.1 200 正常 日期:2014 年 2 月 13 日星期四 15:56:03 GMT 服务器:阿帕奇 缓存控制:无缓存,无存储 Pragma:无缓存 内容长度:150 连接:关闭 内容类型:text/plain

    oauth_token_secret=dXhHHMS1EfdrQ32UabOMscIRWt5bLJNX3ZKljjBc&oauth_callback_confirmed=true&oauth_token=qyprdbwXdWrAt0xM2NgkLlJ79yCp4I2SmDg7tahDBPjA6Wti

    获取访问令牌-

    GET https://oauth.intuit.com/oauth/v1/get_access_token?oauth_verifier=b4skra3&oauth_token=qyprde5fvI7WNOQjTKYLDzTVxJ2dLPTgQEQSPlDVGxEy9wZX&oauth_nonce=f20a5a4b-3635-40a8-92cf-697dfdb07b9d&oauth_consumer_key=qyprd7I5WvVgJZUvWDFnPoiBh1ejZn&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1392397399&oauth_version=1.0&oauth_signature=gEVHttlM8IBAAkmi1dSNJgkKGsI%3D HTTP/1.1 主机:oauth.intuit.com

    HTTP/1.1 200 正常 日期:格林威治标准时间 2014 年 2 月 14 日星期五 17:03:20 服务器:阿帕奇 缓存控制:无缓存,无存储 Pragma:无缓存 内容长度:120 连接:关闭 内容类型:text/plain

    oauth_token_secret=474gtp6xsFzNJ1EhrrjiHrTH96xXieaRLinjPomA&oauth_token=qyprdNIpWn2oYPupMpeH8Byf9Bhun5rPpIZZtTbNsPyFtbT4

    【讨论】:

    • 谢谢。我已经有了 accessToken,这是通过 Intuits oAuth 控制台获得的。不过,我的签名是双重编码的,其他一切看起来都一样。我怀疑,我在这里遗漏了一些非常基本的东西。但我不知道它是什么。
    • 您是否添加了 Content-Type: text/plain ?
    • 我刚试过。我将请求 Content-Type 设置为“text/plain”,并将接受设置为“json”。还是不行。
    猜你喜欢
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2022-01-13
    • 2021-02-10
    • 1970-01-01
    相关资源
    最近更新 更多