调用 Quickbooks API

Call Quickbooks API

我希望能够为我在 Intuit Developer 上制作的测试应用程序调用 Quickbooks API。该应用程序是在 Xcode 中使用 Swift 制作的,这是我目前所拥有的:

    var request = NSMutableURLRequest(URL: NSURL(string: "https://quickbooks.api.intuit.com/v3/company/1313821405/query?query=SELECT%20*%20FROM%20Customer")!)
    request.HTTPMethod = "GET"
    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {
        (response, data, error) in

        println(response)
        println(data)
        println(error)
        if error == nil {
            if let HTTPResponse = response as? NSHTTPURLResponse {
                let statusCode = HTTPResponse.statusCode
                if statusCode == 200 {
                    println("success")

                }
            }
        }
    }

错误说 "The operation couldn't be completed"。我在一家沙盒公司做这件事,这是为什么?如果我输入一个真实的公司 ID 会有效吗?另外,如何使用 API?

https://developer.intuit.com/docs/0100_accounting/0060_authentication_and_authorization

您是否已使用 Oauth 1.0 对您的请求进行身份验证并获得访问令牌和访问令牌密钥以进行 api 调用?您需要有一个实现连接到 Quickbooks 按钮的网页,然后为您要连接的 QBO 公司获取这些令牌。然后只有您可以调用 api.

[编辑]- 获取请求令牌调用-

获取 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

服务器:阿帕奇

缓存控制:无缓存,无存储

编译指示:无缓存

内容长度:150

连接:关闭

内容类型:text/plain

oauth_token_secret=dXhHHMS1EfdrQ32UabOMscIRWt5bLJNX3ZKljjBc&oauth_callback_confirmed=true&oauth_token=qyprdbwXdWrAt0xM2NgkLlJ79yCp4I2SmDg7tahDBPjA6Wti

获取访问令牌-

获取 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 GMT 服务器:阿帕奇 缓存控制:无缓存,无存储 Pragma:无缓存 内容长度:120 连接:关闭 内容类型:text/plain

oauth_token_secret=474gtp6xsFzNJ1EhrrjiHrTH96xXieaRLinjPomA&oauth_token=qyprdNIpWn2oYPupMpeH8Byf9Bhun5rPpIZZtTbNsPyFtbT4


[编辑]- 进行 api 调用的原始请求和响应- POST https://quickbooks.api.intuit.com/v3/company/717093040/query HTTP/1.1

内容类型:text/plain

主持人:quickbooks.api.intuit.com

授权:OAuth oauth_token="lvprdBmi45KMPO2FnvYtq6KLFTMM7KG0P0PJO3Sm7F3n7pgq",oauth_nonce="e5d6e732-f903-4456-9c5f-58103843c3c6",oauth_consumer_key="qyprd7I5WvVgJZUvWDFnPoiBh1ejZn",oauth_signature_method= "HMAC-SHA1",oauth_timestamp="1394005668",oauth_version="1.0",oauth_signature="J8qgGZRa4loR6HEtdpAudP1nVpw%3D"

内容长度:47 期望:100-继续 连接:保持活动

Select * 来自账户

HTTP/1.1 200 行

日期:2014 年 3 月 5 日,星期三 07:47:49 GMT

服务器:Apache/2.2.3(红帽)

HeaderQueryTime: 21

上下文初始化时间:12

HeaderDAO时间:22

响应 ID:146f271e-1f23-4842-87ba-ad9fc69fe0a2

响应应用时间:196

intuit_tid: 146f271e-1f23-4842-87ba-ad9fc69fe0a2

连接:关闭

内容类型:application/xml

内容长度:36683

<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2014-03-    05T07:47:49.393Z"><QueryResponse maxResults="64" startPosition="1"><Account     status="Pending"><Id>QB:9</Id><SyncToken>7</SyncToken><MetaData>    <CreateTime>2014-03-03T10:56:45Z</CreateTime><LastUpdatedTime>2014-03-    04T14:44:57Z</LastUpdatedTime></MetaData><Name>Name_updatedc4f1a</Name>    <SubAccount>false</SubAccount>   <Description>description_updatedfc6b1</Description><Active>true</Active>    <Classification>Revenue</Classification><AccountType>Income</AccountType>    <AcctNum>49400</AcctNum><CurrentBalance>22654.7</CurrentBalance>   <OnlineBankingEnabled>false</OnlineBankingEnabled></Account></QueryResponse>   </IntuitResponse>

无法完全从您的移动应用生成令牌。

使用 consumerKey 和 consumerToken,您可以从 OAuthPlayground 生成 accessToken 和 accessSecret。 https://appcenter.intuit.com/Playground/OAuth/IA PN - 完成 C2QB(OAuth) 流程后,您应该使用 'App Menu API Test.' 选项,它会显示 accessToken 和 accessSecret。

获得这 4 个令牌后,您可以拨打任何电话。为此,您应该使用任何标准的 OAuth 库(Swift),例如 https://github.com/dongri/OAuthSwift PN - 我还没有尝试过(我只是在网上搜索了一下才找到的)。

PFB post 我在其中共享 Java 使用 signPost OAuth 库的代码。 您可以将其转换为 Swift(使用 OAuthSwift 或任何其他合适的库)。 How to call API (Oauth 1.0)?