5

鉴于我的服务器端点已收到与 Google In App Billing 购买相关的购买令牌,我该如何以编程方式对其进行验证并访问其内容?

我已经可以使用验证 Google登录令牌php

$client = new Google_Client(['client_id' => $client_id]);

$payload = $client->verifyIdToken($token);

if ($payload)
    return $payload['sub'];

但是我将如何使用Google_Client来验证购买令牌并访问其内容。

它真的只是像下面的 Ruby 示例GET中那样向 Google 服务器发送 a 的情况吗?

Google_Client或者他们是我应该调用的特定命令?

我开始认为这是在php使用中复制提到的 Ruby 代码OAuth2或其他东西的情况,因为 Google Docs 实际上确实说过,一旦服务器拥有购买令牌:

使用 Google Play Developer API 的 Subscriptions 和 In-App Purchases 部分执行 GET 请求,以从 Google Play 检索购买详细信息(Purchases.products 用于一次性产品购买或 Purchases.subscriptions 用于订阅)。GET 请求包括应用程序包名称、产品 ID 和令牌(购买令牌)。

如果可能的话,只是想澄清一下?谢谢。

4

1 回答 1

7

要在您的客户端应用程序中验证并获取由 Google 应用程序内购买产生的购买令牌的详细信息,请使用以下代码 PHP:

putenv('GOOGLE_APPLICATION_CREDENTIALS=/home/mydir/credentials.json');
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/androidpublisher');
$service = new Google_Service_AndroidPublisher($client);
$purchase = $service->purchases_products->get($packageName, $skuID, $purchaseToken);

然后,您可以通过通常的方式访问您需要的所有信息,例如

echo $purchase['orderId'];

访问者名称的完整列表可在此处的 Google 文档中找到https://developers.google.com/android-publisher/api-ref/purchases/products

packageName 是您的应用程序包的名称,skuID 是被管理产品的字符串 SKU ID,您可以在 Google Developer Console 中创建它。购买令牌是在您的客户端应用程序内成功购买应用程序结果时返回给您的令牌,因此您需要通过 HTML 上的 POST 命令将其发送到您的服务器端点。不要忘记使用 SSL/TLS 来执行此操作。

当您在设置/API 访问权限下创建新服务帐户时,会自动从 Google Developer Consoler 下载 credentials.json 文件。


这里也是 JavaScript 版本:

const { google } = require('googleapis');

const auth = new google.auth.GoogleAuth({
    keyFile: path.join(__dirname, 'credentials.json'),
    scopes: 'https://www.googleapis.com/auth/androidpublisher',
  });
const client = await auth.getClient();
google.options({auth: client});

const androidpublisher = google.androidpublisher({ version: 'v3' });

const res = await androidpublisher.purchases.products.get({
    packageName: 'your.package.name',
    productId: ‘your_sku_id',
    token: your_purchase_token,
  });

console.log(res.data);

有关 API 访问的一般详细信息,请参阅Google API 文档(例如此处也是如此)(上述代码可以很容易地调整为与其他 API 一起使用)。

于 2018-05-27T14:34:43.670 回答