forked from nomansheikh/xact-sdk-php
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClient.php
129 lines (102 loc) · 4.02 KB
/
Client.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
namespace Xact;
use GuzzleHttp\Client as GuzzleClient;
use GuzzleHttp\RequestOptions;
use Psr\Http\Message\ResponseInterface;
use Xact\Models\CreateNFTDto;
use Xact\Models\PaymentDto;
use Xact\Models\ScopeEnum;
use Xact\Models\TokenAssociateDto;
use Xact\Models\TokenTransferDto;
use Xact\Models\SellNFTDto;
use Xact\Models\DeleteNFTDto;
use Xact\Models\BuyNFTDto;
use Xact\Models\RefreshAccountDTO;
class Client
{
private GuzzleClient $api;
public function __construct(string $apiKey, string $baseUri = 'https://api.xact.ac/v1')
{
$this->api = new GuzzleClient([
'base_uri' => $baseUri,
RequestOptions::HEADERS => [
'Authorization' => "X-API-KEY: $apiKey",
],
]);
}
public function generateQRCode(
string $uniqId,
string $webhookUrl,
array $scope = [ScopeEnum::PROFILE]
): ResponseInterface
{
$payload = (array) $scope;
$payload['uniqId'] = $uniqId;
$payload['webhook'] = $webhookUrl;
return $this->api->post('/xact/getQRCode', ['json' => $payload]);
}
public function getXactFeesPayment(float $hbarAmount, bool $supportXact = false): ResponseInterface
{
return $this->api->get("/xact/fees/payment?amount=$hbarAmount&support=$supportXact");
}
public function pay(PaymentDto $paymentDto, string $webhookUrl): ResponseInterface
{
$payload = (array) $paymentDto;
$payload['webhook'] = $webhookUrl;
return $this->api->post('/xact/pay', ['json' => $payload]);
}
public function associate(TokenAssociateDto $tokenAssociationDto, string $webhookUrl): ResponseInterface
{
$payload = (array) $tokenAssociationDto;
$payload['webhook'] = $webhookUrl;
return $this->api->post('/xact/associate-token', ['json' => $payload]);
}
public function getXactFeesTransfer(): ResponseInterface
{
return $this->api->get('/xact/fees/transfer-token');
}
public function transfer(TokenTransferDto $tokenTransferDto, string $webhookUrl): ResponseInterface
{
$payload = (array) $tokenTransferDto;
$payload['webhook'] = $webhookUrl;
return $this->api->post('/xact/transfer-token', ['json' => $payload]);
}
public function getXactFeesCreateNFT(): ResponseInterface
{
return $this->api->get('/xact/fees/create-token');
}
public function createNFT(CreateNFTDto $createNFTDto, string $webhookUrl): ResponseInterface
{
$payload = (array) $createNFTDto;
$payload['webhook'] = $webhookUrl;
return $this->api->post('/xact/create-nft', ['json' => $payload]);
}
public function sellNFT(SellNFTDto $sellNFTDto, string $webhookUrl): ResponseInterface
{
$payload = (array) $sellNFTDto;
$payload['webhook'] = $webhookUrl;
return $this->api->post('/xact/sell-nft', ['json' => $payload]);
}
public function deleteNFTFromSale(DeleteNFTDto $deleteNFTDto, string $webhookUrl): ResponseInterface
{
$payload = (array) $deleteNFTDto;
$payload['webhook'] = $webhookUrl;
return $this->api->post("/xact/delete-sell-nft/${$deleteNFTDto['tokenId']}", ['json' => $payload]);
}
public function buyNFT(BuyNFTDto $buyNFTDto, string $webhookUrl): ResponseInterface
{
$payload = (array) $buyNFTDto;
$payload['webhook'] = $webhookUrl;
return $this->api->post("/xact/buy-nft/${$buyNFTDto['tokenId']}", ['json' => $payload]);
}
public function refreshAccount(RefreshAccountDTO $refreshAccount): ResponseInterface
{
$payload = (array) $refreshAccount;
$payload['scope'] = $payload['scope'] ?: [ScopeEnum::PROFILE];
return $this->api->post('/xact/sdk/refresh', ['json' => $payload]);
}
public function getNFTForSaleByTokenId(GetNFTDTO $getNFTDto): ResponseInterface
{
return $this->api->get("/xact/sdk/nft-for-sale?tokenId=${$getNFTDto['tokenId']}&sellerAccountId=${$getNFTDto['sellerAccountId']}&nftId=${$getNFTDto['nftId']}");
}
}