simpleclick/google-play-billing

此软件包的最新版本(0.6.6)没有可用的许可证信息。

Google Play Billing

0.6.6 2021-06-25 12:22 UTC

This package is auto-updated.

Last update: 2024-09-25 19:34:27 UTC


README

Latest Version on Packagist Total Downloads

PHP Google Play Billing 为将 Google Play 的计费系统添加到您的 php 项目提供所需的实现。

Google Play 的计费系统概述

Google Play 的计费系统是一项服务,它使您能够在您的 Android 应用中销售数字产品和内容。

您可以使用 Google Play 的计费系统来销售以下类型的数字内容

  • 一次性产品:一次性产品是用户可以购买的单次非重复收费内容。一次性产品可以是消耗品或非消耗品

    • 消耗品 是用户为了获得应用内内容(如游戏货币)而消耗的产品。当用户消耗产品时,您的应用会分发相关内容,然后用户可以再次购买该物品。
    • 非消耗品 是一次购买以提供永久性好处的产品。例如,包括高级升级和关卡包。
  • 订阅:订阅是一种定期提供内容的产品。订阅将自动续订,直到取消。订阅的例子包括在线杂志和音乐流媒体服务。

安装

使用 composer 安装此软件包

composer require imdhemy/google-play-billing

配置

请求 Google Play 开发者 API 需要身份验证和作用域。为了验证您的机器,请创建一个服务帐户,然后设置环境变量 GOOGLE_APPLICATION_CREDENTIALS

  1. 在 Cloud Console 中,转到 创建服务帐户密钥 页面。
  2. 服务帐户 列表中选择 新建服务帐户
  3. 服务帐户名称 字段中输入一个名称。
  4. 角色 列表中选择 项目 > 所有者
  5. 点击 创建。一个包含您的密钥的 JSON 文件将下载到您的计算机。
  6. 您可以通过以下方式设置环境变量
$path = 'path/to/google-app-credentials.json';
putenv(sprintf("GOOGLE_APPLICATION_CREDENTIALS=%s", $path));

销售产品

使用任何类型的产品,您都可以使用 REST API 来

  1. 确认:确认应用内物品的购买。
  2. 获取:检查应用内物品的购买和消耗状态。

确认产品

要确认产品,您需要一个客户端,该客户端可以使用 android publisher scope 通过 ClientFactory 创建,然后创建 Imdhemy\Products\Product 类的实例,最后触发 acknowledge() 方法。

use Simpleclick\GooglePlay\ClientFactory;
use Simpleclick\GooglePlay\Products\Product;

$client = ClientFactory::create([ClientFactory::SCOPE_ANDROID_PUBLISHER]);
$product = new Product($client, 'com.example.package.name', 'productId', 'Purchase_Token');
$product->acknowledge();

获取产品的消耗状态

要检查应用内物品的购买和消耗状态,请使用确认产品时使用的相同步骤,但触发 get() 方法而不是确认方法。

use Simpleclick\GooglePlay\ClientFactory;
use Simpleclick\GooglePlay\Products\Product;

$client = ClientFactory::create([ClientFactory::SCOPE_ANDROID_PUBLISHER]);
$product = new Product($client, 'com.example.package.name', 'productId', 'Purchase_Token');
$resource = $product->get();

get() 方法返回一个包含以下方法的 Imdhemy\GooglePlay\Products\ProductPurchase 对象

销售订阅

本节介绍了如何处理订阅生命周期事件,例如续订和过期。

购买的寿命

以下是一次性购买或订阅的典型购买流程。

  • 向用户展示他们可以购买的内容。
  • 启动购买流程,以便用户接受购买。
  • 在您的服务器上验证购买。
  • 向用户提供内容,并确认内容已送达。可选地,标记项目为已消费,以便用户可以再次购买该商品。

订阅将自动续订,直到取消。订阅可以处于以下状态

  • 活跃:用户处于良好状态,并有权访问订阅。
  • 已取消:用户已取消,但在到期前仍可访问。
  • 宽限期:用户遇到付款问题,但在谷歌尝试重新支付付款方式期间仍可访问。
  • 暂停:用户遇到付款问题,在谷歌尝试重新支付付款方式期间不再有权访问。
  • 暂停:用户暂停了访问,直到他们恢复访问之前无法访问。
  • 已过期:用户已取消并失去了对订阅的访问。用户在到期时被视为流失。

处理订阅生命周期

订阅在其生命周期中会经历各种状态变化,您的应用需要对每个变化做出响应。为了检查订阅者的状态,您的应用可以使用Google Play开发者API中的Purchases.subscriptions:get(由本包提供)进行查询。

以下方法可用于订阅

  1. acknowledge:确认订阅购买。
  2. get:检查用户的订阅购买是否有效,并返回其到期时间。
  3. cancel:取消用户的订阅购买。
  4. defer:将用户的订阅购买推迟到指定的未来到期时间。
  5. refund:退还用户的订阅购买,但订阅在到期时间之前仍然有效,并将继续续订。
  6. revoke:退还并立即吊销用户的订阅购买。

注意:斜杠方法尚未实现。请通过您的贡献帮助我们 😅。

use Simpleclick\GooglePlay\ClientFactory;
use Simpleclick\GooglePlay\Subscriptions\Subscription;

$client = ClientFactory::create([ClientFactory::SCOPE_ANDROID_PUBLISHER]);
$subscription = new Subscription($client, 'com.example.package.name', 'subscriptionId', 'Purchase_Token');
$subscription->acknowledge();
$resource = $subscription->get(); // Imdhemy\GooglePlay\Subscriptions\SubscriptionPurchase

以下方法在Imdhemy\GooglePlay\Subscriptions\SubscriptionPurchase对象中可用

您的应用应通过实时开发者通知监听状态变化,以确保状态保持同步。当订阅状态受到诸如续订和取消等事件的影响时,将发送SubscriptionNotification。您需要在收到实时开发者通知后调用开发者API以获取完整状态并更新自己的后端状态。这些通知仅告知您订阅状态已更改。它们不会提供关于整体订阅状态的完整信息。

注意:由于配额限制,不建议定期轮询Google Play开发者API来检查状态,而不是利用实时开发者通知。

您的应用需要处理以下表格中描述的状态变化

收到实时开发者通知后,您可以按以下方式解析其内容

use Simpleclick\GooglePlay\DeveloperNotifications\DeveloperNotification;
$data = 'the_received_base_64_encoded_string';
$developerNotification = DeveloperNotification::parse($data); // Imdhemy\GooglePlay\DeveloperNotifications\DeveloperNotification
$subscriptionNotification = $developerNotification->getSubscriptionNotification(); // Imdhemy\GooglePlay\DeveloperNotifications\SubscriptionNotification

以下方法在Imdhemy\GooglePlay\DeveloperNotifications\DeveloperNotification中可用

以下方法在Imdhemy\GooglePlay\DeveloperNotifications\SubscriptionNotification中可用