调用 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
获取访问令牌-
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)?
我希望能够为我在 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
获取访问令牌-
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)?