Earn with Paysera Do you create a libraries?


We will pay from 100 to 200 EUR for an accurate and working programming code. If you’d like to cooperate in the future and receive orders for maintenance of a specific system version, the code and your contact data will be published for open use.

Contact us via email to support@paysera.com

To integrate the system for MacroPayments we recommend to use our prepared open source library. Library performs all needful inspections of saveable, transmissible and receivable data.

Attention: libwebtopay is suitable to use with both MicroPayments and MacroPayments.

You are able to test libwebtopay in demo mode. To run demo version in your web browser address bar add:

https://www.yourwebsiteurl.com/libwebtopay/demo/

Attention: mentioned way to demo folder would be different in address, if you extracted archive in other place.

Attention: to try demonstration, indicate your project ID from paysera.com website in projectid field. Demonstration will not work if you try it from your computer (localhost).

How to integrate into your website?

In summary, it is enough to call for two methods. First one prepares data for sending, second one checks answer about committed payment.

Below you will find a working example. Locations where your Paysera access data has to be entered are marked with comments.

1. Create a folder.

Create a folder, name it libwebtopay. Here, all the files related to payment integration will be stored.

2. Download libwebtopay library.

Download WebToPay.php file to the libwebtopay folder created.

3. Create a file that directs users to Paysera website.

In the libwebtopay folder, CREATE redirect.php file. The content of this file could be as follows:

<?php

require_once('WebToPay.php');

function getSelfUrl(): string
{
    $url = substr(strtolower($_SERVER['SERVER_PROTOCOL']), 0, strpos($_SERVER['SERVER_PROTOCOL'], '/'));

    if (isset($_SERVER['HTTPS']) === true) {
        $url .= ($_SERVER['HTTPS'] === 'on') ? 's' : '';
    }

    $url .= '://' . $_SERVER['HTTP_HOST'];

    if (isset($_SERVER['SERVER_PORT']) === true && $_SERVER['SERVER_PORT'] !== '80') {
        $url .= ':' . $_SERVER['SERVER_PORT'];
    }

    $url .= dirname($_SERVER['SCRIPT_NAME']);

    return $url;
}

try {
     WebToPay::redirectToPayment([
        'projectid' => {YOUR_PROJECT_ID},
        'sign_password' => {YOUR_PROJECT_PASSWORD},
        'orderid' => 0,
        'amount' => 1000,
        'currency' => 'EUR',
        'country' => 'LT',
        'accepturl' => getSelfUrl() . '/accept.php',
        'cancelurl' => getSelfUrl() . '/cancel.php',
        'callbackurl' => getSelfUrl() . '/callback.php',
        'test' => 0,
    ]);
} catch (Exception $exception) {
    echo get_class($exception) . ':' . $exception->getMessage();
}

4. Create accept.php

In the libwebtopay folder, create accept.php file. The contents of the file have to be as follows:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <title></title>
</head>
<body>
    Thank you for buying.
</body>
</html>

5. Create cancel.php

In the libwebtopay folder, CREATE cancel.php file. The contents of the file have to be as follows:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <title></title>
</head>
<body>
    Payment canceled.
</body>
</html>
}

6. Processing of payments.

In the libwebtopay folder, create callback.php file. The contents of the file have to be as follows:

<?php

require_once('WebToPay.php');

function isPaymentValid(array $order, array $response): bool
{
    if (array_key_exists('payamount', $response) === false) {
        if ($order['amount'] !== $response['amount'] || $order['currency'] !== $response['currency']) {
            throw new Exception('Wrong payment amount');
        }
    } else {
        if ($order['amount'] !== $response['payamount'] || $order['currency'] !== $response['paycurrency']) {
            throw new Exception('Wrong payment amount');
        }
    }

    return true;
}

try {
    $response = WebToPay::validateAndParseData(
        $_REQUEST,
        {YOUR_PROJECT_ID},
        {YOUR_PROJECT_PASSWORD}
    );

    if ($response['status'] === '1' || $response['status'] === '3') {
        //@ToDo: Validate payment amount and currency, example provided in isPaymentValid method.
        //@ToDo: Validate order status by $response['orderid']. If it is not already approved, approve it.

        echo 'OK';
    } else {
        throw new Exception('Payment was not successful');
    }
} catch (Exception $exception) {
    echo get_class($exception) . ':' . $exception->getMessage();
}
}
Info The transferred parameters are returned by WebToPay::checkResponse or WebToPay::validateAndParseData. The data itself is encrypted. Therefore, it usually cannot be taken from GET parameters.
Info In case of success, callback script must return the response beginning with or equal to “OK”.

Attention! In GET method all paysera.com parameters have prefix WebToPay::PREFIX. Method WebToPay::checkResponse() returns all data without prefix. Illustration about that:

>>> $response = WebToPay::checkResponse(['foo' => 'bar', 'wp_projectid' => '123'], [...]);
>>> print_r($response);
['projectid' => '123']

Request parameters

Parameter
Length
Required
Description
projectid
11
Yes
Unique project number. Only activated projects can accept payments.
orderid
40
Yes
Order number from your system.
accepturl
255
Yes
Full address (URL), to which the client is directed after a successful payment.
cancelurl
255
Yes
Full address (URL), to which the client is directed after he clicks the link to return to the shop.
callbackurl
255
Yes
Full address (URL), to which a seller will get information about performed payment.

Script must return text "OK". Only then our system will register, that information about the payment has been received.

If there is no answer "OK", the message will be sent 4 times (when we get it, after an hour, after three hours and after 24 hours).
version
9
Yes
The version number of Paysera system specification (API).
lang
3
No
It is possible to indicate the user language (ISO 639-2/B: LIT, RUS, ENG, etc.). If Paysera does not support the selected language, the system will automatically choose a language according to the IP address or ENG language by default.
amount
11
No
Amount in cents the client has to pay.
currency
3
No
Payment currency (i.e USD, EUR, etc.) you want the client to pay in. If the selected currency cannot be accepted by a specific payment method, the system will convert it automatically to the acceptable currency, according to the currency rate of the day. Payamount and paycurrency answers will be sent to your website.
payment
20
No
Payment type. If provided, the payment will be made by the method specified (for example by using the specified bank). If not specified, the payer will be immediately provided with the payment types to choose from. You can get payment types in real time by using WebToPay library.
country
2
No
Payer's country (LT, EE, LV, GB, PL, DE). All possible types of payment in that country are immediately indicated to the payer, after selecting a country.
paytext
255*
No
Payment purpose visible when making the payment. If not specified, default text is used:
Payment for goods and services (for nb. [order_nr]) ([site_name]).

If you specify the payment purpose, it is necessary to include the following variables, which will be replaced with the appropriate values in the final purpose text:

[order_nr] - payment number.
[site_name] or [owner_name] - website address or company name.
p_firstname
255
No
Payer's name. Requested in the majority of payment methods. Necessary for certain payment methods.
p_lastname
255
No
Payer's surname. Requested in the majority of payment methods. Necessary for certain payment methods.
p_email
255
No
Payer's email address is necessary. If the email address is not received, the client will be requested to enter it. Paysera system will inform the payer about the payment status by this address.
p_street
255
No
Payer's address, to which goods will be sent (e.g.: Pilaitės pr. 16). Necessary for certain payment methods.
p_city
255
No
Payer's city, to which goods will be sent (e.g.: Vilnius). Necessary for certain payment methods.
p_state
255
No
Payer's state code (necessary, when buying in USA). Necessary for certain payment methods.
p_zip
20
No
Payer's postal code. Lithuanian postal codes can be found here . Necessary for certain payment methods.
p_countrycode
20
No
Payer's country code. The list with country codes can be found here . Necessary for certain payment methods.
test
1
No
The parameter, which allows to test the connection. The payment is not executed, but the result is returned immediately, as if the payment has been made. To test, it is necessary to activate the mode for a particular project by logging in and selecting: "Projects and Activities" -> "My projects" -> "Project settings" -> "Payment collection service settings" -> "Allow test payments" (check).
only_payments
0
No
Show only those payment methods that are separated by commas.
disallow_payments
0
No
Hide payment methods separated by comma.
repeat_request
1
No
If this parameter equals 1, previous request is repeat using 'orderid' parameter.
sign
255
Yes
Parameter with data signature. It is necessary to make sure that data is being sent from your website. If you use not a PHP programing language, you have to pay attention in coding when generating 'sign' parameter. PHP functions strlen() and strtolower() do not maintain UTF-8, because of that operations are being performed not with UTF-8, but with bytes: strlen('ąbčd') == 6 and strtolower('ĄBČD') == 'ĄbČd'.
time_limit
19
No
The parameter indicating the final date for payment; the date is given in “yyyy-mm-dd HH:MM:SS” format. The minimum value is 15 minutes from the current moment; the maximum value is 3 days. Note: works only with certain payment methods.

* Final length may vary depending on payment type specification

** Buyer consent text:

Callback

For more information on callbacks - see the chapter Callback .