Skip to content

Commit

Permalink
feat: add capability endpoint (beta)
Browse files Browse the repository at this point in the history
  • Loading branch information
Naoray committed Feb 6, 2025
2 parents 349cf3e + dcf9563 commit c0c5fd6
Show file tree
Hide file tree
Showing 15 changed files with 446 additions and 0 deletions.
23 changes: 23 additions & 0 deletions examples/capabilities/get-capability.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

/*
* Get a capability using the Mollie API.
*/

try {
/*
* Initialize the Mollie API library with your OAuth access token.
*/
require "../initialize_with_oauth.php";

/*
* Get the capability with ID "cap_1234567890"
*
* See: https://docs.mollie.com/reference/v2/capabilities-api/get-capability
*/
$capability = $mollie->capabilities->get("payments");

echo $capability->name;
} catch (\Mollie\Api\Exceptions\ApiException $e) {
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
25 changes: 25 additions & 0 deletions examples/capabilities/list-capabilities.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php
/*
* Using access token to list capabilities of an account.
*/
try {
/*
* Initialize the Mollie API library with your OAuth access token.
*/
require "../initialize_with_oauth.php";

/*
* Get the all the capabilities for this account.
*/
$capabilities = $mollie->capabilities->list();

foreach ($capabilities as $capability) {
echo '<div style="line-height:40px; vertical-align:top">';
echo htmlspecialchars($capability->name) .
' - ' . htmlspecialchars($capability->status) .
' (' . htmlspecialchars($capability->name) . ')';
echo '</div>';
}
} catch (\Mollie\Api\Exceptions\ApiException $e) {
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
10 changes: 10 additions & 0 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@ parameters:
message: '#^Variable \$mollie might not be defined\.$#'
identifier: variable.undefined
count: 1
path: examples/capabilities/get-capability.php

-
message: "#^Variable \\$mollie might not be defined\\.$#"
count: 1
path: examples/capabilities/list-capabilities.php

-
message: "#^Variable \\$mollie might not be defined\\.$#"
count: 1
path: examples/captures/create-capture.php

-
Expand Down
36 changes: 36 additions & 0 deletions src/EndpointCollection/CapabilityEndpointCollection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?php

namespace Mollie\Api\EndpointCollection;

use Mollie\Api\Exceptions\RequestException;
use Mollie\Api\Http\Requests\GetCapabilityRequest;
use Mollie\Api\Http\Requests\ListCapabilitiesRequest;
use Mollie\Api\Resources\Capability;
use Mollie\Api\Resources\CapabilityCollection;

class CapabilityEndpointCollection extends EndpointCollection
{
/**
* Retrieve a single Permission from Mollie.
*
* Will throw an ApiException if the permission id is invalid.
*
* @throws RequestException
*/
public function get(string $name): Capability
{
/** @var Capability */
return $this->send((new GetCapabilityRequest($name)));
}

/**
* Retrieve all capabilities from Mollie.
*
* @throws RequestException
*/
public function list(): CapabilityCollection
{
/** @var CapabilityCollection */
return $this->send(new ListCapabilitiesRequest);
}
}
70 changes: 70 additions & 0 deletions src/Fake/Responses/capability-list.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"count": 2,
"_embedded": {
"capabilities": [
{
"resource": "capability",
"name": "payments",
"requirements": [
{
"name": "legal-representatives",
"dueDate": null,
"status": "requested"
},
{
"name": "bank-account",
"dueDate": null,
"status": "requested"
}
],
"status": "pending",
"statusReason": "onboarding-information-needed",
"organizationId": "org_12345678",
"_links": {
"self": {
"href": "...",
"type": "application/hal+json"
},
"dashboard": {
"href": "https://my.mollie.com/dashboard/...",
"type": "text/html"
}
}
},
{
"resource": "capability",
"name": "capital",
"requirements": [
{
"name": "legal-representatives",
"dueDate": "2024-05-14T01:29:09.0Z",
"status": "past-due"
}
],
"status": "disabled",
"statusReason": "requirement-past-due",
"organizationId": "org_12345678",
"_links": {
"self": {
"href": "...",
"type": "application/hal+json"
},
"dashboard": {
"href": "https://my.mollie.com/dashboard/...",
"type": "text/html"
}
}
}
]
},
"_links": {
"self": {
"href": "...",
"type": "application/hal+json"
},
"documentation": {
"href": "...",
"type": "text/html"
}
}
}
28 changes: 28 additions & 0 deletions src/Fake/Responses/capability.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"resource": "capability",
"name": "{{ RESOURCE_ID }}",
"requirements": [
{
"name": "legal-representatives",
"dueDate": null,
"status": "requested"
}
],
"status": "pending",
"statusReason": "onboarding-information-needed",
"organizationId": "org_12345678",
"_links": {
"self": {
"href": "...",
"type": "application/hal+json"
},
"dashboard": {
"href": "https://my.mollie.com/dashboard/...",
"type": "text/html"
},
"documentation": {
"href": "...",
"type": "text/html"
}
}
}
28 changes: 28 additions & 0 deletions src/Http/Requests/GetCapabilityRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<?php

namespace Mollie\Api\Http\Requests;

use Mollie\Api\Resources\Capability;
use Mollie\Api\Types\Method;

class GetCapabilityRequest extends ResourceHydratableRequest
{
protected static string $method = Method::GET;

/**
* The resource class the request should be casted to.
*/
protected $hydratableResource = Capability::class;

private string $name;

public function __construct(string $name)
{
$this->name = $name;
}

public function resolveResourcePath(): string
{
return "capabilities/{$this->name}";
}
}
21 changes: 21 additions & 0 deletions src/Http/Requests/ListCapabilitiesRequest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Mollie\Api\Http\Requests;

use Mollie\Api\Resources\CapabilityCollection;
use Mollie\Api\Types\Method;

class ListCapabilitiesRequest extends ResourceHydratableRequest
{
protected static string $method = Method::GET;

/**
* The resource class the request should be casted to.
*/
protected $hydratableResource = CapabilityCollection::class;

public function resolveResourcePath(): string
{
return 'capabilities';
}
}
2 changes: 2 additions & 0 deletions src/MollieApiClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
use Mollie\Api\EndpointCollection\BalanceEndpointCollection;
use Mollie\Api\EndpointCollection\BalanceReportEndpointCollection;
use Mollie\Api\EndpointCollection\BalanceTransactionEndpointCollection;
use Mollie\Api\EndpointCollection\CapabilityEndpointCollection;
use Mollie\Api\EndpointCollection\ChargebackEndpointCollection;
use Mollie\Api\EndpointCollection\ClientEndpointCollection;
use Mollie\Api\EndpointCollection\ClientLinkEndpointCollection;
Expand Down Expand Up @@ -63,6 +64,7 @@
* @property BalanceReportEndpointCollection $balanceReports
* @property BalanceTransactionEndpointCollection $balanceTransactions
* @property ChargebackEndpointCollection $chargebacks
* @property CapabilityEndpointCollection $capabilities
* @property ClientEndpointCollection $clients
* @property ClientLinkEndpointCollection $clientLinks
* @property CustomerPaymentsEndpointCollection $customerPayments
Expand Down
64 changes: 64 additions & 0 deletions src/Resources/Capability.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

namespace Mollie\Api\Resources;

class Capability extends BaseResource
{
/**
* @var string
*/
public $resource;

/**
* @var string
*
* @example payments
*/
public $name;

/**
* @var \stdClass
*/
public $requirements;

/**
* @var string
*
* possible values: disabled, pending, enabled
*
* @example enabled
*/
public $status;

/**
* @var string
*/
public $statusReason;

/**
* @var string
*/
public $organizationId;

/**
* Links to help navigate through the Mollie API and related resources.
*
* @var \stdClass
*/
public $_links;

public function isEnabled()
{
return $this->status === 'enabled';
}

public function isPending()
{
return $this->status === 'pending';
}

public function isDisabled()
{
return $this->status === 'disabled';
}
}
10 changes: 10 additions & 0 deletions src/Resources/CapabilityCollection.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Mollie\Api\Resources;

class CapabilityCollection extends ResourceCollection
{
public static string $collectionName = 'capabilities';

public static string $resource = Capability::class;
}
2 changes: 2 additions & 0 deletions src/Traits/HasEndpoints.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Mollie\Api\EndpointCollection\BalanceEndpointCollection;
use Mollie\Api\EndpointCollection\BalanceReportEndpointCollection;
use Mollie\Api\EndpointCollection\BalanceTransactionEndpointCollection;
use Mollie\Api\EndpointCollection\CapabilityEndpointCollection;
use Mollie\Api\EndpointCollection\ChargebackEndpointCollection;
use Mollie\Api\EndpointCollection\ClientEndpointCollection;
use Mollie\Api\EndpointCollection\ClientLinkEndpointCollection;
Expand Down Expand Up @@ -60,6 +61,7 @@ protected function initializeHasEndpoints(): void
'balances' => BalanceEndpointCollection::class,
'balanceReports' => BalanceReportEndpointCollection::class,
'balanceTransactions' => BalanceTransactionEndpointCollection::class,
'capabilities' => CapabilityEndpointCollection::class,
'chargebacks' => ChargebackEndpointCollection::class,
'clients' => ClientEndpointCollection::class,
'clientLinks' => ClientLinkEndpointCollection::class,
Expand Down
Loading

0 comments on commit c0c5fd6

Please sign in to comment.