aporat/laravel-appstore-purchases
Composer 安装命令:
composer require aporat/laravel-appstore-purchases
包简介
Laravel package for handling App Store purchase receipts, subscriptions and notifications
关键字:
README 文档
README
A Laravel package for validating in-app purchase receipts, managing subscriptions, and handling server notifications from Apple, iTunes, and Amazon App Stores.
✨ Features
- Dispatches Laravel events for all App Store Server Notification types
- Built-in receipt validators for Apple and Amazon
- Simple configuration via Laravel’s container and config files
- Supports Apple App Store Server API (AppTransaction, Get Transaction Info, etc.)
- Optional PSR-3 request/response logging via any Laravel log channel
🛠 Installation
composer require aporat/laravel-appstore-purchases
⚙️ Configuration
Publish the config file:
php artisan vendor:publish --tag=config --provider="Aporat\AppStorePurchases\AppStorePurchasesServiceProvider"
Then update config/appstore-purchases.php with your store credentials:
use ReceiptValidator\Environment; return [ 'validators' => [ 'apple' => [ 'validator' => 'apple-app-store', 'key_path' => app_path('../resources/keys/authkey_ABC123XYZ.p8'), 'key_id' => 'ABC123XYZ', 'issuer_id' => 'DEF456UVW', 'bundle_id' => 'com.example', 'environment' => Environment::SANDBOX, ], 'itunes' => [ 'validator' => 'itunes', 'shared_secret' => 'SHARED_SECRET', 'environment' => Environment::SANDBOX, ], 'amazon' => [ 'validator' => 'amazon', 'developer_secret' => 'DEVELOPER_SECRET', 'environment' => Environment::SANDBOX, ], ], ];
🪵 Logging
Logging is disabled by default. To enable it, set the APPSTORE_LOG_CHANNEL environment variable to any Laravel log channel name:
APPSTORE_LOG_CHANNEL=stack
This applies to all validators. When enabled, the underlying HTTP client emits structured log entries at the following levels:
| Level | When |
|---|---|
debug |
Outgoing request details (method, URI, environment, query params) |
info |
Successful responses |
warning |
API error responses (non-2xx with an error body) |
error |
Connection failures and exceptions |
Per-validator channel
You can also set a different log channel for an individual validator by adding a log_channel key to its config. This takes precedence over the global setting:
'validators' => [ 'apple' => [ 'validator' => 'apple-app-store', 'log_channel' => 'daily', // overrides APPSTORE_LOG_CHANNEL for this validator // ... ], ],
📬 Receiving Notifications
Add a route to handle server notifications from Apple:
use Aporat\AppStorePurchases\Http\Controllers\AppleAppStoreServerNotificationController; Route::prefix('server-notifications')->middleware([])->group(function () { Route::post('apple-appstore-callback', AppleAppStoreServerNotificationController::class); });
Security Recommendation: Add rate limiting middleware to the notification endpoint to prevent abuse:
Route::prefix('server-notifications')->middleware(['throttle:60,1'])->group(function () { Route::post('apple-appstore-callback', AppleAppStoreServerNotificationController::class); });
This controller automatically dispatches Laravel events for all Apple App Store Server Notification types, including:
ConsumptionRequestGracePeriodExpiredOfferRedeemedPurchaseRefundDeclinedPurchaseRefundedPurchaseRefundReversedPurchaseRevokedSubscriptionCreatedSubscriptionExpiredSubscriptionFailedToRenewSubscriptionPriceIncreaseSubscriptionRenewalChangedSubscriptionRenewalChangedPrefSubscriptionRenewalExtendedSubscriptionRenewalExtensionSubscriptionRenewedExternalPurchaseTokenOneTimeChargeTest
📦 Events
All App Store notification types are dispatched as Laravel events and extend a base PurchaseEvent class.
Example: Handling a Subscription Renewal
use Aporat\AppStorePurchases\Events\SubscriptionRenewed; Event::listen(SubscriptionRenewed::class, function ($event) { $transaction = $event->notification->getTransaction(); $receipts = SubscriptionReceipt::getByTransaction($transaction->getOriginalTransactionId()); foreach ($receipts as $receipt) { $account = Account::find($receipt->account_id); $account->processSubscription($transaction); } });
✅ Manual Receipt Validation
You can validate a transaction ID manually:
$validator = AppStorePurchases::get('apple'); $response = $validator->validate($transactionId);
If you have a raw app receipt, extract the transaction ID first:
use Aporat\AppStorePurchases\Facades\AppStorePurchases; use ReceiptValidator\AppleAppStore\Validators\AppleAppStoreValidator; use ReceiptValidator\AppleAppStore\ReceiptUtility; $validator = AppStorePurchases::get('apple'); if ($validator instanceof AppleAppStoreValidator) { $transactionId = ReceiptUtility::extractTransactionIdFromAppReceipt($rawAppReceipt); $response = $validator->validate($transactionId); }
aporat/laravel-appstore-purchases 适用场景与选型建议
aporat/laravel-appstore-purchases 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.86k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2025 年 05 月 02 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「apple」 「laravel」 「app store」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 aporat/laravel-appstore-purchases 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 aporat/laravel-appstore-purchases 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 aporat/laravel-appstore-purchases 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A simple library to decode and parse Apple Sign In client tokens.
Apple Push Notification & Feedback Provider
Make your bundle an application
App Version Utility for CakePHP 2.x Applications
Send push notification to android|ios devices , support APNs, FCM
Alfabank REST API integration
统计信息
- 总下载量: 1.86k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 3
- 点击次数: 13
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-05-02