Added TransactionPartner object
This commit is contained in:
parent
07140aa08f
commit
eef9ab5624
6 changed files with 285 additions and 0 deletions
11
src/TgBotLib/Enums/Types/TransactionPartnerType.php
Normal file
11
src/TgBotLib/Enums/Types/TransactionPartnerType.php
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Enums\Types;
|
||||
|
||||
enum TransactionPartnerType : string
|
||||
{
|
||||
case USER = 'user';
|
||||
case FRAGMENT = 'fragment';
|
||||
case TELEGRAM_ADS = 'telegram_ads';
|
||||
case OTHER = 'other';
|
||||
}
|
56
src/TgBotLib/Objects/Payments/TransactionPartner.php
Normal file
56
src/TgBotLib/Objects/Payments/TransactionPartner.php
Normal file
|
@ -0,0 +1,56 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Objects\Payments;
|
||||
|
||||
use InvalidArgumentException;
|
||||
use TgBotLib\Enums\Types\TransactionPartnerType;
|
||||
use TgBotLib\Interfaces\ObjectTypeInterface;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerFragment;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerOther;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerTelegramAds;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner\TransactionPartnerUser;
|
||||
|
||||
abstract class TransactionPartner implements ObjectTypeInterface
|
||||
{
|
||||
protected TransactionPartnerType $type;
|
||||
|
||||
/**
|
||||
* Returns the TransactionPartnerType
|
||||
*
|
||||
* @return TransactionPartnerType
|
||||
*/
|
||||
public function getType(): TransactionPartnerType
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public abstract function toArray(): ?array;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(?array $data): ?TransactionPartner
|
||||
{
|
||||
if($data === null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if(!isset($data['type']))
|
||||
{
|
||||
throw new InvalidArgumentException('type is not provided');
|
||||
}
|
||||
|
||||
return match(TransactionPartnerType::tryFrom($data['type']))
|
||||
{
|
||||
TransactionPartnerType::USER => TransactionPartnerUser::fromArray($data),
|
||||
TransactionPartnerType::FRAGMENT => TransactionPartnerFragment::fromArray($data),
|
||||
TransactionPartnerType::TELEGRAM_ADS => TransactionPartnerTelegramAds::fromArray($data),
|
||||
TransactionPartnerType::OTHER => TransactionPartnerOther::fromArray($data),
|
||||
default => throw new InvalidArgumentException('Unknown TransactionPartnerType')
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Objects\Payments\TransactionPartner;
|
||||
|
||||
use TgBotLib\Enums\Types\TransactionPartnerType;
|
||||
use TgBotLib\Interfaces\ObjectTypeInterface;
|
||||
use TgBotLib\Objects\Payments\RevenueWithdrawalState;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner;
|
||||
|
||||
class TransactionPartnerFragment extends TransactionPartner implements ObjectTypeInterface
|
||||
{
|
||||
private ?RevenueWithdrawalState $withdrawal_state;
|
||||
|
||||
/**
|
||||
* Optional. State of the transaction if the transaction is outgoing
|
||||
*
|
||||
* @return RevenueWithdrawalState|null
|
||||
*/
|
||||
public function getWithdrawalState(): ?RevenueWithdrawalState
|
||||
{
|
||||
return $this->withdrawal_state;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): ?array
|
||||
{
|
||||
return [
|
||||
'type' => $this->type->value,
|
||||
'withdrawal_state' => $this->withdrawal_state?->toArray(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(?array $data): ?TransactionPartnerFragment
|
||||
{
|
||||
if ($data === null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$instance = new self();
|
||||
$instance->type = TransactionPartnerType::FRAGMENT;
|
||||
$instance->withdrawal_state = isset($data['withdrawal_state']) ? RevenueWithdrawalState::fromArray($data['withdrawal_state']) : null;
|
||||
|
||||
return $instance;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Objects\Payments\TransactionPartner;
|
||||
|
||||
use TgBotLib\Enums\Types\TransactionPartnerType;
|
||||
use TgBotLib\Interfaces\ObjectTypeInterface;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner;
|
||||
|
||||
class TransactionPartnerOther extends TransactionPartner implements ObjectTypeInterface
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): ?array
|
||||
{
|
||||
return [
|
||||
'type' => $this->type->value,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(?array $data): ?TransactionPartnerOther
|
||||
{
|
||||
if ($data === null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$instance = new self();
|
||||
$instance->type = TransactionPartnerType::OTHER;
|
||||
|
||||
return $instance;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Objects\Payments\TransactionPartner;
|
||||
|
||||
use TgBotLib\Enums\Types\TransactionPartnerType;
|
||||
use TgBotLib\Interfaces\ObjectTypeInterface;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner;
|
||||
|
||||
class TransactionPartnerTelegramAds extends TransactionPartner implements ObjectTypeInterface
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): ?array
|
||||
{
|
||||
return [
|
||||
'type' => $this->type->value,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(?array $data): ?TransactionPartnerTelegramAds
|
||||
{
|
||||
if ($data === null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$instance = new self();
|
||||
$instance->type = TransactionPartnerType::TELEGRAM_ADS;
|
||||
|
||||
return $instance;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
<?php
|
||||
|
||||
namespace TgBotLib\Objects\Payments\TransactionPartner;
|
||||
|
||||
use TgBotLib\Enums\Types\TransactionPartnerType;
|
||||
use TgBotLib\Interfaces\ObjectTypeInterface;
|
||||
use TgBotLib\Objects\PaidMedia;
|
||||
use TgBotLib\Objects\Payments\TransactionPartner;
|
||||
use TgBotLib\Objects\User;
|
||||
|
||||
class TransactionPartnerUser extends TransactionPartner implements ObjectTypeInterface
|
||||
{
|
||||
private User $user;
|
||||
private ?string $invoice_payload;
|
||||
/**
|
||||
* @var PaidMedia[]|null
|
||||
*/
|
||||
private ?array $paid_media;
|
||||
private ?string $paid_media_payload;
|
||||
|
||||
/**
|
||||
* Information about the user
|
||||
*
|
||||
* @return User
|
||||
*/
|
||||
public function getUser(): User
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Optional. Bot-specified invoice payload
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getInvoicePayload(): ?string
|
||||
{
|
||||
return $this->invoice_payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* Optional. Information about the paid media bought by the user
|
||||
*
|
||||
* @return PaidMedia[]|null
|
||||
*/
|
||||
public function getPaidMedia(): ?array
|
||||
{
|
||||
return $this->paid_media;
|
||||
}
|
||||
|
||||
/**
|
||||
* Optional. Bot-specified paid media payload
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getPaidMediaPayload(): ?string
|
||||
{
|
||||
return $this->paid_media_payload;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function toArray(): ?array
|
||||
{
|
||||
return [
|
||||
'type' => $this->type->value,
|
||||
'user' => $this->user?->toArray(),
|
||||
'invoice_payload' => $this->invoice_payload,
|
||||
'paid_media' => is_null($this->paid_media) ? null : array_map(fn(PaidMedia $item) => $item->toArray(), $this->paid_media),
|
||||
'paid_media_payload' => $this->paid_media_payload,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public static function fromArray(?array $data): ?TransactionPartnerUser
|
||||
{
|
||||
if (is_null($data))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
$object = new self();
|
||||
$object->type = TransactionPartnerType::USER;
|
||||
$object->user = User::fromArray($data['user']);
|
||||
$object->invoice_payload = $data['invoice_payload'] ?? null;
|
||||
$object->paid_media = is_null($data['paid_media']) ? null : array_map(fn($item) => PaidMedia::fromArray($item), $data['paid_media']);
|
||||
$object->paid_media_payload = $data['paid_media_payload'] ?? null;
|
||||
|
||||
return $object;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue