Skip to content

Commit

Permalink
Add Subscriptions API object, resource, and example.
Browse files Browse the repository at this point in the history
  • Loading branch information
Rick committed Jun 16, 2016
1 parent 8d1d336 commit 03b03c4
Show file tree
Hide file tree
Showing 8 changed files with 245 additions and 17 deletions.
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "mollie/mollie-api-php",
"description": "Mollie API client library for PHP",
"version": "1.5.1",
"version": "1.6.0",
"homepage": "https://github.com/mollie/mollie-api-php",
"license": "BSD-2-Clause",
"authors": [
Expand All @@ -13,7 +13,7 @@
"keywords": [
"mollie", "payment", "service", "ideal", "creditcard", "mistercash", "bancontact", "sofort", "sofortbanking",
"sepa", "bitcoin", "paypal", "paysafecard", "podiumcadeaukaart", "banktransfer", "direct debit", "belfius",
"belfius direct net", "refunds", "api", "payments", "gateway"
"belfius direct net", "refunds", "api", "payments", "gateway", "subscriptions", "recurring", "charges"
],
"require-dev": {
"phpunit/phpunit": "^3.7|^4.8|^5.4"
Expand Down
10 changes: 5 additions & 5 deletions examples/15-recurring-payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,12 @@
));

/*
* Send the customer off to complete the first payment.
*
* After completion, the customer will have a pending or valid mandate that can be
* used for recurring payments and subscriptions.
* The payment will be either pending or paid immediately. The customer
* does not have to perform any payment steps.
*/
echo "<p>Your payment status is '" . htmlspecialchars($payment->status) . "'.</p>";

echo "<p>Selected mandate is '" . htmlspecialchars($payment->mandateId) . "' (" . htmlspecialchars($payment->method) . ").</p>\n";
echo "<p>The payment status is '" . htmlspecialchars($payment->status) . "'.</p>\n";
}
catch (Mollie_API_Exception $e)
{
Expand Down
50 changes: 50 additions & 0 deletions examples/16-recurring-subscription.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
<?php
/*
* Example 16 - How to create a regular subscription.
*/

try
{
/*
* Initialize the Mollie API library with your API key or OAuth access token.
*/
include "initialize.php";

/**
* Retrieve the last created customer for this example.
* If no customers are created yet, run example 11.
*/
$customer = $mollie->customers->all(0, 1)->data[0];

/*
* Generate a unique subscription id for this example. It is important to include this unique attribute
* in the redirectUrl (below) so a proper return page can be shown to the customer.
*/
$my_subscription = time();

/*
* Customer Subscription creation parameters.
*
* See: https://www.mollie.com/nl/docs/reference/subscriptions/create
*/
$subscription = $mollie->customers_subscriptions->with($customer)->create(array(
"amount" => 10.00,
"times" => 12,
"interval" => "1 month",
"description" => "My subscription",
"method" => NULL,
"webhookUrl" => "https://example.org/subscription-payment-webhook/$my_subscription",
));

/*
* The subscription will be either pending or active depending on whether the customer has
* a pending or valid mandate. If the customer has no mandates an error is returned. You
* should then set up a "first payment" for the customer (example 14).
*/

echo "<p>The subscription status is '" . htmlspecialchars($subscription->status) . "'.</p>\n";
}
catch (Mollie_API_Exception $e)
{
echo "API call failed: " . htmlspecialchars($e->getMessage());
}
24 changes: 16 additions & 8 deletions src/Mollie/API/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ class Mollie_API_Client
/**
* Version of our client.
*/
const CLIENT_VERSION = "1.5.1";
const CLIENT_VERSION = "1.6.0";

/**
* Endpoint of the remote API.
Expand Down Expand Up @@ -142,6 +142,13 @@ class Mollie_API_Client
*/
public $customers_mandates;

/**
* RESTful Customers Subscriptions resource.
*
* @var Mollie_API_Resource_Customers_Subscriptions
*/
public $customers_subscriptions;

/**
* @var string
*/
Expand Down Expand Up @@ -172,13 +179,14 @@ public function __construct ()
$this->getCompatibilityChecker()
->checkCompatibility();

$this->payments = new Mollie_API_Resource_Payments($this);
$this->payments_refunds = new Mollie_API_Resource_Payments_Refunds($this);
$this->issuers = new Mollie_API_Resource_Issuers($this);
$this->methods = new Mollie_API_Resource_Methods($this);
$this->customers = new Mollie_API_Resource_Customers($this);
$this->customers_payments = new Mollie_API_Resource_Customers_Payments($this);
$this->customers_mandates = new Mollie_API_Resource_Customers_Mandates($this);
$this->payments = new Mollie_API_Resource_Payments($this);
$this->payments_refunds = new Mollie_API_Resource_Payments_Refunds($this);
$this->issuers = new Mollie_API_Resource_Issuers($this);
$this->methods = new Mollie_API_Resource_Methods($this);
$this->customers = new Mollie_API_Resource_Customers($this);
$this->customers_payments = new Mollie_API_Resource_Customers_Payments($this);
$this->customers_mandates = new Mollie_API_Resource_Customers_Mandates($this);
$this->customers_subscriptions = new Mollie_API_Resource_Customers_Subscriptions($this);

// OAuth2 endpoints
$this->permissions = new Mollie_API_Resource_Permissions($this);
Expand Down
1 change: 1 addition & 0 deletions src/Mollie/API/Object/Customer/Mandate.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
*/
class Mollie_API_Object_Customer_Mandate
{
const STATUS_PENDING = "pending";
const STATUS_VALID = "valid";
const STATUS_INVALID = "invalid";

Expand Down
112 changes: 112 additions & 0 deletions src/Mollie/API/Object/Customer/Subscription.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<?php
/**
* Copyright (c) 2016, Mollie B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* @license Berkeley Software Distribution License (BSD-License 2) http://www.opensource.org/licenses/bsd-license.php
* @author Mollie B.V. <[email protected]>
* @copyright Mollie B.V.
* @link https://www.mollie.com
*/
class Mollie_API_Object_Customer_Subscription
{
const STATUS_ACTIVE = "active";
const STATUS_PENDING = "pending"; // Waiting for a valid mandate.
const STATUS_CANCELLED = "cancelled";
const STATUS_SUSPENDED = "suspended"; // Active, but mandate became invalid.
const STATUS_COMPLETED = "completed";

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

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

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

/**
* Either "live" or "test" depending on the customer's mode.
*
* @var string
*/
public $mode;

/**
* ISO 8601 format.
*
* @var string
*/
public $createdDatetime;

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

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

/**
* @var int|null
*/
public $times;

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

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

/**
* @var string|null
*/
public $method;

/**
* ISO 8601 format.
*
* @var string|null
*/
public $cancelledDatetime;

/**
* Contains an optional 'webhookUrl'.
*
* @var object|null
*/
public $links;
}
12 changes: 10 additions & 2 deletions src/Mollie/API/Object/Payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ class Mollie_API_Object_Payment
* The customer ID this payment is performed by.
*
* @example cst_51EkUqla3
* @var string
* @var string|null
*/
public $customerId;

Expand All @@ -218,10 +218,18 @@ class Mollie_API_Object_Payment
* The mandate ID this payment is performed with.
*
* @example mdt_pXm1g3ND
* @var string
* @var string|null
*/
public $mandateId;

/**
* The subscription ID this payment belongs to.
*
* @example sub_rVKGtNd6s3
* @var string|null
*/
public $subscriptionId;

/**
* The locale used for this payment.
*
Expand Down
49 changes: 49 additions & 0 deletions src/Mollie/API/Resource/Customers/Subscriptions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<?php
/**
* Copyright (c) 2016, Mollie B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* @license Berkeley Software Distribution License (BSD-License 2) http://www.opensource.org/licenses/bsd-license.php
* @author Mollie B.V. <[email protected]>
* @copyright Mollie B.V.
* @link https://www.mollie.com
*
* @method Mollie_API_Object_Customer_Subscription[]|Mollie_API_Object_List all($offset = 0, $limit = 0, array $filters = array())
* @method Mollie_API_Object_Customer_Subscription get($subscription_id, array $filters = array())
*/
class Mollie_API_Resource_Customers_Subscriptions extends Mollie_API_Resource_Base
{
/**
* @var string
*/
protected $resource_path = "customers_subscriptions";

/**
* @return Mollie_API_Object_Customer_Subscription
*/
protected function getResourceObject ()
{
return new Mollie_API_Object_Customer_Subscription;
}
}

0 comments on commit 03b03c4

Please sign in to comment.