Omnipay: Paysafecard (REST API)
Paysafecard driver for the Omnipay PHP payment processing library, (*1)
, (*2)
This is non-official Omnipay-driver for the payment gateway provider Paysafecard.
In order to use it the Omnipay-Framework is required., (*3)
Omnipay is a framework agnostic, multi-gateway payment
processing library for PHP 5.3+. This package implements Paysafecard REST API support for Omnipay., (*4)
Installation
This package is installed via Composer. To install, simply add it
to your composer.json
file:, (*5)
$ composer require sauladam/omnipay-paysafecard-rest
And run composer to update your dependencies:, (*6)
$ composer update
Basic Usage
The following gateway is provided by this package:, (*7)
For general usage instructions, please see the main Omnipay
repository., (*8)
Setting up the gateway
This is quite simple because the API only needs an API key., (*9)
require 'vendor/autoload.php';
use Omnipay\Omnipay;
$gateway = Omnipay::create('Paysafecard_Rest');
$gateway->setApiKey('yourApiKey');
// Testmode is on by default, so you want to switch it off for production.
$gateway->setTestMode(false); // default: true
Initializing / authorizing a payment
$response = $gateway->authorize([
'amount' => 0.01,
'currency' => 'EUR',
'success_url' => 'http://success.com/{payment_id}',
'failure_url' => 'http://fail.com/{payment_id}',
'notification_url' => 'http://notify.com/{payment_id}',
'customer_id' => 1234,
])->send();
if ($response->isSuccessful()) {
$paymentId = $response->getPaymentId();
// this is the url you should redirect the customer
// to or display within an iframe
$authUrl = $response->authUrl();
} else {
echo 'Something went wrong: ' . $response->getMessage();
}
The auth URL points to a (secure) page where the customer can enter their Paysafecard PIN number. You can redirect the customer to that URL or embed it as an iframe and display it to them - either is fine., (*10)
After the customer has filled out and submitted the form, Paysafecard will redirect them to what you've specified as your success_url in the authorize request. Ideally that URL should contain some kind of payment identifier or some reference to your previously stored $paymentId
(Paysafecard will replace the placeholder {payment_id} in the URL with the actual payment id), because you now need it to check the status of this transaction:, (*11)
Check the status
$response = $gateway->details([
'payment_id' => $paymentId,
])->send();
The status now should be AUTHORIZED, so check for that:, (*12)
if($response->getStatus() == 'AUTHORIZED')
{
// The customer has authorized the payment, we're now ready to capture it.
}
Capture the transaction
$response = $gateway->capture([
'payment_id' => $paymentId,
])->send();
if($response->getStatus() == 'SUCCESS') {
// You have successfully captured the payment, the order is ready to ship.
}
Refunds
In order to use the Refund API, you have to ask paysafecard explicitly to enable this endpoint for your merchant account, otherwise you will get a "401 Unauthorized" response., (*13)
If you want to execute the refund immediately, just use the refund()
-funtion directly with all the required data:, (*14)
$response = $gateway->refund([
'payment_id' => $paymentId,
'amount' => 12.34,
'currency' => 'EUR',
'customer_email' => 'customer@email.com',
'customer_id' => 1234,
])->send();
if($response->getStatus() == 'SUCCESS') {
// The amount was successfully refunded.
}
However, it is recommended to validate the refund first in order to "precheck the likeliness of the upcoming refund to be successful" because "there are certain conditions why a refund might be refused"., (*15)
So instead of refund()
you should rather use validateRefund()
first with the same data and only request the refund if the validation passed:, (*16)
$validationResponse = $gateway->validateRefund([
// same data as above
])->send();
if(! $validationResponse->isSuccessful() || $validationResponse->getStatus() != 'VALIDATION_SUCCESSFUL') {
// something went wrong...
}
$refundResponse = $gateway->refund([
'payment_id' => $paymentId,
'refund_id' => $response->getRefundId(),
])->send();
if($refundResponse->isSuccessful()) {
echo "The refund was successful and the refund id is " . $refundResponse->getRefundId();
}
Support
For more usage examples please have a look at the tests of this package. Also have a look at the Paysafecard API Documentation for further details., (*17)
If you are having general issues with Omnipay, we suggest posting on
Stack Overflow. Be sure to add the
omnipay tag so it can be easily found., (*18)
If you want to keep up to date with release anouncements, discuss ideas for the project,
or ask more detailed questions, there is also a mailing list which
you can subscribe to., (*19)
If you believe you have found a bug, please report it using the GitHub issue tracker,
or better yet, fork the library and submit a pull request., (*20)