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