facebook twitter hatena line email

「Php/GooglePlayApi」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
("Google Play Android Developer API has not been used in project" エラーと出るとき)
(GooglePlayの売上APIにアクセスするphp)
行23: 行23:
 
$serviceAccountPath = '/path/to/your-service-account.json'; // サービスアカウントJSONのパス
 
$serviceAccountPath = '/path/to/your-service-account.json'; // サービスアカウントJSONのパス
 
$packageName = 'com.example.yourapp'; // Google Playのアプリのパッケージ名
 
$packageName = 'com.example.yourapp'; // Google Playのアプリのパッケージ名
$reportType = 'salesreport'; // レポートの種類(売上レポート)
+
$productId = 'your_product_id'; // 取得したい製品のID(例: 月額サブスクリプションや消耗品のID)
$reportDate = date('Ymd', strtotime('-1 day')); // 昨日の日付のレポートを取得
+
$bucketName = 'pubsite_prod_xxxxxx'; // Google Cloud Storage のバケット名(Google Play Console レポートのダウンロード売上にCloudStorageURIがあるのでそれのpubsite_~xxxx部分をコピペ)
+
$objectName = "sales/salesreport_$reportDate.csv"; // レポートのファイル名
+
  
 
// Google APIクライアントの初期化
 
// Google APIクライアントの初期化
行33: 行30:
 
$client = new Google_Client();
 
$client = new Google_Client();
 
$client->useApplicationDefaultCredentials();
 
$client->useApplicationDefaultCredentials();
$client->addScope(Google_Service_Storage::DEVSTORAGE_READ_ONLY);
+
$client->addScope('https://www.googleapis.com/auth/androidpublisher');
  
// Google Cloud Storage にアクセス
+
// Android Publisher APIにアクセス
$storage = new Google_Service_Storage($client);
+
$service = new Google_Service_AndroidPublisher($client);
  
 
try {
 
try {
     // 売上レポートをダウンロード
+
     // 製品の購入情報を取得
     $file = $storage->objects->get($bucketName, $objectName, ['alt' => 'media']);
+
     $purchase = $service->purchases_products->get($packageName, $productId, 'your_purchase_token');
   
+
    // レポートの内容を取得
+
    $reportData = $file->getBody()->getContents();
+
   
+
    // CSVファイルとして保存
+
    file_put_contents("salesreport_$reportDate.csv", $reportData);
+
   
+
    echo "✅ 売上レポートを取得しました: salesreport_$reportDate.csv\n";
+
  
 +
    // 購入情報を表示
 +
    echo "✅ 購入情報を取得しました:\n";
 +
    print_r($purchase);
 +
 +
} catch (Google_Service_Exception $e) {
 +
    echo "❌ Google API エラー: " . $e->getMessage() . "\n";
 +
    echo "詳細: " . $e->getErrors()[0]['message'] . "\n";
 
} catch (Exception $e) {
 
} catch (Exception $e) {
 
     echo "❌ エラー: " . $e->getMessage() . "\n";
 
     echo "❌ エラー: " . $e->getMessage() . "\n";

2025年3月21日 (金) 18:28時点における版

準備

gcpでサービスアカウントを作成し鍵を作る

  1. GoogleCloudPlatform(https://console.cloud.google.com/ )で、IAMと管理 / サービスアカントを開く
  2. 上にある"サービスアカウントを作成する"を選択
  3. サービスアカウント名に、わかりやすく例えば"purchase"などといれて、apiを作る。(例:purchase@appname1.iam.gserviceaccount.com)
  4. 上のタブから鍵を選択し、"キーを追加"から"新しい鍵"を選択してJSONを選択
  5. サービスアカウントJSONファイルが、DLされるので、保存しておく

PlayConsoleにサービスアカウントの権限を追加

  1. PlayConsole( https://play.google.com/console/developers )のユーザーと権限を開く
  2. "新しいユーザを招待"を選択して、上の項目で作った、サービスアカウント(例:purchase@appname1.iam.gserviceaccount.com)を追加する
  3. 権限の項目のアプリ追加を選択し、売上を見たいアプリを選択する
  4. その歳、"アプリ情報の閲覧(読み取り専用)"、"売上データの表示"、"注文と定期購入"の管理の3つにチェックを付ける

GooglePlayの売上APIにアクセスするphp

  1. google/apiclientのライブラリを持つプロジェクトを作成
$ composer require google/apiclient

index.php

<?php
require 'vendor/autoload.php'; // ComposerでインストールしたGoogle APIクライアントを読み込む
// 設定
$serviceAccountPath = '/path/to/your-service-account.json'; // サービスアカウントJSONのパス
$packageName = 'com.example.yourapp'; // Google Playのアプリのパッケージ名
$productId = 'your_product_id'; // 取得したい製品のID(例: 月額サブスクリプションや消耗品のID)

// Google APIクライアントの初期化
putenv("GOOGLE_APPLICATION_CREDENTIALS=$serviceAccountPath");

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/androidpublisher');

// Android Publisher APIにアクセス
$service = new Google_Service_AndroidPublisher($client);

try {
    // 製品の購入情報を取得
    $purchase = $service->purchases_products->get($packageName, $productId, 'your_purchase_token');

    // 購入情報を表示
    echo "✅ 購入情報を取得しました:\n";
    print_r($purchase);

} catch (Google_Service_Exception $e) {
    echo "❌ Google API エラー: " . $e->getMessage() . "\n";
    echo "詳細: " . $e->getErrors()[0]['message'] . "\n";
} catch (Exception $e) {
    echo "❌ エラー: " . $e->getMessage() . "\n";
}

"エラー: Invalid bucket name: "とでたら

index.phpの$bucketNameに設定した値が、間違えてるので、pubsite_prod_[数字]な感じになってるか、確認する。

"エラー: does not have storage.objects.get access"とでたら

エラー詳細

エラー: does not have storage.objects.get access to the Google Cloud Storage object. Permission storage.objects.get denied on resource (or it may not exist).

storage.objects.getの権限があるか確認する

"Google Play Android Developer API has not been used in project" エラーと出るとき

  1. GoogleCloudPlatformの"APIとサービス"を選択
  2. ライブラリを選択し、"Google Play Android Developer API"で検索し、でてきたものを有効にする