Skip to content
47 changes: 47 additions & 0 deletions examples/AccountsApi/AccountsApiExample.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public function __construct()
public function runAllExamples()
{
$this
->createMerchant()
->createAccount()
->getAccounts()
->getCategories()
Expand Down Expand Up @@ -105,6 +106,15 @@ public function createAccount()
return $this;
}

public function createMerchant()
{
$merchantConfig = $this->getNewMerchantConfig();
$newMerchant = $this->TpayApi->accounts()->createMerchant($merchantConfig);
var_dump($newMerchant);

return $this;
}

private function getNewAccountConfig()
{
$offerCode = 'PTON8';
Expand Down Expand Up @@ -148,6 +158,43 @@ private function getNewAccountConfig()
'notifyByEmail' => true,
];
}

private function getNewMerchantConfig()
{
$offerCode = 'PTON8';
$pos = [
'name' => 'Przykladowe Zakupy Online',
'url' => 'https://przykladowezakupy.pl',
];
$address1 = [
'name' => 'Example Sp. z o.o.',
'street' => 'Ul. Jelenia',
'houseNumber' => '123',
'postalCode' => '54-134',
'city' => 'Warszawa',
'country' => 'PL',
'isInvoice' => true,
'isMain' => true,
'isCorrespondence' => true,
];
$contactPerson = [
'name' => 'Jan',
'surname' => 'Kowalski',
'phone' => '(0) 111222333',
'email' => 'jan.kowalski@example.com',
];

return [
'offerCode' => $offerCode,
'email' => 'merchant@example.com',
'taxId' => '7773061579',
'legalForm' => 3,
'categoryId' => 62,
'website' => [$pos],
'address' => [$address1],
'contactPerson' => [$contactPerson],
];
}
}

(new AccountsApiExample())->runAllExamples();
15 changes: 14 additions & 1 deletion src/Api/Accounts/AccountsApi.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

use Tpay\OpenApi\Api\ApiAction;
use Tpay\OpenApi\Model\Objects\RequestBody\Account;
use Tpay\OpenApi\Model\Objects\RequestBody\Merchant;

class AccountsApi extends ApiAction
{
Expand Down Expand Up @@ -60,12 +61,24 @@ public function getBalanceByAccountId($accountId)
return $this->run(static::GET, sprintf('/accounts/%s/balance', $accountId));
}

/** @param array $fields */
/**
* @deprecated Use createMerchant() instead
*
* @param array $fields
*/
public function createAccount($fields)
{
trigger_error(sprintf('Method %s is deprecated.', __METHOD__), E_USER_DEPRECATED);

return $this->run(static::POST, '/accounts', $fields, new Account());
}

/** @param array $fields */
public function createMerchant($fields)
{
return $this->run(static::POST, '/v1/accounts/merchant', $fields, new Merchant());
}

public function getMcc()
{
return $this->run(static::GET, '/accounts/mcc');
Expand Down
56 changes: 56 additions & 0 deletions src/Factory/ArrayObjectFactory.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<?php

namespace Tpay\OpenApi\Factory;

use InvalidArgumentException;
use Tpay\OpenApi\Model\Objects\Accounts\Address as AccountAddress;
use Tpay\OpenApi\Model\Objects\Accounts\Person;
use Tpay\OpenApi\Model\Objects\Accounts\PointOfSale as AccountPointOfSale;
use Tpay\OpenApi\Model\Objects\Merchant\Address as MerchantAddress;
use Tpay\OpenApi\Model\Objects\Merchant\ContactPerson;
use Tpay\OpenApi\Model\Objects\Merchant\PointOfSale as MerchantPointOfSale;
use Tpay\OpenApi\Model\Objects\Objects;
use Tpay\OpenApi\Model\Objects\RequestBody\Account;
use Tpay\OpenApi\Model\Objects\RequestBody\Merchant;

class ArrayObjectFactory
{
public function create($fieldName, $parentObject)
{
if (!$parentObject instanceof Objects) {
throw new InvalidArgumentException(sprintf(
'Parent object must extend %s, got %s',
Objects::class,
is_object($parentObject) ? get_class($parentObject) : gettype($parentObject)
));
}

if ($parentObject instanceof Merchant) {
switch ($fieldName) {
case 'address':
return new MerchantAddress();
case 'website':
return new MerchantPointOfSale();
case 'contactPerson':
return new ContactPerson();
default:
throw new InvalidArgumentException(sprintf('Unsupported field "%s" in %s', $fieldName, $parentObject->getName()));
}
}

if ($parentObject instanceof Account) {
switch ($fieldName) {
case 'address':
return new AccountAddress();
case 'website':
return new AccountPointOfSale();
case 'person':
return new Person();
default:
throw new InvalidArgumentException(sprintf('Unsupported field "%s" in %s', $fieldName, $parentObject->getName()));
}
}

throw new InvalidArgumentException(sprintf('Field %s as array is not supported in %s object', $fieldName, $parentObject->getName()));
}
}
1 change: 1 addition & 0 deletions src/Manager/Manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public function setFields($fields, $strictCheck = true)
$this->requestBody->strictCheck = $strictCheck;
$this->requestBody->setObjectValues($this->requestBody, $fields);
$this->ObjectsValidator->isSetRequiredFields($this->requestBody);
$this->ObjectsValidator->checkUniqueFields($this->requestBody);

return $this;
}
Expand Down
15 changes: 15 additions & 0 deletions src/Model/Fields/Address/FlatNumber.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Tpay\OpenApi\Model\Fields\Address;

use Tpay\OpenApi\Model\Fields\Field;

/**
* @method getValue(): string
*/
class FlatNumber extends Field
{
protected $name = __CLASS__;
protected $type = self::STRING;
protected $maxLength = 10;
}
15 changes: 15 additions & 0 deletions src/Model/Fields/PersonContact/Email.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Tpay\OpenApi\Model\Fields\PersonContact;

use Tpay\OpenApi\Model\Fields\Field;

/**
* @method getValue(): string
*/
class Email extends Field
{
protected $type = self::STRING;
protected $name = __CLASS__;
protected $maxLength = 255;
}
15 changes: 15 additions & 0 deletions src/Model/Fields/PersonContact/Phone.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?php

namespace Tpay\OpenApi\Model\Fields\PersonContact;

use Tpay\OpenApi\Model\Fields\Field;

/**
* @method getValue(): string
*/
class Phone extends Field
{
protected $name = __CLASS__;
protected $type = self::STRING;
protected $maxLength = 30;
}
8 changes: 4 additions & 4 deletions src/Model/Objects/Accounts/Address.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ class Address extends Objects
'country' => Country::class,
'friendlyName' => FriendlyName::class,
'houseNumber' => HouseNumber::class,
'roomNumber' => RoomNumber::class,
'isCorrespondence' => IsCorrespondence::class,
'isInvoice' => IsInvoice::class,
'isMain' => IsMain::class,
'name' => Name::class,
'phone' => Phone::class,
'postalCode' => PostalCode::class,
'roomNumber' => RoomNumber::class,
'street' => Street::class,
];

Expand All @@ -45,6 +45,9 @@ class Address extends Objects
/** @var HouseNumber */
public $houseNumber;

/** @var RoomNumber */
public $roomNumber;

/** @var IsCorrespondence */
public $isCorrespondence;

Expand All @@ -63,9 +66,6 @@ class Address extends Objects
/** @var PostalCode */
public $postalCode;

/** @var RoomNumber */
public $roomNumber;

/** @var Street */
public $street;

Expand Down
12 changes: 6 additions & 6 deletions src/Model/Objects/Accounts/PointOfSale.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,18 +35,18 @@ class PointOfSale extends Objects
/** @var Name */
public $name;

/** @var PointOfSaleDate */
public $date;

/** @var PointOfSaleSettings */
public $settings;

/** @var Url */
public $url;

/** @var Description */
public $description;

/** @var PointOfSaleDate */
public $date;

/** @var PointOfSaleSettings */
public $settings;

public function getRequiredFields()
{
return [
Expand Down
78 changes: 78 additions & 0 deletions src/Model/Objects/Merchant/Address.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
<?php

namespace Tpay\OpenApi\Model\Objects\Merchant;

use Tpay\OpenApi\Model\Fields\Address\City;
use Tpay\OpenApi\Model\Fields\Address\Country;
use Tpay\OpenApi\Model\Fields\Address\FlatNumber;
use Tpay\OpenApi\Model\Fields\Address\HouseNumber;
use Tpay\OpenApi\Model\Fields\Address\IsCorrespondence;
use Tpay\OpenApi\Model\Fields\Address\IsInvoice;
use Tpay\OpenApi\Model\Fields\Address\IsMain;
use Tpay\OpenApi\Model\Fields\Address\Name;
use Tpay\OpenApi\Model\Fields\Address\Phone;
use Tpay\OpenApi\Model\Fields\Address\PostalCode;
use Tpay\OpenApi\Model\Fields\Address\Street;
use Tpay\OpenApi\Model\Objects\Objects;

class Address extends Objects
{
const OBJECT_FIELDS = [
'city' => City::class,
'country' => Country::class,
'houseNumber' => HouseNumber::class,
'flatNumber' => FlatNumber::class,
'isCorrespondence' => IsCorrespondence::class,
'isInvoice' => IsInvoice::class,
'isMain' => IsMain::class,
'name' => Name::class,
'phone' => Phone::class,
'postalCode' => PostalCode::class,
'street' => Street::class,
];

/** @var City */
public $city;

/** @var Country */
public $country;

/** @var HouseNumber */
public $houseNumber;

/** @var FlatNumber */
public $flatNumber;

/** @var IsCorrespondence */
public $isCorrespondence;

/** @var IsInvoice */
public $isInvoice;

/** @var IsMain */
public $isMain;

/** @var Name */
public $name;

/** @var Phone */
public $phone;

/** @var PostalCode */
public $postalCode;

/** @var Street */
public $street;

public function getRequiredFields()
{
return [
$this->name,
$this->street,
$this->houseNumber,
$this->postalCode,
$this->city,
$this->country,
];
}
}
31 changes: 31 additions & 0 deletions src/Model/Objects/Merchant/ContactPerson.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace Tpay\OpenApi\Model\Objects\Merchant;

use Tpay\OpenApi\Model\Fields\Person\Name;
use Tpay\OpenApi\Model\Fields\Person\Surname;
use Tpay\OpenApi\Model\Fields\PersonContact\Email;
use Tpay\OpenApi\Model\Fields\PersonContact\Phone;
use Tpay\OpenApi\Model\Objects\Objects;

class ContactPerson extends Objects
{
const OBJECT_FIELDS = [
'name' => Name::class,
'surname' => Surname::class,
'phone' => Phone::class,
'email' => Email::class,
];

/** @var Name */
public $name;

/** @var Surname */
public $surname;

/** @var Phone */
public $phone;

/** @var Email */
public $email;
}
Loading