web-dev-qa-db-ja.com

サービスアカウントを使用してGoogleInAppPurchaseを確認します

私はここ数日、たくさんのことを試しましたが、今はアイデアがありません:(

Androidアプリで作成されたinAppPurchaseを確認したい。

1)GoogleAPIコンソールで新しいサービスアカウントを作成しました。

1a)サービスアカウントは権限の下にリストされており、「表示できる」権限を持っています

2)最新バージョンの https://github.com/google/google-api-php-client を使用しています

3)私のPHPスクリプトからのコードスニペット:

$client = new Google_Client(); 
$client->setApplicationName('myAppName' );
$client->setClientId('123456789123-vxoasdt8qwe6awerc9ysdfmjysdfysf64werweria8fh.apps.googleusercontent.com');
$key = file_get_contents('/shr/data/stor/b516cexx3123asdf3988345d8133e7f86bfas2553-privatekey.p12');
$service_account_name = '123456789123-vxoasdt8qwe6awerc9ysdfmjysdfysf64werweria8fh@developer.gserviceaccount.com';

$client->setScopes(array('https://www.googleapis.com/auth/androidpublisher') );
$cred = new Google_Auth_AssertionCredentials( $service_account_name, array('https://www.googleapis.com/auth/androidpublisher'), $key );
$client->setAssertionCredentials($cred);

try {  
    $service = new Google_Service_AndroidPublisher( $client ); 
    $googleApiResult = $service->inapppurchases->get($externalAppId, $externalProductId, $purchaseToken);
} catch (Exception $e) {  
    var_dump( $e->getMessage() ); 
}

4)グーグルからの応答:

GET https://www.googleapis.com/androidpublisher/v1.1/applications/de.test.myapp/inapp/de.test.inapp.google.balance5eur/purchases/ [PURCHASETOKEN] : (401)現在のユーザーには、要求された操作を実行するための十分な権限がありません。

[PURCHASETOKEN]は私がグーグルから受け取った購入トークンです

5)$ cred-> sub ='[email protected] 'を私のメールアドレスに設定すると、

OAuth2トークンの更新中にエラーが発生しました。メッセージ: '{"error": "unauthorized_client"、 "error_description": "Unauthorized client or scope inrequest。" } '

16
glutorange

OK、解決策を見つけました!

APIをアプリに接続する必要があります。 Google Playの公開ページ( https://play.google.com/apps/publish )に移動し、[設定]-> [ユーザーアカウントと権限]->でサービスアカウントのメールアドレスを使用してユーザーを招待する必要があります新しいユーザーを招待し、「財務レポートを表示する」権限を付与します。

つまり、通常、ドメインの多数のユーザーがGoogle Playコンソールに表示されますが(メール:[email protected]、役割:財務、メール:[email protected]、役割:管理者)、次に、別のユーザーを追加して、彼に財務の役割を与えます(電子メール:[email protected]、役割:財務)。

ありがとう、頑張ってください!

38
frieser