کمکیها و ثابتها
آنچه بسته جز متدهای کلاینت تعریف میکند.
متدهای ایستا
| متد | چیست |
|---|---|
| OpenEmail::init(), OpenEmail::getClient() | کلاینت مشترک را یک بار پیکربندی کنید، سپس از هر جا به آن دسترسی داشته باشید. اگر init هرگز اجرا نشده باشد، getClient() یکی را از محیط میسازد. |
| OpenEmail::resetClient() | کلاینت مشترک را کنار میگذارد، پس getClient() بعدی یک کلاینت تازه میسازد، که همان چیزی است که یک آزمون میان موردهایش میخواهد. |
| new OpenEmail()، OpenEmail::createClient() | یک کلاینت جداگانه. هر دو هر چیزی را که ندهید از محیط میخوانند. |
| OpenEmail::createTempMail() | کلاینتی برای صندوقهای یکبارمصرف که هیچ کلید API حمل نمیکند. |
| OpenEmail::verifyWebhookSignature() | امضای یک تحویل را در زمان ثابت بررسی میکند، با پنجرهٔ بازپخش پنجدقیقهای که toleranceSeconds: آن را تغییر میدهد. رویداد دیکدشده را برمیگرداند، و در هر شکستی WebhookSignatureException را پرتاب میکند. |
| OpenEmail::toBase64() | Base64 برای بایتهای پیوست، از یک رشته، یک منبع stream، یک SplFileInfo یا یک stream از نوع PSR-7. |
| OpenEmail::isApiKey() | اینکه آیا یک مقدار شکل oe_live_ یا oe_test_ را دارد. بررسی شکل است، نه اثبات اینکه کلید هنوز کار میکند. |
| OpenEmail::isAccessToken() | اینکه آیا یک مقدار شکل یک توکن دسترسی OAuth را دارد: 1 تا 512 نویسه، که با oe_ آغاز نمیشود. |
| OpenEmail::isSealed() | اینکه آیا بدنهٔ یک پیام متن رمز است. برای دو قالب امضاشده که بدنهشان آشکار رسیده false است. |
| OpenEmail::resolveLanguage()، OpenEmail::languageByCode()، OpenEmail::isRtlLanguage() | جستوجوهایی که یک انتخابگر زبان لازم دارد، روی جدول همراهِ Languages::ALL. |
| $client->close() | هندل cURL کلاینت و اتصال پشت آن را آزاد میکند. کلاینتی که دیگر به آن ارجاعی نیست، وقتی PHP آن را آزاد میکند همین کار را میکند. |
ثابتها
هر مجموعهمقداری که SDK TypeScript صادر میکند یک کلاس final در OpenEmail\Constants است، با یک ثابت برای هر عضو با همان نامها، پس WebhookEvents::EMAIL_DELIVERED برابر email.delivered است. values() کل مجموعه را برمیگرداند، و راه بررسی مقداری که از بیرون آمده هم همین است.
use OpenEmail\Constants\ApiScopes;use OpenEmail\Constants\PageLimits;use OpenEmail\Constants\WebhookEvents; $events = WebhookEvents::values(); $scopes = [ApiScopes::EMAILS_SEND, ApiScopes::THREADS_READ]; $known = in_array('email.delivered', $events, true); echo count($events), ' ', implode(',', $scopes), ' ', PageLimits::MAX_LIMIT, ' ', $known ? 'known' : 'unknown', PHP_EOL;| ثابت | محتوای آن |
|---|---|
| OpenEmail::VERSION | نسخهٔ پکیج. |
| ApiScopes | واژگان اسکوپها، برای صفحهٔ ساخت کلید. |
| WebhookEvents, WebhookSignatureHeaders | رویدادهایی که یک اندپوینت میتواند مشترکشان شود، و نام هدرهایی که یک تحویل با خود دارد. |
| ErrorTypes | واژگان خطا که ApiException::$type از آن مقدار میگیرد. |
| PageLimits | بزرگترین و پیشفرضِ limit: در بیشتر فهرستهای صفحهبندیشده، MAX_LIMIT و DEFAULT_LIMIT: 100 و 25. چند فهرست بیشتر میپذیرند، و مرجع هر متد این را میگوید. |
| RuleFields, RuleOperators, RuleActions | واژگانی که شرطها و کنشهای یک قاعده از آن ساخته میشوند. |
| MessageEncryptionFormats | پنج پاکتی که فرایند دریافت میتواند نام ببرد. سهتای آنها مهرومومشدهاند. |
| CredentialKinds, StepUpMethods, StepUpErrorCodes | اینکه me->get و me->ping کدام اعتبارنامه را توصیف میکنند، کد تأیید هویت چگونه بررسی میشود، و کدهایی که یک تأیید ممکن است با آنها شکست بخورد. |
| ThreadSorts، PeopleSorts، FileSorts و دیگر *Sortsها | ترتیبهایی که یک فهرست میتواند بر اساس آنها مرتب شود. |
| FormStatuses، BroadcastStatuses، SuppressionReasons و دیگر مجموعهها | مقدارهایی که یک فیلد از یک منبع میتواند بگیرد. هر مجموعه به نام چیزی که در خود دارد نامگذاری شده است. |
| Languages::ALL | همهٔ زبانهایی که یک ارسال یا پیشنمایش ترجمهشده میپذیرد، همراه با کد، نامها و جهت نوشتارشان. |
شیءها
پاسخ، همان JSON دیکدشده به شکل یک آرایهٔ انجمنی است. بسته فقط جایی شیئی از آنِ خودش میسازد که به پاسخ شکل میدهد، و هرکدام در OpenEmail\Result قرار دارد، تغییرناپذیر است، و روی ردیفهایش IteratorAggregate و Countable است.
| کلاس | آنچه با خود دارد |
|---|---|
| Page | items، hasMore و nextCursor، از هر list صفحهبندیشده. |
| PeoplePage | همان بهعلاوهٔ seen، از contacts->listPeople. |
| TempMessagesPage | همان بهعلاوهٔ expiresAt، از tempMail->listMessages. |
| AddressBookPage, AddressBook | unrestricted، addresses و domains، از addresses->list (همراه با hasMore و nextCursor) و addresses->listAll. |
| BatchResult | items، sent و failed، از emails->sendBatch. |
| TemplateSends | items، total، page و pageSize، از templates->listSends. |
| OpenEmail\Http\HttpRequest, OpenEmail\Http\HttpResponse | آنچه یک httpClient: دریافت میکند و برمیگرداند. var_dump()، print_r() و json_encode() سرآیند Authorization یک درخواست را بهصورت [redacted] نشان میدهند، در حالی که var_export() و dump() در Symfony آن را همانطور که هست نشان میدهند. |
هر استثنایی که بسته پرتاب میکند OpenEmail\Exception\OpenEmailException را پیادهسازی میکند: ApiException و زیرکلاسهایش، NetworkException، WebhookSignatureException و InvalidArgumentException، که برای اشتباهی در خودِ فراخوانی پرتاب میشود نه برای چیزی که API گفته است.
اندپوینتی که این هنوز پوششش نمیدهد
یک انتشار بسته هرگز نباید چیزی باشد که میان شما و اندپوینتی که همین حالا کار میکند فاصله بیندازد. $client->raw->request() یک مسیر و آرگومانهای نامدار میگیرد و بدنهٔ دیکدشده را برمیگرداند، با اعمال اعتبارنامه، URL پایه، مهلت و سیاست تلاش دوبارهٔ کلاینت.
$result = $client->raw->request( '/labels', method: 'POST', query: ['dryRun' => true], body: ['name' => 'Invoices'], repeatable: true,); var_dump($result);یک GET مانند هر خواندن دیگری دوباره تلاش میشود. هر متد دیگری یک بار فرستاده میشود مگر آنکه repeatable: true بدهید، که یعنی شما تأیید میکنید دو بار فرستادنش بیاشکال است. query: مقدارهای null یا خالی را کنار میگذارد، و apiKey: همانطور کار میکند که در هر متد دیگری.
کارهایی که عمداً انجام نمیدهد
- هیچ بدنهٔ درخواستی را اعتبارسنجی نمیکند. اسکیمای سرور تنها نسخهٔ قواعد است، و نسخهٔ دومی در اینجا سرانجام نشانیای را که سرور تازهتر میپذیرد رد میکرد، در نسخهای که کسی دو سال پیش سنجاقش کرده.
- هیچ وابستگی زمان اجرا جز افزونههای curl و json ندارد. کلاینت PSR-18 یک گزینه است، هرگز یک الزام نیست.
- پاسخ را فقط به یک شکل تغییر میدهد: آرایهٔ
dataیک مجموعه از پاکتش بیرون کشیده میشود و در یکی از شیءهای بالا قرار میگیرد. هر پاسخ دیگری همانطور که API فرستاده، با کلیدهای camelCase در API، برمیگردد.
بررسی همخوانیِ بسته این را صادق نگه میدارد. وقتی یک متد TypeScript همتای PHP نداشته باشد، آرگومانهای متفاوتی بگیرد، یا درخواست متفاوتی بفرستد، بیلد را میشکند.