stafox/huawei-iap

华为 In-App Purchase (IAP) 验证库

1.0.0 2020-11-29 22:05 UTC

This package is auto-updated.

Last update: 2024-09-29 05:36:36 UTC


README

Latest Stable Version Total Downloads Build Status Code Coverage Scrutinizer Code Quality License

PHP 库,可用于验证华为订单和订阅服务的 In-App Purchases。

要求

  • PHP >= 7.2
  • ext-json
  • ext-curl

入门指南

使用此包最简单的方式是在项目中将其作为 Composer 包安装。虽然不强制要求使用 Composer,但它可以让事情变得容易很多。

如果您不熟悉 Composer,请参阅 https://getcomposer.org.cn/

  1. huawei-iap 添加到您的应用的 composer.json 文件中。

     {
         ...
         "require": {
             "stafox/huawei-iap": "main"
         },
         ...
     }
    
  2. 运行 php composer install

  3. 如果您还没有,请将 Composer 自动加载添加到您的项目初始化文件中。(示例)

     require 'vendor/autoload.php';
    

快速使用示例

订阅验证

use Huawei\IAP\AuthorizationCredentials;
use Huawei\IAP\Validator as HuaweiValidator;

$validator = new HuaweiValidator();

$appId = 123456789; // Your application ID
$appKey = 'XXXYYYZZZ'; // Your app key

$authCredentials = new AuthorizationCredentials($appId, $appKey);

$type = HuaweiValidator::TYPE_SUBSCRIPTION;
$subscriptionId = 'AAABBBCCC';
$productId = 'com.your.app.subscription';
$purchaseToken = 'purchaseTokenHere';

$purchaseData = new PurchaseData($type, $subscriptionId, $purchaseToken, $productId);

$subscriptionResponse = $validator->validate($authCredentials, $purchaseData);

$isSubscriptionValid = $subscriptionResponse->isSubValid();
$expirationDateMs = $subscriptionResponse->getExpirationDate();

订单(一次性购买)验证

use Huawei\IAP\AuthorizationCredentials;
use Huawei\IAP\Validator as HuaweiValidator;

$validator = new HuaweiValidator();

$appId = 123456789; // Your application ID
$appKey = 'XXXYYYZZZ'; // Your app key

$authCredentials = new AuthorizationCredentials($appId, $appKey);

$type = HuaweiValidator::TYPE_ORDER;
$productId = 'com.your.app.subscription';
$purchaseToken = 'purchaseTokenHere';

$purchaseData = new PurchaseData($type, null, $purchaseToken, $productId);

$orderResponse = $validator->validate($authCredentials, $purchaseData);

$pruchaseKind = $orderResponse->getKind();
$orderId = $orderResponse->getOrderId();
$consumptionState = $orderResponse->getConsumptionState();

使用自定义 AuthorizationStorage

默认情况下,认证令牌存储在内存中。为了减少授权请求的数量,您可以扩展 AuthorizationStorage 以存储更长时间的数据。

例如

use Huawei\IAP\AuthorizationStorage;
use Redis;

class RedisAuthorizationStorage extends AuthorizationStorage
{
    private $redisClient;

    public function __construct(Redis $redisClient)
    {
        $this->redisClient = $redisClient;
    }

    public function fetch(AuthorizationCredentials $credentials): ?string
    {
        $key = $this->transformCredentialsToKey($credentials);

        $at = $this->redisClient->get($key);
        return $at === false ? null : $at;
    }

    public function save(AuthorizationCredentials $credentials, string $accessToken): void
    {
        $key = $this->transformCredentialsToKey($credentials);

        $this->redisClient->set($key, $accessToken);
    }
}

然后将它传递给 Validator。

use Huawei\IAP\Validator as HuaweiValidator;


$redisAuthStorage = new RedisAuthorizationStorage($redisClient);

$validator = new HuaweiValidator();
$validator->setAuthorizationStorage($redisAuthStorage);

选择商店站点

默认情况下将使用德国商店站点。使用不同的商店站点可能有助于减少请求时间。

要这样做,您需要扩展 Validator 并覆盖

  • createSubscriptionVerificationRequest(PurchaseData $purchaseData)
  • createOrderVerificationRequest(PurchaseData $purchaseData)

并扩展 PurchaseData 以获取国家信息,例如。

然后传递所需的国别信息到 Validator::getClient() 方法。