承接 aporat/laravel-appstore-purchases 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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.

Latest Stable Version Downloads codecov Laravel Version GitHub Actions License

✨ 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:

  • ConsumptionRequest
  • GracePeriodExpired
  • OfferRedeemed
  • PurchaseRefundDeclined
  • PurchaseRefunded
  • PurchaseRefundReversed
  • PurchaseRevoked
  • SubscriptionCreated
  • SubscriptionExpired
  • SubscriptionFailedToRenew
  • SubscriptionPriceIncrease
  • SubscriptionRenewalChanged
  • SubscriptionRenewalChangedPref
  • SubscriptionRenewalExtended
  • SubscriptionRenewalExtension
  • SubscriptionRenewed
  • ExternalPurchaseToken
  • OneTimeCharge
  • Test

📦 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);
}

统计信息

  • 总下载量: 1.86k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 7
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-05-02

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固