Skip to content

Commit de6a89f

Browse files
committed
feat: add support for subaccounts
1 parent 4c52d66 commit de6a89f

File tree

3 files changed

+130
-0
lines changed

3 files changed

+130
-0
lines changed

src/Paystack/Provider.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ public function transactions()
6666
return new Transactions($this->client);
6767
}
6868

69+
/**
70+
* Return paystack subaccounts instance
71+
*/
72+
public function subaccounts()
73+
{
74+
return new Subaccounts($this->client);
75+
}
76+
6977
/**
7078
* Return paystack accepted banks
7179
*/

src/Paystack/Subaccount.php

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace Leaf\Billing\Paystack;
4+
5+
/**
6+
* PayStack Subaccount
7+
* ----
8+
* API wrapper for PayStack Subaccount API
9+
*/
10+
class Subaccount
11+
{
12+
protected $data;
13+
14+
public function __construct(array $data)
15+
{
16+
$this->data = $data;
17+
}
18+
19+
public function toArray()
20+
{
21+
return $this->data;
22+
}
23+
24+
public function __get($name)
25+
{
26+
return $this->data[$name] ?? null;
27+
}
28+
29+
public function __set($name, $value)
30+
{
31+
$this->data[$name] = $value;
32+
}
33+
34+
public function __unset($name)
35+
{
36+
unset($this->data[$name]);
37+
}
38+
39+
public function __isset($name)
40+
{
41+
return isset($this->data[$name]);
42+
}
43+
}

src/Paystack/Subaccounts.php

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<?php
2+
3+
namespace Leaf\Billing\Paystack;
4+
5+
/**
6+
* PayStack Subaccounts
7+
* ----
8+
* API wrapper for PayStack Subaccounts API
9+
*/
10+
class Subaccounts
11+
{
12+
protected $client;
13+
14+
public function __construct($client)
15+
{
16+
$this->client = $client;
17+
}
18+
19+
/**
20+
* Create a new paystack subaccount
21+
*/
22+
public function create(array $params): Subaccount
23+
{
24+
$response = $this->client->post('/subaccount', [
25+
'body' => json_encode($params)
26+
]);
27+
28+
$subaccount = json_decode($response->getBody(), true);
29+
30+
return new Subaccount($subaccount['data']);
31+
}
32+
33+
/**
34+
* Get all paystack subaccounts
35+
*/
36+
public function all(): array
37+
{
38+
$response = $this->client->get('/subaccount');
39+
40+
$subaccounts = json_decode($response->getBody(), true);
41+
42+
return array_map(function ($subaccount) {
43+
return new Subaccount($subaccount);
44+
}, $subaccounts['data']);
45+
}
46+
47+
/**
48+
* Get a paystack subaccount by id
49+
*/
50+
public function get($id): Subaccount
51+
{
52+
$response = $this->client->get("/subaccount/$id");
53+
54+
$subaccount = json_decode($response->getBody(), true);
55+
56+
return new Subaccount($subaccount['data']);
57+
}
58+
59+
/**
60+
* Update a paystack subaccount
61+
*/
62+
public function update($id, array $params): Subaccount
63+
{
64+
$response = $this->client->put("/subaccount/$id", [
65+
'body' => json_encode($params)
66+
]);
67+
68+
$subaccount = json_decode($response->getBody(), true);
69+
70+
return new Subaccount($subaccount['data']);
71+
}
72+
73+
public function toArray()
74+
{
75+
return array_map(function ($subaccount) {
76+
return $subaccount->toArray();
77+
}, $this->all());
78+
}
79+
}

0 commit comments

Comments
 (0)