weijiajia / saloonphp-apple-client
A PHP client for Apple's APIs built with Saloon PHP HTTP client framework
dev-main
2025-04-17 08:19 UTC
Requires
- php: >=8.0
- league/flysystem: ^3
- matomo/device-detector: ^6.4
- saloonphp/cache-plugin: ^3.0
- saloonphp/saloon: ^3.0
- spatie/laravel-data: ^4.13
- weijiajia/saloonphp-cookie-plugin: @dev
- weijiajia/saloonphp-header-synchronize-plugin: @dev
- weijiajia/saloonphp-http-proxy-plugin: dev-main
- weijiajia/saloonphp-logs-plugin: dev-main
Requires (Dev)
- mockery/mockery: ^1.5
- pestphp/pest: ^1.23
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2025-04-17 08:19:26 UTC
README
中文文档 | English
A PHP client for Apple's APIs built with Saloon.
Features
- Complete Apple API integration for various services:
- Apple ID management
- iCloud services
- Account management
- Authentication services
- Buy/Purchase API
- Report Problem services
- Built-in error handling for Apple-specific errors
- Cookie management for authenticated sessions
- HTTP proxy support
- Header synchronization
- Logging capabilities
- XML and Plist response parsing
Requirements
- PHP 8.0 or higher
- Saloon v3.0+
Installation
composer require weijiajia/saloonphp-apple-client
Usage
Advanced Usage
Cookie Management
use Weijiajia\SaloonphpCookiePlugin\Driver\FileCookieJar; // Configure cookie jar $cookieJar = new FileCookieJar('/path/to/cookies.json'); $connector->withCookieJar($cookieJar);
Logging
use Weijiajia\SaloonphpLogsPlugin\Driver\FileLogDriver; // Configure logger $logger = new FileLogDriver('/path/to/logs'); $connector->withLogger($logger);
Header Synchronization
use Weijiajia\SaloonphpHeaderSynchronizePlugin\Driver\ArrayStoreHeaderSynchronize; // Configure header synchronization $headerSynchronize = new ArrayStoreHeaderSynchronize(); $connector->withHeaderSynchronizeDriver($headerSynchronize);
Proxy Queue
use Weijiajia\SaloonphpHttpProxyPlugin\ProxySplQueue; use Weijiajia\HttpProxyManager\Data\Proxy; $proxySplQueue = new ProxySplQueue(roundRobinEnabled: true); $proxySplQueue->enqueue(new Proxy(host:'127.0.0.1',port:'10809',username:"xxxx",password:'xxxx',url:'http://user-xxxx_password@127.0.0.1:10809')); $connector->withProxyQueue($proxySplQueue);
use Weijiajia\SaloonphpHeaderSynchronizePlugin\Driver\ArrayStoreHeaderSynchronize; // Configure header synchronization $headerSynchronize = new ArrayStoreHeaderSynchronize(); $connector->withHeaderSynchronizeDriver($headerSynchronize);
Basic Usage
// Import the necessary classes use Weijiajia\SaloonphpAppleClient\Integrations\AppleId\AppleIdConnector; use Weijiajia\SaloonphpLogsPlugin\Driver\FileLogDriver; use Weijiajia\SaloonphpHeaderSynchronizePlugin\Driver\ArrayStoreHeaderSynchronize; // Create a connector instance $connector = new AppleIdConnector(); // Enable debugging $connector->debug(); // Configure logging $logger = new FileLogDriver('/path/to/logs'); $connector->withLogger($logger); // Configure header synchronization $connector->withHeaderSynchronizeDriver(new ArrayStoreHeaderSynchronize()); // Configure proxy if needed $connector->withProxyQueue($proxySplQueue); // Make requests $response = $connector->send(new SomeAppleRequest()); // Handle responses $data = $response->dto();
Available Integrations
Apple ID (AppleId)
AppleId integration provides access to Apple ID management functionality.
use Weijiajia\SaloonphpAppleClient\Integrations\AppleId\AppleIdConnector; use Weijiajia\SaloonphpAppleClient\Integrations\AppleId\Request\LoginRequest; use Weijiajia\SaloonphpAppleClient\Integrations\AppleId\Request\SecurityCodeRequest; // Create connector $appleIdConnector = new AppleIdConnector(); // Login with Apple ID $loginResponse = $appleIdConnector->send(new LoginRequest([ 'apple_id' => 'user@example.com', 'password' => 'your_password' ])); // Handle 2FA if needed if ($loginResponse->requiresSecurityCode()) { $securityResponse = $appleIdConnector->send(new SecurityCodeRequest([ 'code' => '123456' ])); } // Access different resources $accountResource = $appleIdConnector->getAccountResource(); $bootstrapResource = $appleIdConnector->getBootstrapResources(); $securityDevicesResource = $appleIdConnector->getSecurityDevicesResources(); $securityPhoneResource = $appleIdConnector->getSecurityPhoneResources(); $paymentResource = $appleIdConnector->getPaymentResources();
iCloud Services (Icloud)
Access to iCloud services including family sharing management.
use Weijiajia\SaloonphpAppleClient\Integrations\SetupIcloud\SetupIcloudConnector; // Create connector $icloudConnector = new SetupIcloudConnector(); // Access family resources $familyResources = $icloudConnector->getFamilyResources(); // Get family members $familyMembers = $familyResources->getMembers(); // Access authentication resources $authenticateResources = $icloudConnector->getAuthenticateResources(); // Setup resources $setupResources = $icloudConnector->setupWResources();
Purchase API (Buy)
Interface with Apple's purchasing system.
use Weijiajia\SaloonphpAppleClient\Integrations\Buy\BuyConnector; // Create connector $buyConnector = new BuyConnector(); // Get resources $resources = $buyConnector->getResources(); // Purchase an app $purchaseResponse = $resources->purchase([ 'productId' => 'com.example.app', 'price' => '0.99', 'currency' => 'USD' ]); // Get purchase history $history = $resources->getPurchaseHistory();
Report Problem (ReportProblem)
Interface for reporting issues with purchased content.
use Weijiajia\SaloonphpAppleClient\Integrations\ReportProblem\ReportProblemConnector; // Create connector $reportConnector = new ReportProblemConnector(); // Get resources $resources = $reportConnector->getResources(); // Report a problem with a purchase $reportResponse = $resources->reportProblem([ 'purchaseId' => '1234567890', 'issueType' => 'DOES_NOT_WORK', 'comments' => 'The app crashes on startup' ]);
Apple ID Registration for icloud.com
Complete flow for registering a new Apple ID with verification steps:
use Weijiajia\SaloonphpAppleClient\Integrations\AppleId\AppleIdConnector; use Weijiajia\SaloonphpAppleClient\DataConstruct\AppleId; use Weijiajia\SaloonphpHeaderSynchronizePlugin\Driver\ArrayStoreHeaderSynchronize; // Create connector $appleIdConnector = new AppleIdConnector(); $appleIdConnector->withHeaderSynchronizeDriver(new ArrayStoreHeaderSynchronize()); // Get widget account information $response = $appleIdConnector->getAccountResource()->widgetAccount( widgetKey: 'd39ba9916b7251055b22c7f910e2ea796ee65e98b2ddecea8f5dde8d9d1a815d', referer: 'https://www.icloud.com/', appContext: 'icloud', lv: '0.3.16' ); // Create verification info $verificationInfo = VerificationInfo::from([ 'id' => '', 'answer' => '', ]); // Generate user information $firstName = 'John'; $lastName = 'Doe'; $birthday = '1990-01-01'; // Create verification account $verificationAccount = VerificationAccount::from([ 'name' => 'user@example.com', 'password' => 'password123', 'person' => [ 'name' => [ 'firstName' => $firstName, 'lastName' => $lastName, ], 'birthday' => $birthday, 'primaryAddress' => [ 'country' => 'USA', ], ], 'preferences' => [ 'preferredLanguage' => $response->getLocale(), 'marketingPreferences' => [ 'appleNews' => false, 'appleUpdates' => true, 'iTunesUpdates' => true, ], ], 'verificationInfo' => $verificationInfo, ]); // Phone verification setup $phoneNumberVerification = PhoneNumberVerification::from([ 'phoneNumber' => [ 'id' => 1, 'number' => '5551234567', 'countryCode' => 'US', 'countryDialCode' => '1', 'nonFTEU' => true, ], 'mode' => 'sms', ]); // Handle captcha $captchaResponse = $appleIdConnector->getAccountResource()->captcha( $response->appleSessionId(), 'd39ba9916b7251055b22c7f910e2ea796ee65e98b2ddecea8f5dde8d9d1a815d' ); $captcha = Captcha::from([ 'id' => $captchaResponse->getId(), 'token' => $captchaResponse->getToken(), 'answer' => 'captcha-answer', ]); // Create validation object $validate = new Validate( $phoneNumberVerification, $verificationAccount, $captcha, false ); // Verify Apple ID $appleIdConnector->getAccountResource()->appleid( 'user@example.com', $response->appleSessionId(), $response->getWidgetKey() ); // Verify password $appleIdConnector->getAccountResource()->password( 'user@example.com', 'password123', $response->appleSessionId(), $response->getWidgetKey() ); // Submit validation $validationResponse = $appleIdConnector->getAccountResource()->validate( validateDto: $validate, appleIdSessionId: $response->appleSessionId(), appleWidgetKey: $response->getWidgetKey() ); // Send email verification code $data = SendVerificationEmail::from([ 'account' => [ 'name' => 'user@example.com', 'person' => [ 'name' => [ 'firstName' => $verificationAccount->person->name->firstName, 'lastName' => $verificationAccount->person->name->lastName, ], ], ], 'countryCode' => 'USA', ]); $emailResponse = $appleIdConnector ->getAccountResource() ->sendVerificationEmail($data, $response->appleSessionId(), $response->getWidgetKey()) ->dto(); // Validate email verification code $verificationPut = VerificationEmail::from([ 'name' => 'user@example.com', 'verificationInfo' => $validate->account->verificationInfo, ]); $emailVerificationResponse = $appleIdConnector->getAccountResource()->verificationEmail( $verificationPut, $response->appleSessionId(), $response->getWidgetKey() ); // Send phone verification code $phoneCodeResponse = $appleIdConnector->getAccountResource()->sendVerificationPhone( $validate, $response->appleSessionId(), $response->getWidgetKey() ); // Validate phone verification code $phoneVerificationResponse = $appleIdConnector->getAccountResource()->verificationPhone( $validate, $response->appleSessionId(), $response->getWidgetKey() ); // Complete account creation $accountResponse = $appleIdConnector->getAccountResource()->account( validateDto: $validate, appleIdSessionId: $response->appleSessionId(), appleWidgetKey: $response->getWidgetKey() );
Error Handling
The client includes specialized exception classes for various Apple API error scenarios:
use Weijiajia\SaloonphpAppleClient\Exception\UnauthorizedException; use Weijiajia\SaloonphpAppleClient\Exception\AccountLockoutException; use Weijiajia\SaloonphpAppleClient\Exception\VerificationCodeException; use Weijiajia\SaloonphpAppleClient\Exception\AppleException; try { $response = $connector->send($request); } catch (UnauthorizedException $e) { // Handle authentication error echo "Authentication failed: " . $e->getMessage(); } catch (AccountLockoutException $e) { // Handle account lockout echo "Account locked: " . $e->getMessage(); } catch (VerificationCodeException $e) { // Handle verification code issues echo "Verification code error: " . $e->getMessage(); } catch (AppleException $e) { // Handle general Apple API errors echo "Apple API error: " . $e->getMessage(); }
License
This package is open-sourced software licensed under the MIT license.