bestys-mobile / google-play-billing

该软件包最新版本(v0.1.0)没有可用的许可信息。

Google Play Billing

v0.1.0 2021-01-06 12:20 UTC

This package is auto-updated.

Last update: 2024-09-06 21:36:35 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 范围的 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(由本包提供)进行查询。

以下方法可用于订阅

  1. acknowledge:确认订阅购买。
  2. get:检查用户的订阅购买是否有效并返回其到期时间。
  3. cancel:取消用户的订阅购买。
  4. defer:将用户的订阅购买推迟到指定的未来到期时间。
  5. refund:退款用户的订阅购买,但订阅在其到期时间之前仍然有效,并且将继续重复。
  6. 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中可用