“403 Forbidden"响应谷歌Android应用程序内购买API与服务帐户


"403 Forbidden" response from Google Android In App Purchases API with service account

无法使用本地Google PHP客户端使Android In App purchase API与服务帐户凭据一起工作。

我从Google PHP客户端包(Google 'examples'service-account.php)中获取样例脚本,它提供了所有必需的证书,它在"图书"服务中工作得很好,但在"应用程序购买中的Android"中却不行。

下面的代码运行正常:

$client_id = '{SERVICE_CLIENT_ID}';
$service_account_name = '{SERVICE_ACCOUNT_NAME}';
$key_file_location = '{KEY_PATH}';
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$service = new Google_Service_Books($client);
$scopes = array('https://www.googleapis.com/auth/books');
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($service_account_name, $scopes, $key);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion($cred);
}
echo '<pre>'; $results = $service->volumes->listVolumes('Henry David Thoreau', array('filter' => 'free-ebooks')); print_r($results); echo '</pre>';

下面的代码以"403 Forbidden"作为Google的响应结束:

$client_id = '{SERVICE_CLIENT_ID}';
$service_account_name = '{SERVICE_ACCOUNT_NAME}';
$key_file_location = '{KEY_PATH}';
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$service = new Google_Service_AndroidPublisher($client);
$scopes = array('https://www.googleapis.com/auth/androidpublisher');
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials($service_account_name, $scopes, $key);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion($cred);
}
echo '<pre>'; $results = $service->inapppurchases->get('{PACKAGE}', '{PRODUCT}', '{TOKEN}'); print_r($results); echo '</pre>';

我还对Web帐户凭证进行了测试(当访问令牌由Google在"redirect"之后给出的特殊"代码"生成时)。结果是一样的——403 Forbidden.

谁能给任何线索为什么Android API不工作,它的预期?

我找到解决方案了!

你必须连接你的API与你的应用程序。你必须去你的Google Play发布页面(https://play.google.com/apps/publish),并邀请一个用户与服务帐户电子邮件在设置->用户帐户&rights->邀请新用户并赋予其查看财务报告的权限

感谢我的工作,祝你好运!

您将需要以"您"的身份登录,但这可能是一次性操作-如果您请求脱机访问,您将能够获得可用于生成新访问令牌的刷新令牌-因此您甚至可以将此作为带外过程的一部分,并简单地使用刷新令牌进行部署。不能使用服务帐户(如果没有某种委托),因为它不能标识单个用户,而这是这里所需要的。

我也遇到过类似的问题。我最终通过查看这里生成的链接解决了这个问题:https://developers.google.com/oauthplayground/

显然,Android发行商范围

https://www.googleapis.com/auth/androidpublisher

需要添加到请求授权码的链接中(甚至在生成刷新令牌之前),方法是添加:

&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fandroidpublisher

:

https://accounts.google.com/o/oauth2/auth?redirect_uri=<YOUR_REDIRECT_URI>&response_type=code&client_id=<YOUR_CLIENT_ID>&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fandroidpublisher&approval_prompt=force&access_type=offline