Skip to content

Commit

Permalink
Adding support for Issuing resources in the API
Browse files Browse the repository at this point in the history
  • Loading branch information
remi-stripe committed Jul 26, 2018
1 parent 879ab79 commit 875cb48
Show file tree
Hide file tree
Showing 16 changed files with 614 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ php:

env:
global:
- STRIPE_MOCK_VERSION=0.19.0
- STRIPE_MOCK_VERSION=0.23.0
matrix:
- AUTOLOAD=1
- AUTOLOAD=0
Expand Down
6 changes: 6 additions & 0 deletions init.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@
require(dirname(__FILE__) . '/lib/InvoiceItem.php');
require(dirname(__FILE__) . '/lib/InvoiceLineItem.php');
require(dirname(__FILE__) . '/lib/IssuerFraudRecord.php');
require(dirname(__FILE__) . '/lib/Issuing/Authorization.php');
require(dirname(__FILE__) . '/lib/Issuing/Card.php');
require(dirname(__FILE__) . '/lib/Issuing/CardDetails.php');
require(dirname(__FILE__) . '/lib/Issuing/Cardholder.php');
require(dirname(__FILE__) . '/lib/Issuing/Dispute.php');
require(dirname(__FILE__) . '/lib/Issuing/Transaction.php');
require(dirname(__FILE__) . '/lib/LoginLink.php');
require(dirname(__FILE__) . '/lib/Order.php');
require(dirname(__FILE__) . '/lib/OrderItem.php');
Expand Down
2 changes: 1 addition & 1 deletion lib/ApiOperations/All.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public static function all($params = null, $opts = null)
if (!is_a($obj, 'Stripe\\Collection')) {
$class = get_class($obj);
$message = "Expected type \"Stripe\\Collection\", got \"$class\" instead";
throw new Error\Api($message);
throw new \Stripe\Error\Api($message);
}
$obj->setLastResponse($response);
$obj->setRequestParams($params);
Expand Down
69 changes: 69 additions & 0 deletions lib/Issuing/Authorization.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

namespace Stripe\Issuing;

/**
* Class Authorization
*
* @property string $id
* @property string $object
* @property bool $approved
* @property string $authorization_method
* @property int $authorized_amount
* @property string $authorized_currency
* @property \Stripe\Collection $balance_transactions
* @property Card $card
* @property Cardholder $cardholder
* @property int $created
* @property int $held_amount
* @property string $held_currency
* @property bool $is_held_amount_controllable
* @property bool $livemode
* @property mixed $merchant_data
* @property \Stripe\StripeObject $metadata
* @property int $pending_authorized_amount
* @property int $pending_held_amount
* @property mixed $request_history
* @property string $status
* @property mixed $request_history
* @property \Stripe\Collection $transactions
* @property mixed $verification_data
*
* @package Stripe\Issuing
*/
class Authorization extends \Stripe\ApiResource
{
const OBJECT_NAME = "issuing.authorization";

use \Stripe\ApiOperations\All;
use \Stripe\ApiOperations\Retrieve;
use \Stripe\ApiOperations\Update;

/**
* @param array|null $params
* @param array|string|null $options
*
* @return Authorization The approved authorization.
*/
public function approve($params = null, $options = null)
{
$url = $this->instanceUrl() . '/approve';
list($response, $opts) = $this->_request('post', $url, $params, $options);
$this->refreshFrom($response, $opts);
return $this;
}

/**
* @param array|null $params
* @param array|string|null $options
*
* @return Authorization The declined authorization.
*/
public function decline($params = null, $options = null)
{
$url = $this->instanceUrl() . '/decline';
list($response, $opts) = $this->_request('post', $url, $params, $options);
$this->refreshFrom($response, $opts);
return $this;
}
}
51 changes: 51 additions & 0 deletions lib/Issuing/Card.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<?php

namespace Stripe\Issuing;

/**
* Class Card
*
* @property string $id
* @property string $object
* @property mixed $authorization_controls
* @property mixed $billing
* @property string $brand
* @property Cardholder $cardholder
* @property int $created
* @property string $currency
* @property int $exp_month
* @property int $exp_year
* @property string $last4
* @property bool $livemode
* @property \Stripe\StripeObject $metadata
* @property string $name
* @property mixed $shipping
* @property string $status
* @property string $type
*
* @package Stripe\Issuing
*/
class Card extends \Stripe\ApiResource
{
const OBJECT_NAME = "issuing.card";

use \Stripe\ApiOperations\All;
use \Stripe\ApiOperations\Create;
use \Stripe\ApiOperations\Retrieve;
use \Stripe\ApiOperations\Update;

/**
* @param array|null $params
* @param array|string|null $options
*
* @return CardDetails The card details associated with that issuing card.
*/
public function details($params = null, $options = null)
{
$url = $this->instanceUrl() . '/details';
list($response, $opts) = $this->_request('get', $url, $params, $options);
$obj = \Stripe\Util\Util::convertToStripeObject($response, $opts);
$obj->setLastResponse($response);
return $obj;
}
}
21 changes: 21 additions & 0 deletions lib/Issuing/CardDetails.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Stripe\Issuing;

/**
* Class CardDetails
*
* @property string $id
* @property string $object
* @property Card $card
* @property string $cvc
* @property int $exp_month
* @property int $exp_year
* @property string $number
*
* @package Stripe\Issuing
*/
class CardDetails extends \Stripe\ApiResource
{
const OBJECT_NAME = "issuing.card_details";
}
30 changes: 30 additions & 0 deletions lib/Issuing/Cardholder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Stripe\Issuing;

/**
* Class Cardholder
*
* @property string $id
* @property string $object
* @property mixed $billing
* @property int $created
* @property string $email
* @property bool $livemode
* @property \Stripe\StripeObject $metadata
* @property string $name
* @property string $phone_number
* @property string $status
* @property string $type
*
* @package Stripe\Issuing
*/
class Cardholder extends \Stripe\ApiResource
{
const OBJECT_NAME = "issuing.cardholder";

use \Stripe\ApiOperations\All;
use \Stripe\ApiOperations\Create;
use \Stripe\ApiOperations\Retrieve;
use \Stripe\ApiOperations\Update;
}
30 changes: 30 additions & 0 deletions lib/Issuing/Dispute.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Stripe\Issuing;

/**
* Class Dispute
*
* @property string $id
* @property string $object
* @property int $amount
* @property int $created
* @property string $currency
* @property mixed $evidence
* @property bool $livemode
* @property \Stripe\StripeObject $metadata
* @property string $reason
* @property string $status
* @property Transaction $transaction
*
* @package Stripe\Issuing
*/
class Dispute extends \Stripe\ApiResource
{
const OBJECT_NAME = "issuing.dispute";

use \Stripe\ApiOperations\All;
use \Stripe\ApiOperations\Create;
use \Stripe\ApiOperations\Retrieve;
use \Stripe\ApiOperations\Update;
}
33 changes: 33 additions & 0 deletions lib/Issuing/Transaction.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<?php

namespace Stripe\Issuing;

/**
* Class Transaction
*
* @property string $id
* @property string $object
* @property int $amount
* @property string $authorization
* @property string $balance_transaction
* @property string $card
* @property string $cardholder
* @property int $created
* @property string $currency
* @property string $dispute
* @property bool $livemode
* @property mixed $merchant_data
* @property \Stripe\StripeObject $metadata
* @property string $type
*
* @package Stripe\Issuing
*/
class Transaction extends \Stripe\ApiResource
{
const OBJECT_NAME = "issuing.transaction";

use \Stripe\ApiOperations\All;
use \Stripe\ApiOperations\Create;
use \Stripe\ApiOperations\Retrieve;
use \Stripe\ApiOperations\Update;
}
6 changes: 6 additions & 0 deletions lib/Util/Util.php
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,12 @@ public static function convertToStripeObject($resp, $opts)
\Stripe\InvoiceItem::OBJECT_NAME => 'Stripe\\InvoiceItem',
\Stripe\InvoiceLineItem::OBJECT_NAME => 'Stripe\\InvoiceLineItem',
\Stripe\IssuerFraudRecord::OBJECT_NAME => 'Stripe\\IssuerFraudRecord',
\Stripe\Issuing\Authorization::OBJECT_NAME => 'Stripe\\Issuing\\Authorization',
\Stripe\Issuing\Card::OBJECT_NAME => 'Stripe\\Issuing\\Card',
\Stripe\Issuing\CardDetails::OBJECT_NAME => 'Stripe\\Issuing\\CardDetails',
\Stripe\Issuing\Cardholder::OBJECT_NAME => 'Stripe\\Issuing\\Cardholder',
\Stripe\Issuing\Dispute::OBJECT_NAME => 'Stripe\\Issuing\\Dispute',
\Stripe\Issuing\Transaction::OBJECT_NAME => 'Stripe\\Issuing\\Transaction',
\Stripe\LoginLink::OBJECT_NAME => 'Stripe\\LoginLink',
\Stripe\Order::OBJECT_NAME => 'Stripe\\Order',
\Stripe\OrderItem::OBJECT_NAME => 'Stripe\\OrderItem',
Expand Down
79 changes: 79 additions & 0 deletions tests/Stripe/Issuing/AuthorizationTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
<?php

namespace Stripe\Issuing;

class AuthorizationTest extends \Stripe\TestCase
{
const TEST_RESOURCE_ID = 'iauth_123';

public function testIsListable()
{
$this->expectsRequest(
'get',
'/v1/issuing/authorizations'
);
$resources = Authorization::all();
$this->assertTrue(is_array($resources->data));
$this->assertInstanceOf("Stripe\\Issuing\\Authorization", $resources->data[0]);
}

public function testIsRetrievable()
{
$this->expectsRequest(
'get',
'/v1/issuing/authorizations/' . self::TEST_RESOURCE_ID
);
$resource = Authorization::retrieve(self::TEST_RESOURCE_ID);
$this->assertInstanceOf("Stripe\\Issuing\\Authorization", $resource);
}

public function testIsSaveable()
{
$resource = Authorization::retrieve(self::TEST_RESOURCE_ID);
$resource->metadata["key"] = "value";

$this->expectsRequest(
'post',
'/v1/issuing/authorizations/' . self::TEST_RESOURCE_ID
);
$resource->save();
$this->assertInstanceOf("Stripe\\Issuing\\Authorization", $resource);
}

public function testIsUpdatable()
{
$this->expectsRequest(
'post',
'/v1/issuing/authorizations/' . self::TEST_RESOURCE_ID,
["metadata" => ["key" => "value"]]
);
$resource = Authorization::update(self::TEST_RESOURCE_ID, [
"metadata" => ["key" => "value"],
]);
$this->assertInstanceOf("Stripe\\Issuing\\Authorization", $resource);
}

public function testIsApprovable()
{
$resource = Authorization::retrieve(self::TEST_RESOURCE_ID);

$this->expectsRequest(
'post',
'/v1/issuing/authorizations/' . self::TEST_RESOURCE_ID . '/approve'
);
$resource = $resource->approve();
$this->assertInstanceOf("Stripe\\Issuing\\Authorization", $resource);
}

public function testIsDeclinable()
{
$resource = Authorization::retrieve(self::TEST_RESOURCE_ID);

$this->expectsRequest(
'post',
'/v1/issuing/authorizations/' . self::TEST_RESOURCE_ID . '/decline'
);
$resource = $resource->decline();
$this->assertInstanceOf("Stripe\\Issuing\\Authorization", $resource);
}
}
Loading

0 comments on commit 875cb48

Please sign in to comment.