bestys-mobile / google-play-billing
Google Play Billing
Requires
- php: >=7.1
- ext-json: *
- google/auth: ^1.14
- guzzlehttp/guzzle: ^6.0|^7.0
- nesbot/carbon: ^2.41
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- fzaninotto/faker: ^1.9
- phpunit/phpunit: ^8.5
- symfony/var-dumper: ^5.1
- vimeo/psalm: ^3.17
This package is auto-updated.
Last update: 2024-09-06 21:36:35 UTC
README
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
- 在 Cloud Console 中,转到 创建服务帐户密钥 页面。
- 从 服务帐户 列表中,选择 新建服务帐户。
- 在 服务帐户名称 字段中,输入一个名称。
- 从 角色 列表中,选择 项目 > 所有者。
- 点击 创建。一个包含您密钥的 JSON 文件将下载到您的计算机。
- 您可以通过以下方式设置环境变量
$path = 'path/to/google-app-credentials.json'; putenv(sprintf("GOOGLE_APPLICATION_CREDENTIALS=%s", $path));
销售产品
使用您的任何类型的产品,您可以使用 REST API 来
- 确认:确认内购项的购买。
- 获取:检查内购项的购买和消耗状态。
确认产品
要确认产品,您需要一个客户端,可以通过使用 android publisher 范围的 ClientFactory 创建,然后创建 Bestys\Products\Product 类的实例,最后触发 acknowledge() 方法。
use Bestys\GooglePlay\ClientFactory; use Bestys\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 Bestys\GooglePlay\ClientFactory; use Bestys\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() 方法返回一个包含以下方法的 Bestys\GooglePlay\Products\ProductPurchase 对象
销售订阅
本节描述了如何处理订阅生命周期事件,例如续订和过期。
购买的生命周期
以下是一次性购买或订阅的典型购买流程。
- 向用户展示他们可以购买的内容。
- 启动购买流程,让用户接受购买。
- 在您的服务器上验证购买。
- 向用户提供内容,并确认内容的交付。可选地,将项目标记为已消耗,以便用户可以再次购买该项目。
订阅在取消之前自动续订。订阅可以经历以下状态
- 有效:用户处于良好状态并且有权访问订阅。
- 已取消:用户已取消订阅,但在到期前仍有访问权限。
- 宽限期:用户遇到付款问题,但在谷歌尝试重试付款方式期间仍有权访问。
- 暂停:用户遇到付款问题,在谷歌重试付款方式期间不再有权访问。
- 暂停中:用户暂停了访问权限,直到他们恢复访问权限之前没有访问权限。
- 已过期:用户已取消订阅并失去了访问权限。用户在到期时被视为流失。
处理订阅生命周期
订阅在其生命周期中会经历各种状态变化,您的应用程序需要对每个变化做出响应。为了检查订阅者的状态,您的应用程序可以使用谷歌Play开发者API中的Purchases.subscriptions:get(由本包提供)进行查询。
以下方法可用于订阅
- acknowledge:确认订阅购买。
- get:检查用户的订阅购买是否有效并返回其到期时间。
cancel:取消用户的订阅购买。defer:将用户的订阅购买推迟到指定的未来到期时间。refund:退款用户的订阅购买,但订阅在其到期时间之前仍然有效,并且将继续重复。revoke:退款并立即撤销用户的订阅购买。
注意:划线的功能尚未实现。请通过您的贡献帮助我们 😅。
use Bestys\GooglePlay\ClientFactory; use Bestys\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(); // Bestys\GooglePlay\Subscriptions\SubscriptionPurchase
以下方法在Bestys\GooglePlay\Subscriptions\SubscriptionPurchase对象中可用
您的应用程序应通过使用实时开发者通知来监听状态变化,以确保状态保持同步。当发生影响订阅状态的事件(如续订和取消)时,将发送SubscriptionNotification。您需要在收到实时开发者通知后调用开发者API以获取完整状态并更新您的后端状态。这些通知仅告诉您订阅状态已更改,它们不提供有关整体订阅状态的完整信息。
注意:由于配额限制,不推荐通过定期轮询谷歌Play开发者API来检查状态,而不是利用实时开发者通知。
您的应用程序需要处理以下表中描述的状态变化
在收到实时开发者通知后,您可以按以下方式解析其内容
use Bestys\GooglePlay\DeveloperNotifications\DeveloperNotification; $data = 'the_received_base_64_encoded_string'; $developerNotification = DeveloperNotification::parse($data); // Bestys\GooglePlay\DeveloperNotifications\DeveloperNotification $subscriptionNotification = $developerNotification->getSubscriptionNotification(); // Bestys\GooglePlay\DeveloperNotifications\SubscriptionNotification
以下方法在Bestys\GooglePlay\DeveloperNotifications\DeveloperNotification中可用
以下方法在Bestys\GooglePlay\DeveloperNotifications\SubscriptionNotification中可用