فهرست مستندات پروژه
HTTP و لاگگیری
پرداخت با کلاینتهای HTTP و SOAP داخلی ارائه میشود، اما هر لایه انتقال قابل تعویض است.
اینترفیس HttpClient
namespace Eram\Pardakht\Http;
interface HttpClient
{
public function postJson(string $url, string $body, array $headers = []): HttpResponse;
}
قرارداد تکمتدی، ساخت آداپتور برای هر کتابخانه HTTP را بسیار آسان میکند.
پیشفرض: CurlHttpClient
کلاینت پیشفرض مستقیماً از ext-curl استفاده میکند. نیازی به پیکربندی نیست:
$pardakht = new Pardakht(); // بهطور پیشفرض از CurlHttpClient استفاده میکند
مثال آداپتور سفارشی
use Eram\Pardakht\Http\HttpClient;
use Eram\Pardakht\Http\HttpResponse;
use Eram\Pardakht\Exception\ConnectionException;
class SymfonyHttpClientAdapter implements HttpClient
{
public function __construct(
private \Symfony\Contracts\HttpClient\HttpClientInterface $client,
) {}
public function postJson(string $url, string $body, array $headers = []): HttpResponse
{
try {
$response = $this->client->request('POST', $url, [
'body' => $body,
'headers' => array_merge(
['Content-Type' => 'application/json'],
$headers,
),
]);
return new HttpResponse(
statusCode: $response->getStatusCode(),
body: $response->getContent(false),
headers: array_change_key_case(
array_map(fn ($v) => $v[0] ?? '', $response->getHeaders(false)),
),
);
} catch (\Throwable $e) {
throw new ConnectionException($e->getMessage(), 0, $e);
}
}
}
HttpResponse
final class HttpResponse
{
public int $statusCode;
public string $body;
public array $headers; // کلیدها با حروف کوچک
public function header(string $name): ?string;
public function isSuccessful(): bool; // وضعیت 2xx
}
اینترفیس Logger
namespace Eram\Pardakht\Http;
interface Logger
{
public function debug(string $message, array $context = []): void;
}
فقط سطح debug استفاده میشود. درگاهها هنگام ارسال درخواست، URL و نام درگاه را لاگ میکنند که برای ردیابی فراخوانیهای HTTP و SOAP در محیط توسعه مفید است.
پیشفرض: NullLogger
لاگر پیشفرض تمام پیامها را دور میریزد:
$pardakht = new Pardakht(); // بهطور پیشفرض از NullLogger استفاده میکند
مثال آداپتور PSR-3
use Eram\Pardakht\Http\Logger;
use Psr\Log\LoggerInterface;
class PsrLoggerAdapter implements Logger
{
public function __construct(private LoggerInterface $logger) {}
public function debug(string $message, array $context = []): void
{
$this->logger->debug($message, $context);
}
}
SoapClientFactory
درگاههای مبتنی بر SOAP (ملت، سامان، پارسیان) به نمونه \SoapClient نیاز دارند. SoapClientFactory داخلی آبجکتهای استاندارد \SoapClient میسازد. میتوانید آن را جایگزین کنید تا تنظیمات SOAP را شخصیسازی کنید یا یک ماک تزریق کنید:
use Eram\Pardakht\Http\SoapClientFactory;
$pardakht = new Pardakht(soapFactory: new SoapClientFactory());
تزریق وابستگیها
$pardakht = new Pardakht(
httpClient: new GuzzleHttpClient(),
logger: new PsrLoggerAdapter($psrLogger),
eventDispatcher: new MyEventDispatcher(),
soapFactory: new SoapClientFactory(),
);
تمام پارامترها اختیاری هستند و به هر ترکیبی قابل استفادهاند.
⁅پرداخت با کلاینت http و soap داخلی ارایه شد اما هر لایه انتقال قابل تعویض است namespace eram pardakht http interface httpclient public function postjson string url string body array headers httpresponse قرارداد تکمتدی تک متدی ساخت آداپتور اداپتور برای هر کتابخانه http را بسیار آسان اسان کرد کلاینت پیشفرض پیش فرض مستقیما از ext curl استفاد کرد نیازی به پیکربندی نیست pardakht new pardakht بهطور به طور پیشفرض پیش فرض از curlhttpclient استفاد کرد use eram pardakht http httpclient use eram pardakht http httpresponse use eram pardakht exception connectionexception class symfonyhttpclientadapter implements httpclient public function construct private symfony contracts httpclient httpclientinterface client public function postjson string url string body array headers httpresponse try response this client request post url body body headers array merge content type application json headers return new httpresponse statuscode response getstatuscode body response getcontent false headers array change key case array map fn v v 0 response getheaders false catch throwable e throw new connectionexception e getmessage 0 e final class httpresponse public int statuscode public string body public array headers کلید با حرف کوچک public function header string name string public function issuccessful bool وضعیت 2xx namespace eram pardakht http interface logger public function debug string message array context void فقط سطح debug استفاد شد درگاه هنگا ارسال درخواست url و نام درگاه را لاگ کرد که برای ردیابی فراخوانی http و soap در محیط توسعه مفید است لاگر پیشفرض پیش فرض تما پیام را دور ریخت pardakht new pardakht بهطور به طور پیشفرض پیش فرض از nulllogger استفاد کرد use eram pardakht http logger use psr log loggerinterface class psrloggeradapter implements logger public function construct private loggerinterface logger public function debug string message array context void this logger debug message context درگاه مبتنی بر soap ملت سام پارس به نمونه soapclient نیاز داشت soapclientfactory داخلی آبجکت ابجکت استاندارد soapclient ساخت توانست آن ان را جایگزین کرد تا تنظ soap را شخصیسازی شخصی سازی کرد یا یک ماک تزریق کرد use eram pardakht http soapclientfactory pardakht new pardakht soapfactory new soapclientfactory pardakht new pardakht httpclient new guzzlehttpclient logger new psrloggeradapter psrlogger eventdispatcher new myeventdispatcher soapfactory new soapclientfactory تما پارامتر اختیاری هستند و به هر ترکیبی قابل استفاد⁆
⁅http و لاگگیری لاگ گیری⁆
⁅اینترفیس httpclienthttpresponseاینترفیس loggersoapclientfactoryتزریق وابستگی⁆
⁅پیشفرض پیش فرض curlhttpclientمثال آداپتور اداپتور سفارشیپیشفرض سفارشیپی فرض nullloggerمثال آداپتور اداپتور psr 3⁆