thisispiers/acloud

Apple iCloud服务的非官方PHP客户端

0.1.0 2023-03-22 12:43 UTC

This package is auto-updated.

Last update: 2024-09-22 15:59:28 UTC


README

Apple iCloud服务的非官方PHP客户端。

Apple和iCloud是Apple Inc.的商标。

欢迎提交拉取请求以添加对服务的支持。

安装

composer require thisispiers/acloud

使用方法

用于登录的令牌和Cookies存储在传递给Session构造函数的第一个参数指定的文件路径中。如果您需要覆盖此功能,请传递null或空字符串,并使用getState()getHttpCookieJar()

如果登录需要验证码,则signIn()将返回字符串"MFA"或发送验证码的加密电话号码。从用户处获取验证码并将其传递给verifyMFACode()

在调用signIn()verifyMFACode()后,请务必检查isSignedIn()

以下是一个基本示例

<?php

require __DIR__ . '/vendor/autoload.php';

$acloud = new \thisispiers\Acloud\Session(__DIR__ . '/session');
if (!$acloud->isSignedIn()) {
    if (empty($_POST)) {
?>
<form method="POST">
    <p>Username: <input type="text" name="username"></p>
    <p>Password: <input type="password" name="password"></p>
    <button type="submit">Sign in</button>
</form>
<?php
    } else if (isset($_POST['username']) && isset($_POST['password'])) {
        $result = $acloud->signIn($_POST['username'], $_POST['password']);
        if ($signIn !== true) {
            if ($signIn === 'MFA') {
                echo '<p>Verification code sent to your device(s)</p>';
            } else {
                echo '<p>Verification code sent to ' . htmlspecialchars($signIn) . '</p>';
            }
?>
<form method="POST">
    Verification code: <input type="text" inputmode="numeric" name="verificationCode">
    <button type="submit">Sign in</button>
</form>
<?php
        }
    } else if (isset($_POST['verificationCode'])) {
        $acloud->verifyMFACode($_POST['verificationCode']);
        if (!$acloud->isSignedIn()) {
            echo '<p>Verification code invalid. Please try again.</p>';
        }
    }
}

if ($acloud->isSignedIn()) {
    $contacts = new \thisispiers\Acloud\Contacts($acloud);
    $allContacts = $contacts->list();
}

API

class Session
{
    public function __construct(?string $path = '');

    public function getHttpCookieJar(): \GuzzleHttp\Cookie\CookieJarInterface;

    public function loadState(?string $path = ''): bool;

    public function saveState(): bool;

    public function getState(): array;

    public function isSignedIn(): bool;

    public function signIn(string $username, string $password): true|string;

    public function sendMFACodeSMS(): false|string;

    public function verifyMFACode(string $code): bool;
}

登录成功后,将Session对象传递给服务类构造函数。

class Contacts
{
    public function __construct(Session $session);

    public function list(): array;

    public function create(array $contacts): true;

    public function update(array $contacts): true;

    public function delete(array $contacts): true;
}

阅读源代码以了解可能抛出的异常。

感谢

基于以下存储库