无法使用本地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