stafox / huawei-iap
华为 In-App Purchase (IAP) 验证库
1.0.0
2020-11-29 22:05 UTC
Requires
- php: >=7.2
- ext-curl: *
- ext-json: *
- guzzlehttp/guzzle: ~6.3|~7.0
Requires (Dev)
- phpunit/phpunit: ^7.0|^8.0
README
PHP 库,可用于验证华为订单和订阅服务的 In-App Purchases。
要求
- PHP >= 7.2
- ext-json
- ext-curl
入门指南
使用此包最简单的方式是在项目中将其作为 Composer 包安装。虽然不强制要求使用 Composer,但它可以让事情变得容易很多。
如果您不熟悉 Composer,请参阅 https://getcomposer.org.cn/。
-
将
huawei-iap
添加到您的应用的 composer.json 文件中。{ ... "require": { "stafox/huawei-iap": "main" }, ... }
-
运行
php composer install
。 -
如果您还没有,请将 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()
方法。