20

在过去的几天里我尝试了很多东西,但现在我没有想法了:(

我想验证在我的 android 应用中创建的 inAppPurchase。

1) 我在 google API 控制台中创建了一个新的服务帐户。

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 = 'foo@bar.de' 设置为我的邮件地址

刷新 OAuth2 令牌时出错,消息:'{ "error" : "unauthorized_client", "error_description" : "Unauthorized client or scope in request." }'

4

1 回答 1

46

好的,我找到了解决方案!

您必须将您的 API 与您的应用程序连接起来。您必须转到您的 Google Play 发布页面 ( https://play.google.com/apps/publish ) 并在 Settings->User account & rights->Invite new user 中使用服务帐户电子邮件邀请用户并为其提供“查看财务报告”的权限。

这意味着,虽然您通常可能会在 Google Play 控制台中看到您的域中列出的许多用户(电子邮件:user1@mydomain.com,角色:财务;电子邮件:user2@mydomain.com,角色:管理员),但您将现在添加另一个用户并给他一个财务角色(电子邮件:XXX@developer.gserviceaccount.com,角色:财务)。

谢谢为我工作,祝你好运!

于 2014-06-23T11:42:39.880 回答