澄清如何验证服务器上的Google In App Purchase购买代币?

时间:2018-05-18 17:21:54

标签: google-api-php-client android-inapp-purchase

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

我已经可以使用(PHP)验证Google 登录令牌

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

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

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

但我如何使用Google_Client验证购买代币并获取对其内容的访问权。

是否真的只是将GET发送到Google服务器,就像在following Ruby example中一样?

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

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

  

使用Google Play开发者API的订阅和应用内购买部分执行GET请求以检索购买   Google Play的详细信息(一次性产品购买的Purchases.products或订阅的Purchases.subscriptions)。 GET请求包括应用包名称,产品ID和令牌(购买令牌)。

如果可能,只是想要一些澄清?感谢。

2 个答案:

答案 0 :(得分:1)

要验证并获取客户端应用中购买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文件。

答案 1 :(得分:1)

Antinous的回答对我有用。 skuID是productId。您可以从Google PHP代码中找到。 对于即将与Google应用程序内购买后端版本打交道的PHPer:

  1. 获取Google服务帐户(下载凭据json文件)访问权限以获取Google Play应用的财务报告。
  2. Composer安装google / apiclient
  3. 使用上面的代码

顺便说一句:openssl_verify对我不起作用。 2年前,我使用JWT获取acces_token,然后调用API来验证应用内付款。我认为以上是新方法。

我不知道为什么Google不能仅提供此功能的简单示例。他们只是给开发人员大量文档供阅读。