我已經在QuickBooks開發者門戶中設立了一家公司,并成功創建了一個OAuth令牌(我可以重繪 本答案中指定的)。因此,與這些問題中的大多數不同,這不是關于OAuth的... 我在這里使用的是裸露的PHP,因為我由于技術原因無法使用SDK。
在獲得OAuth令牌后,我試圖從API游樂場執行下一個API呼叫,獲得公司資訊。我通過以下代碼有效地呼叫了 QB API:
($query是/v3/company/<companyID>/companyinfo/<companyID> (companyID是來自API游樂場的 "境界ID"),$base是沙盒URL(與標題中的 "沙盒基礎URL "相同),$access_tokens["access"]是OAuth訪問標記;$url是https: //${base}${query})
$headers = array(
"GET" . $query . " HTTP/2",
"主機。" 。$base,
"Accept: application/json"。
"授權。Bearer" 。$access_tokens["access"] 。
"生產基地URL: https://quickbooks.api.intuit.com"。
"沙盒基地URL: https://sandbox-quickbooks.api.intuit.com".
);
$curl = curl_init($url)。
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true)。
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers) 。
curl_setopt($curl, CURLINFO_HEADER_OUT, true)。
curl_setopt($curl, CURLOPT_HEADER, true)。
$output = curl_exec($curl)。
呼叫后,$output的值是:
HTTP/2 400
日期: Tue, 31 Aug 2021 14: 42: 55 GMT
內容型別: text/plain
content-length: 11
服務器:envoy
錯誤請求
請求頭(由QB服務器通過curl_getinfo回傳)是:
GET /v3/company/4.。 0/companyinfo/4....0 HTTP/2。
主機: sandbox-quickbooks.api.intuit.com
接受:application/json
授權。Bearer e...Q
生產基地網址:https://quickbooks.api.intuit.com。
沙盒基礎網址:https://sandbox-quickbooks.api.intuit.com。
(auth token和公司ID已被剪掉)
如果我在瀏覽器中直接呼叫該URL,我得到的結果是401(認證錯誤),因此我認為OAuth部分是有效的(正如我所說,我可以成功地檢索訪問令牌并重繪 它)。我只是想知道,我是否有什么其他錯誤的做法,導致QB API呼叫失敗?
uj5u.com熱心網友回復:
這里有很多東西看起來有點古怪...。我將從嘗試這些事情開始:
GET頭。GET不是一個有效的HTTP頭(它是方法/動詞的一部分),而且你不應該試圖以這種方式指定HTTP/2。洗掉這個:"GET" 。$query . " HTTP/2",
- 洗掉其他兩個無效的HTTP頭。看起來你在這里混淆了Intuit關于HTTP頭的檔案。這些都是無效的頭資訊,你不應該發送它們:
"Production Base URL: https://quickbooks.api.intuit.com"。
"沙盒基礎URL: https://sandbox-quickbooks.api.intuit.com"。
- 不要向cURL指定
Host:頭。沒有理由這樣做,而且它有可能與你傳遞給cURL的URL發生沖突。cURL將為你計算并發送這個資訊。
"Host。" 。$base。
我還要檢查一下,確保你將請求發送到了正確的URL。如果是沙盒公司,它將被發送到沙盒的URL。如果是生產型公司,它將被發送到生產型URL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/319789.html
標籤:
