2016-04-18 4 views
0

ich PHPoAuthLib um bin mit pro their examplenur für Quickbooks API Zugriffstoken einmal bekommen

an die API Quickbooks zu verbinden Wenn ich ihrem Beispiel folgen, die erste Anforderung, die ich an die API machen funktioniert perfekt:

$result = json_decode($quickbooksService->request($url)); 
echo 'result: <pre>' . print_r($result, true) . '</pre>'; 

jedoch in ihrem Beispiel verwenden sie $_GET['oauth_token'] und $_GET['oauth_verifier'] ein Zugriffstoken zu verlangen, und diese Werte sind auf dem $_GET Server-Variable während des einzigen Rückrufs von Quickbooks Online sofort nach meiner App autorisiert wurde, zur Verfügung.

Für zukünftige Anforderungen gibt es keine solche Beispiele auf PHPoAuthLib der docs, so habe ich versucht, eine schnelle Homebrew Lösung:

  1. Speichern Sie die Antwort von QBO irgendwo

if (!empty($_GET['oauth_token']) { 
    file_put_contents("token.txt", json_encode([ 
     'oauth_token' => $_GET['oauth_token'], 
     'oauth_verifier' => $_GET['oauth_verifier'], 
     'realm_id' => $_GET['realmId'] 
    ])); 
} 
  1. Diese Antwort später erneut verwenden

$token = json_decode(file_get_contents("token.txt")); 
$quickbooksService->requestAccessToken(
    $token->oauth_token, 
    $token->oauth_verifier 
    // $token->getRequestTokenSecret() is not necessary - it will be automatically populated 
); 
// At this point my app crashes and return a 500 error 
// Further code does not run 

Der Fehler I erhalten ist:

TokenResponseException StreamClient.php in Leitung 68: ausgefallene Ressource anzufordern. HTTP-Code: HTTP/1.1 401 Unauthorized

Denken Sie daran, dass das Token und Verifizierer Arbeit perfekt, wenn ich sie sofort verwenden, nachdem die App autorisiert ist. Wenn ich sie in einer Datei speichern und 30 Sekunden später erneut verwenden möchte, geschieht dies.

ich denke, es könnte ein fundamentales Missverständnis über OAuth 1.0

Antwort

1

ich Sie nicht denken, was haben, ist eine korrekte OAuth-Implementierung. Hast du die OAuth-Spezifikation gelesen und implementiert, wie sie dort definiert ist?

Sobald Sie ein Anforderungstoken und einen Verifizierer haben, verwenden Sie diese, um ein Zugriffstoken zu erhalten.

Das Zugriffs-Token ist dann gut für 6 Monate.

Es sieht so aus, als ob Sie versuchen, ein kurzlebiges Anforderungs-Token zu verwenden, um fortwährend Zugriffstoken abzurufen. Das wird nicht funktionieren.

dh Wenn Sie das jedes Mal tun wollen Sie eine weitere Anfrage machen.

$ quickbooksService-> requestAccessToken (

Dann sind Sie etwas falsch zu machen Sie tun sollten, dass EINMAL alle 6 Monate, und das war's.

Arbeitscode hier:

Spec ist hier: