1

API バージョン: google-api-php-client-0.6.7

ユーザーがAndroidアプリから行ったAndroidサブスクリプションの購入を、PHPスクリプトを介してサーバーで確認する必要があります。

したがって、ユーザーの操作はなく、ユーザーは自分の購入のトークンのみをサーバーに送信し、サーバーは有効な購入であるかどうかを確認します。
ユーザーの操作を必要としないことがわかった唯一の方法は「サービスアカウント」であるように思われるため、ドキュメントに従ってCLIENT_ID、SERVICE_ACCOUNT_NAME、KEY_FILEも作成し、テストのために、アプリケーション$ANDROIDUsertokenから実際の購入トークンを使用しました

これは私のサーバー スクリプトです (セキュリティ上の理由から、一部のコード部分を変更しました)。

<?php
include_once('../lib/google-api-php-client/src/Google_Client.php');
include_once('../lib/google-api-php-client/src/contrib/Google_AndroidpublisherService.php');

//user token, in json format
$ANDROIDUsertoken = '{"orderId":"....","packageName":"....","productId":"....","purchaseTime":....,"purchaseState":0,"purchaseToken":"...."}';
$user_token= json_decode($ANDROIDUsertoken,true);

// https://developers.google.com/console/help/#service_accounts
const CLIENT_ID = 'something-private.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = 'something-private@developer.gserviceaccount.com';
const KEY_FILE = 'secret-dir/privatekey.p12';

$client = new Google_Client();
$client->setApplicationName($user_token['packageName']);
$client->setClientId(CLIENT_ID);
$key = file_get_contents(KEY_FILE);

echo "start auth:<br>";

$auth = new Google_AssertionCredentials(
    SERVICE_ACCOUNT_NAME,
    array('https://www.googleapis.com/auth/androidpublisher'),
    $key);

$client->setAssertionCredentials($auth);

//$client->getAuth()->refreshTokenWithAssertion();
//$accessToken=$client->getAccessToken();
//$client->setAccessToken($accessToken);

echo "start requests:<br>";

$AndroidPublisherService = new Google_AndroidPublisherService($client);
$res = $AndroidPublisherService->purchases->get($user_token['packageName'], $user_token['productId'], $user_token['purchaseToken']);

var_dump($res);
?>

エラー:

start auth:
start requests:
Fatal error: Uncaught exception 'Google_ServiceException' with message 'Error calling GET https://www.googleapis.com/androidpublisher/v1.1/applications/..APPLICATION../subscriptions/..PRODUCT../purchases/..TOKEN..: 
(401) This developer account does not own the application.' in /..PATH TO MY WEBSERVER../lib/google-api-php-client/src/io/Google_REST.php on line 66

また、以前は「Webアプリケーション」でOAuth + androidpublisherとうまく連携していましたが、それは私の目的ではないユーザー操作を必要とします(サーバー側のチェックが必要です)

$AndroidPublisherService->purchases->get サブスクリプションのスタンドに注意してください

この投稿を見ましたが、少し異なり、うまくいきませんでした

4

1 に答える 1