gpt4 book ai didi

android - 错误 401 Google-api-php-client 通过服务器 Android inapppurchase 验证

转载 作者:行者123 更新时间:2023-11-29 21:38:35 27 4
gpt4 key购买 nike

我需要在我的服务器上验证用户之前在我的 Android APP 中进行的每一次 Android 购买。我虽然与 google-api-php-client 一起工作,但服务器中的 token 的身份验证和管理会很容易。但是没有任何示例,昨天 Google 发布了提供应用内购买服务的新版本 0.6.3。

我关注了 -> *code.google.com/p/google-api-php-client/wiki/OAuth2#Service_Accounts*

在我的 code.google.com/apis/console/ 上,我继续 “Google Play Android Developer API” 并在 API 中配置了“服务帐户”访问权限。

服务器从Android客户端APP接收PACKAGE_NAME、PRODUCT_ID和购买TOKEN。

我的服务器代码如下:

require_once '../../src/Google_Client.php';
require_once '../../src/contrib/Google_AndroidpublisherService.php';

// Set your client id, service account name, and the path to your private key.
// For more information about obtaining these keys, visit:
// https://developers.google.com/console/help/#service_accounts
const CLIENT_ID = 'asdf.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = 'asdf@developer.gserviceaccount.com';

// Make sure you keep your key.p12 file in a secure location, and isn't
// readable by others.
const KEY_FILE = '../../asdf/privatekey.p12';;

$client = new Google_Client();
$client->setApplicationName({APP_PACKAGE_NAME});

// Set your cached access token. Remember to replace $_SESSION with a
// real database or memcached.
session_start();
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}

// Load the key in PKCS 12 format (you need to download this from the
// Google API Console when the service account was created.
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/androidpublisher'),
$key)
);

$client->setClientId(CLIENT_ID);
$service = new Google_AndroidPublisherService($client);
$res = $service->inapppurchases->get({APP_PACKAGE_NAME},{APP_PACKAGE_NAME.PRODUCT_ID}, {PURCHASE_TOKEN});
var_dump($res);

显示的错误是:

Google_ServiceException: Error calling GET https://www.googleapis.com/androidpublisher
/v1.1/applications/{APP_PACKAGE_NAME}/inapp/{APP_PACKAGE_NAME.PRODUCT_ID}/purchases
/{PURCHASE_TOKEN}: (401) This developer account does not own the application. in
/.../google-api-php-client/src/io/Google_REST.php on line 66 Call Stack: 0.0201
266376 1. {main}() ............

token 是正确的,我在 Google API 控制台 ( https://code.google.com/apis/console ) 和 Google 开发者控制台 ( https://play.google.com/apps/publish/ ) 中使用同一个帐户。我只使用服务帐户 api,不使用 Web 应用程序的客户端 ID 和简单 API 访问。为了安全起见,我在这里更改了一些代码值。

有人可以帮助我了解使用 Google API 进行的购买服务器验证有什么问题吗?我如何知道我的应用程序的所有者?与 Google Apis 新项目、项目域、项目编号、项目 ID 等有关...?

最佳答案

我认为我的问题是因为我试图将服务帐户与 Google Apps Gmail 自己的帐户(非 @gmail.com 帐户)一起使用。我必须将域范围的权限委托(delegate)给我的服务帐户。我必须按如下方式实例化一个 Android Publisher 服务:(仅在 Google Api Drive 文档中建立)。我在 Google_AssertionCredentials 中以编程方式添加了“子”参数,如下所示:

$auth = new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
'https://www.googleapis.com/auth/androidpublisher',
$key);
$auth->sub = "myown@email.com";
$client->setAssertionCredentials($auth);

Google Play Android Developer API 中的文档非常糟糕,Google 支持也无济于事,他们会将您重定向到文档。 Google PHP 开发人员甚至不知道服务帐户是如何工作的。尽管我自己找到了答案,但 Google 需要改进所有新的 Google Play In-app Billing API 版本 3。

关于android - 错误 401 Google-api-php-client 通过服务器 Android inapppurchase 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17750963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com