2016-11-09 18 views
0

私は、各注文の請求書​​を作成できるように、私の会社のオンラインストア(php/Laravelで書かれています)をXeroに統合しようとしています。このため私はプライベートXeroアプリケーションを作成し、Oauth認証に必要な証明書を生成してXeroアプリケーションに追加しました。これで私のコンシューマキーと秘密が得られました。PHP/Guzzleを使用してXero APIのプライベートアプリケーションへのリクエストを認証

私は公式のPHPラッパーを見て、それは非常に時代遅れであり、私のアプリへの統合には適していないことがわかったので、Xeroのやり取りの量が少ないことを考えると、私はAPIを直接呼び出そうと思っていました。

私はGuzzleとGuzzle Oauthのサブスクライバを使用していますが、正しく認証されたリクエストを送信するのは難しいです。

私Xeroなどのアプリが(Xeroなどdevのエリアで述べたように)次の段落は、私の要求に適用されなければならないプライベートで考える:

$stack = HandlerStack::create(); 

$middleware = new Oauth1([ 
    'consumer_key' => config('services.xero.key'), 
    'consumer_secret' => config('services.xero.secret'), 
    'signature_method' => Oauth1::SIGNATURE_METHOD_RSA, 
]); 

$stack->push($middleware); 

$client = new Client([ 
    'base_uri' => 'https://api.xero.com/api.xro/2.0/', 
    'handler' => $stack, 
]); 

$res = $client->request('GET', 'Contacts'); 

dd($res); 

Note, For Private applications, the consumer token and secret are also used as the access token and secret.

は、だから私はそうのような要求を構築

しかし、次の例外がスローされます。

[GuzzleHttp\Exception\ClientException]
Client error: GET https://api.xero.com/api.xro/2.0/Contacts resulted in a 401 Unauthorized response:
oauth_problem=consumer_key_unknown&oauth_problem_advice=Consumer%20key%20was%20not%20recognised

Xeroアプリをセットアップし、コンシューマーキーとシークレットを生成しましたが、これをデバッグすることはできません。

適切なリクエスト方法についてアドバイスをいただけますか?

+0

あなたのリクエストはよかったです。 "このエラーは、コンシューマキー値が登録されたアプリケーションのコンシューマキー値と一致しない場合に返されます。"あなたのコンシューマーキーが有効ですか?はいの場合はxeroサポートに連絡してください。 – clinical

+0

私はコンシューマー・キーと秘密が正しいと確信しています。リクエストを送信する前にクライアントオブジェクトをコンソールにダンプし、その文字列が自分のアプリケーションの文字列と一致することを確認できます。私はXeroのサポートを試みます。 – harryg

+0

通話に証明書ファイルを含める必要がありますか? – harryg

答えて

0

私はあなたと同じ問題を抱えていました。これは私のために働いています

$middleware = new Oauth1([ 
    'consumer_key' => config('services.xero.key'), 
    'token' => config('services.xero.key'), 
    'private_key_file' => config('services.xero.path_to_my_private_key.pem'), 
    'private_key_passphrase' => config('services.xero.private_key_passphrase'), 
    'signature_method' => Oauth1::SIGNATURE_METHOD_RSA, 
]); 

$stack = GuzzleHttp\HandlerStack::create(); 
$stack->push($middleware); 

$options = [ 
    'base_uri' => 'https://api.xero.com/', 
    'handler' => $stack 
]; 

$this->apiClient = new GuzzleHttp\Client($options); 

https://developer.xero.com/documentation/auth-and-limits/private-applicationsではあると述べられている「消費者のキーは、アクセストークンとして使用されている消費者の秘密は、民間のアプリケーションに使用されていません。」それは私がこの設定を見つけた方法です。

関連する問題