| Current Path : /var/www/html/libraries/omnipay/vendor/omnipay/stripe/src/ |
| Current File : /var/www/html/libraries/omnipay/vendor/omnipay/stripe/src/Gateway.php |
<?php
/**
* Stripe Gateway
*/
namespace Omnipay\Stripe;
use Omnipay\Common\AbstractGateway;
use Omnipay\Stripe\Message\PurchaseRequest;
use Omnipay\Stripe\Message\RefundRequest;
/**
* Stripe Gateway
*
* Example:
*
* <code>
* // Create a gateway for the Stripe Gateway
* // (routes to GatewayFactory::create)
* $gateway = Omnipay::create('Stripe');
*
* // Initialise the gateway
* $gateway->initialize(array(
* 'apiKey' => 'MyApiKey',
* ));
*
* // Create a credit card object
* // This card can be used for testing.
* $card = new CreditCard(array(
* 'firstName' => 'Example',
* 'lastName' => 'Customer',
* 'number' => '4242424242424242',
* 'expiryMonth' => '01',
* 'expiryYear' => '2020',
* 'cvv' => '123',
* 'email' => 'customer@example.com',
* 'billingAddress1' => '1 Scrubby Creek Road',
* 'billingCountry' => 'AU',
* 'billingCity' => 'Scrubby Creek',
* 'billingPostcode' => '4999',
* 'billingState' => 'QLD',
* ));
*
* // Do a purchase transaction on the gateway
* $transaction = $gateway->purchase(array(
* 'amount' => '10.00',
* 'currency' => 'USD',
* 'card' => $card,
* ));
* $response = $transaction->send();
* if ($response->isSuccessful()) {
* echo "Purchase transaction was successful!\n";
* $sale_id = $response->getTransactionReference();
* echo "Transaction reference = " . $sale_id . "\n";
* }
* </code>
*
* Test modes:
*
* Stripe accounts have test-mode API keys as well as live-mode
* API keys. These keys can be active at the same time. Data
* created with test-mode credentials will never hit the credit
* card networks and will never cost anyone money.
*
* Unlike some gateways, there is no test mode endpoint separate
* to the live mode endpoint, the Stripe API endpoint is the same
* for test and for live.
*
* Setting the testMode flag on this gateway has no effect. To
* use test mode just use your test mode API key.
*
* You can use any of the cards listed at https://stripe.com/docs/testing
* for testing.
*
* Authentication:
*
* Authentication is by means of a single secret API key set as
* the apiKey parameter when creating the gateway object.
*
* @see \Omnipay\Common\AbstractGateway
* @see \Omnipay\Stripe\Message\AbstractRequest
* @link https://stripe.com/docs/api
*/
class Gateway extends AbstractGateway
{
public function getName()
{
return 'Stripe';
}
/**
* Get the gateway parameters
*
* @return array
*/
public function getDefaultParameters()
{
return array(
'apiKey' => '',
);
}
/**
* Get the gateway API Key
*
* Authentication is by means of a single secret API key set as
* the apiKey parameter when creating the gateway object.
*
* @return string
*/
public function getApiKey()
{
return $this->getParameter('apiKey');
}
/**
* Set the gateway API Key
*
* Authentication is by means of a single secret API key set as
* the apiKey parameter when creating the gateway object.
*
* Stripe accounts have test-mode API keys as well as live-mode
* API keys. These keys can be active at the same time. Data
* created with test-mode credentials will never hit the credit
* card networks and will never cost anyone money.
*
* Unlike some gateways, there is no test mode endpoint separate
* to the live mode endpoint, the Stripe API endpoint is the same
* for test and for live.
*
* Setting the testMode flag on this gateway has no effect. To
* use test mode just use your test mode API key.
*
* @param string $value
* @return Gateway provides a fluent interface.
*/
public function setApiKey($value)
{
return $this->setParameter('apiKey', $value);
}
/**
* Authorize Request
*
* An Authorize request is similar to a purchase request but the
* charge issues an authorization (or pre-authorization), and no money
* is transferred. The transaction will need to be captured later
* in order to effect payment. Uncaptured charges expire in 7 days.
*
* Either a customerReference or a card is required. If a customerReference
* is passed in then the cardReference must be the reference of a card
* assigned to the customer. Otherwise, if you do not pass a customer ID,
* the card you provide must either be a token, like the ones returned by
* Stripe.js, or a dictionary containing a user's credit card details.
*
* IN OTHER WORDS: You cannot just pass a card reference into this request,
* you must also provide a customer reference if you want to use a stored
* card.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\AuthorizeRequest
*/
public function authorize(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\AuthorizeRequest', $parameters);
}
/**
* Capture Request
*
* Use this request to capture and process a previously created authorization.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\CaptureRequest
*/
public function capture(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\CaptureRequest', $parameters);
}
/**
* Purchase request.
*
* To charge a credit card, you create a new charge object. If your API key
* is in test mode, the supplied card won't actually be charged, though
* everything else will occur as if in live mode. (Stripe assumes that the
* charge would have completed successfully).
*
* Either a customerReference or a card is required. If a customerReference
* is passed in then the cardReference must be the reference of a card
* assigned to the customer. Otherwise, if you do not pass a customer ID,
* the card you provide must either be a token, like the ones returned by
* Stripe.js, or a dictionary containing a user's credit card details.
*
* IN OTHER WORDS: You cannot just pass a card reference into this request,
* you must also provide a customer reference if you want to use a stored
* card.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\PurchaseRequest
*/
public function purchase(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\PurchaseRequest', $parameters);
}
/**
* Refund Request
*
* When you create a new refund, you must specify a
* charge to create it on.
*
* Creating a new refund will refund a charge that has
* previously been created but not yet refunded. Funds will
* be refunded to the credit or debit card that was originally
* charged. The fees you were originally charged are also
* refunded.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\RefundRequest
*/
public function refund(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\RefundRequest', $parameters);
}
/**
* Fetch Transaction Request
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\VoidRequest
*/
public function void(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\VoidRequest', $parameters);
}
/**
* @param array $parameters
* @return \Omnipay\Stripe\Message\FetchTransactionRequest
*/
public function fetchTransaction(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\FetchTransactionRequest', $parameters);
}
//
// Cards
// @link https://stripe.com/docs/api#cards
//
/**
* Create Card
*
* This call can be used to create a new customer or add a card
* to an existing customer. If a customerReference is passed in then
* a card is added to an existing customer. If there is no
* customerReference passed in then a new customer is created. The
* response in that case will then contain both a customer token
* and a card token, and is essentially the same as CreateCustomerRequest
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\CreateCardRequest
*/
public function createCard(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\CreateCardRequest', $parameters);
}
/**
* Update Card
*
* If you need to update only some card details, like the billing
* address or expiration date, you can do so without having to re-enter
* the full card details. Stripe also works directly with card networks
* so that your customers can continue using your service without
* interruption.
*
* When you update a card, Stripe will automatically validate the card.
*
* This requires both a customerReference and a cardReference.
*
* @link https://stripe.com/docs/api#update_card
* @param array $parameters
* @return \Omnipay\Stripe\Message\UpdateCardRequest
*/
public function updateCard(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\UpdateCardRequest', $parameters);
}
/**
* Delete a card.
*
* This is normally used to delete a credit card from an existing
* customer.
*
* You can delete cards from a customer or recipient. If you delete a
* card that is currently the default card on a customer or recipient,
* the most recently added card will be used as the new default. If you
* delete the last remaining card on a customer or recipient, the
* default_card attribute on the card's owner will become null.
*
* Note that for cards belonging to customers, you may want to prevent
* customers on paid subscriptions from deleting all cards on file so
* that there is at least one default card for the next invoice payment
* attempt.
*
* In deference to the previous incarnation of this gateway, where
* all CreateCard requests added a new customer and the customer ID
* was used as the card ID, if a cardReference is passed in but no
* customerReference then we assume that the cardReference is in fact
* a customerReference and delete the customer. This might be
* dangerous but it's the best way to ensure backwards compatibility.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\DeleteCardRequest
*/
public function deleteCard(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\DeleteCardRequest', $parameters);
}
//
// Customers
// link: https://stripe.com/docs/api#customers
//
/**
* Create Customer
*
* Customer objects allow you to perform recurring charges and
* track multiple charges that are associated with the same customer.
* The API allows you to create, delete, and update your customers.
* You can retrieve individual customers as well as a list of all of
* your customers.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\CreateCustomerRequest
*/
public function createCustomer(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\CreateCustomerRequest', $parameters);
}
/**
* Update Customer
*
* This request updates the specified customer by setting the values
* of the parameters passed. Any parameters not provided will be left
* unchanged. For example, if you pass the card parameter, that becomes
* the customer's active card to be used for all charges in the future,
* and the customer email address is updated to the email address
* on the card. When you update a customer to a new valid card: for
* each of the customer's current subscriptions, if the subscription
* is in the `past_due` state, then the latest unpaid, unclosed
* invoice for the subscription will be retried (note that this retry
* will not count as an automatic retry, and will not affect the next
* regularly scheduled payment for the invoice). (Note also that no
* invoices pertaining to subscriptions in the `unpaid` state, or
* invoices pertaining to canceled subscriptions, will be retried as
* a result of updating the customer's card.)
*
* This request accepts mostly the same arguments as the customer
* creation call.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\CreateCustomerRequest
*/
public function updateCustomer(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\UpdateCustomerRequest', $parameters);
}
/**
* Delete a customer.
*
* Permanently deletes a customer. It cannot be undone. Also immediately
* cancels any active subscriptions on the customer.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\DeleteCustomerRequest
*/
public function deleteCustomer(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\DeleteCustomerRequest', $parameters);
}
//
// Tokens
// @link https://stripe.com/docs/api#tokens
//
// This gateway does not currently have a CreateToken message. In
// any case tokens are probably not what you are looking for because
// they are single use. You probably want to create a Customer or
// Card reference instead. This function is left here for further
// expansion.
//
/**
* Stripe Fetch Token Request
*
* Often you want to be able to charge credit cards or send payments
* to bank accounts without having to hold sensitive card information
* on your own servers. Stripe.js makes this easy in the browser, but
* you can use the same technique in other environments with our token API.
*
* Tokens can be created with your publishable API key, which can safely
* be embedded in downloadable applications like iPhone and Android apps.
* You can then use a token anywhere in our API that a card or bank account
* is accepted. Note that tokens are not meant to be stored or used more
* than once—to store these details for use later, you should create
* Customer or Recipient objects.
*
* @param array $parameters
* @return \Omnipay\Stripe\Message\FetchTokenRequest
*/
public function fetchToken(array $parameters = array())
{
return $this->createRequest('\Omnipay\Stripe\Message\FetchTokenRequest', $parameters);
}
}