NAV Navbar
php-sdk php curl java javascript python kotlin

Wstep

Niniejsza dokumentacja jest przeznaczona dla obecnych oraz przyszłych Partnerów Simpay. Przed wdrożeniem, niezbędne jest wcześniejsze zdefiniowanie usługi w Panelu Partnera oraz oczekiwanie na jej aktywacje bezpośrednio u operatorów.

SMS

API serwisu SimPay.pl opiera się o danych wysyłanych i zwracanych w formie JSON. W przypadku napotkania jakiegokolwiek błędu podczas obsługi żądania klienta, system zwraca informację sposób przestawiony w kodach błędów.

API systemu SimPay.pl dostępne jest pod adresem: https://simpay.pl/api/.

Najnowsze wersje bibliote znajdują się w repozytorium SimPay na platformie Github.

W celu zapewnienia szybkiej integracji z systemem SimPay.pl zalecamy skorzystanie z gotowych bibliotek

Gotowe biblioteki SMS: PHP JavaScript Java Python Kotlin

Dostęp do API - dane klienta

W celu wykonywania operacji na API SimPay niezbędne jest uwierzytelnienie klienta na podstawie parametrów auth: [key, secret]. Parametry do autoryzacji API może pobrać w panelu Partnera SimPay: Konto klienta / Edycja danych / API - https://simpay.pl/panel/Client/API

Weryfikacja kodu

<?php

$cfg = array(
  /*
  * Klucz API z panelu
  * Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
  * Wymagany: Tak
  */
  'key' => '3c7f4b55',
  /*
  * Hasło API z panelu
  * Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
  * Wymagany: Tak
  */
  'secret' => '1663121e0b37857519383b8f088efafb' 
  /*
  * ID Usługi z panelu
  * Gdzie znaleźć? "simpay > panel > Premium SMS > zarządzaj"
  * Wymagany: Tak
  */
  'service_id' => '3403',       
  /*
  * Numer pod jaki miał zostać wysłany SMS
  * 
  * Wymagany: Nie
  */
  'number' =>   '7055',
  /*
  * Kod SMS zwrotny, powinien zawierać 6 znaków
  * 
  * Wymagany: Tak
  */
  'code' => 'C15ZA8'
);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://simpay.pl/api/status");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(array('params' => array_merge($cfg))));
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl);
$error = curl_errno($curl);
curl_close($curl);

/*
* Weryfikacja kodu
*/

$response = json_decode($response);
/*
* W przypadku nie wysłania do simpay parametru number,
* zaleca się weryfikację czy kod został wysłany na poprawny numer.
* Simpay zwraca w odpowiedzi parametry:
* "status" -> Status transakcji, poprawna = OK
* "test" -> Transakcja testowa, 1 = transakcja testowa
* "from" -> Numer z jakiego został wysłany sms
* "number" -> Numer na jaki został wysłany sms
* "value" -> Kwota netto na jaki został wysłany sms
*
* W przypadku tego przykładu aby odczytać któryś z tych parametrów należy odwołać się do poniższego kodu
* $response->respond->value - to np. zwróci kwotę transakcji
*/
if ($response->respond->status == "OK") {
  /*
  * Tutaj można np. dodać jakieś zapytanie do bazy MySQL o poprawnej transakcji
  */
  echo 'Podany kod jest prawidłowy.';
} else {
  echo 'Podany kod jest nieprawidłowy.';
}

<?php
require_once('vendor/autoload.php');

use simpay\Sms;

$cfg = array(
    'mysql' => array(
        'host' => 'localhost',
        'user' => 'username',
        'pass' => 'password',
        'base' => 'database',
    ),
    'simpay' => array(
        'debug' => false,
        /*
        *   Klucz API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiKey' => '3c7f4b55',
        /*
        *   Hasło API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiSecret' => '1663121e0b37857519383b8f088efafb',
        /*
        *   ID Usługi z panelu
        *   Gdzie znaleźć? "simpay > panel > Premium SMS > zarządzaj"
        */
        'serviceId' => 3403,
        /*
        *   Numer pod jaki miał zostać wysłany SMS
        */
        'number' => 7055,
        /*
        *   Kod SMS zwrotny, powinien zawierać 6 znaków
        */
        'code' => 'D4799A'
    )
);

try {
    $api = new Sms($cfg['simpay']['apiKey'], $cfg['simpay']['apiSecret']);
    $api->getStatus(array('service_id' => $cfg['simpay']['serviceId'], 'number' => $cfg['simpay']['number'], 'code' => $cfg['simpay']['code']));

    if ($api->check()) {
        /*
        *   Tutaj kod jest prawidłowy, można wykonać np. zapytanie do mysql.
        *
        *   $api->getRespondValue() -> Kwota dla partnera z danej transakcji, przydatne przy np. obliczaniu zarobków w zewnętrznym panelu.
        */
        echo 'Wprowadzono poprawny kod.';
    } elseif ($api->error() && $cfg['simpay']['debug']) {
        echo 'Wystapil blad:<br/>';
        echo $api->pre($api->showError());
    } else {
        echo 'Wprowadzono nieprawidłowy kod.';
    }
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
curl -XPOST -d '{
  "params": {
    "key": "3c7f4b55",
    "secret": "1663121e0b37857519383b8f088efafb",
    "service_id": "3403",
    "number": "7055",
    "code": "C15ZA8"
  }
}' 'https://simpay.pl/api/status'
Sms sms = new Sms();
Sms sms = new Sms("key","secret");

CodeVerifyRequest request = new CodeVerifyRequest();
request.setCode("code");
request.setKey("key"); // can be omitted  by passing value in constructor
request.setSecret("secret"); // can be omitted  by passing value in constructor
request.setNumber("number");
request.setService_id("service_id");

APIResponse<CodeVerifyResponse> response = sms.verifyCode(request);
List<String> error = response.getError(); // List of errors, if request was successful list will be empty
CodeVerifyResponse codeVerifyResponse = response.getRespond();
int from = codeVerifyResponse.getFrom(); // Sender number
int number = codeVerifyResponse.getNumber(); // Number where sms were sent
String status = codeVerifyResponse.getStatus(); // Status received from api
int test = codeVerifyResponse.getTest(); // 1 if sms was test else 0
double value = codeVerifyResponse.getValue(); // Code Value
sms: Sms = new Sms();
sms: Sms = new Sms('key','secret');

request: CodeVerifyRequest = new CodeVerifyRequest();
request.code = 'code';
request.key = 'key'; // can be omitted  by passing value in constructor
request.secret ='secret'; // can be omitted  by passing value in constructor
request.number = 'number';
request.service_id = 'service_id';

response: APIResponse<CodeVerifyResponse> = sms.verifyCode(request);
error: string[] = response.error; // List of errors, if request was successful list will be empty
codeVerifyResponse: CodeVerifyResponse = response.respond;
from: string = codeVerifyResponse.from; // Sender number
number: number = codeVerifyResponse.number; // Number where sms were sent
status: string = codeVerifyResponse.status; // Status received from api
test: number = codeVerifyResponse.test; // 1 if sms was test else 0
value: number = codeVerifyResponse.value; // Code Value
from payments.sms import SMS

sms = SMS("API_KEY", "API_SECRET", "SERVICE_ID")

response = sms.verify_code(request={"code": "XXXXXXX", "number": "XXXXX"})
val sms: Sms =  Sms()

val request: CodeVerifyRequest = CodeVerifyRequest()
val request: CodeVerifyRequest = CodeVerifyRequest(API_KEY, API_SECRET, SERVICE_ID)
request.number = "number"
request.code = "code"

val response: ApiResponse<CodeVerifyResponse> = sms.verifyCode(request)
val error: Array<String> = response.error // List of errors, if request was successful list will be empty
val codeVerifyResponse: CodeVerifyResponse = response.respond

Przykładowa odpowiedź prawidłowej transakcji od simpay:

{
  "respond": {
    "status": "OK",
    "test": 1,
    "from": 123123123,
    "number": 7055,
    "value": 0.5
  },
  "error": []
}

Weryfikacja kodu odbywa się za pomocą wysłania zapytania metodą POST do serwera simpay.pl

Gotowe skrypty do obsługi SMS w PHP: https://github.com/SimPaypl/SimPay-API-php/tree/master/examples/sms

HTTPS Request

POST https://simpay.pl/api/status

Parametry

Parametr Wymagany Typ Opis
api Tak text Klucz API dostępny w panelu klienta
secret Tak text Sekretny klucz dostępny w panelu klienta
service_id Tak int ID (numer) usługi z panelu klienta
number Nie int Number na jaki miał zostać wysłany SMS, w przypadku nie podania numeru API zwróci parametr "number", po którym można weryfikować czy sms został wysłany na poprawny numer.
code Tak text Kod zwrotny z SMS

Informacje zwrotne

Parametr Opis
status Status transakcji, powinien być "OK"
test Jeżeli był to testowy sms, zwraca 1
from Numer z jakiego został wysłany
number Numer na jaki został wysłany
value Wartość kodu SMS

Pobieranie listy usług

<?php
$cfg = array(
  /*
  * Klucz API usługi
  * Typ pola string
  */
  'key' => '3c7f4b55',
  /*
  * Sekretny klucz konta z panelu simpay.pl
  * Typ pola string
  */
  'secret' => '1663121e0b37857519383b8f088efafb',
);

$ch = curl_init('https://simpay.pl/api/get_services');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('params' => array_merge($cfg))));
$result = curl_exec($ch);
curl_close($ch);

print_r($result);
<?php
require_once('vendor/autoload.php');

use simpay\Sms;

$cfg = array(
    'simpay' => array(
        'debug' => false,
        /*
        *   Klucz API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiKey' => '3c7f4b55',
        /*
        *   Hasło API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiSecret' => '1663121e0b37857519383b8f088efafb'
    )
);

$api = new Sms($cfg['simpay']['apiKey'], $cfg['simpay']['apiSecret']);

try {
    print_r($api->getServices());
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
curl -XPOST -d '{
  "params": {
    "key": "3c7f4b55",
    "secret": "1663121e0b37857519383b8f088efafb"
  }
}' 'https://simpay.pl/api/get_services'
Sms sms = new Sms();
Sms sms = new Sms("key","secret");


ServiceListRequest request = new ServiceListRequest();
request.setKey("key");
request.setSecret("secret");
APIResponse<ServicesResponse> response = sms.getServiceList(request);
List<String> error = response.getError(); // List of errors, if request was successful list will be empty
ServicesResponse serviceList = response.getRespond();
String status = serviceList.getStatus(); // Status received from api
List<Service> services = serviceList.getServices(); // List of services
Sms sms = new Sms();
Sms sms = new Sms("key","secret");


ServiceListRequest request = new ServiceListRequest();
request.setKey("key");
request.setSecret("secret");
APIResponse<ServicesResponse> response = sms.getServiceList(request);
List<String> error = response.getError(); // List of errors, if request was successful list will be empty
ServicesResponse serviceList = response.getRespond();
String status = serviceList.getStatus(); // Status received from api
List<Service> services = serviceList.getServices(); // List of services
from payments.sms import SMS

sms = SMS("API_KEY", "API_SECRET", "SERVICE_ID")

response = sms.get_service_list(request={})
val sms: Sms =  Sms()

val request: ServiceListRequest = ServiceListRequest("API_KEY", "API_SECRET")

request.key = "key" // can be omitted  by passing value in constructor
request.secret = "API_SECRET" // ca
// n be omitted  by passing value in constructor
val response: ApiResponse<ServicesResponse> = sms.getServiceList(request)
val error: Array<String> = response.error // List of errors, if request was successful list will be empty
val serviceList: ServicesResponse = response.respond

Przykładowa odpowiedź API simpay.pl

{
  "respond": {
    "status": "OK",
    "services": [
      {
        "id": 1111,
        "sufix": "TESTPAY",
        "numbers": [
          "7055",
          "7136",
          "7255",
          "7355",
          "7455",
          "7555",
          "7636",
          "77464",
          "78464",
          "7936",
          "91055",
          "91155",
          "91455",
          "91664",
          "91955",
          "92055",
          "92555"
        ]
      },
      {
        "id": 1112,
        "sufix": "PAYTEST",
        "numbers": [
          "7055",
          "7136",
          "7255",
          "7355",
          "7455",
          "7555",
          "7636",
          "77464",
          "78464",
          "7936",
          "91055",
          "91155",
          "91455",
          "91664",
          "91955",
          "92055",
          "92555"
        ]
      }
    ]
  },
  "error": []
}

HTTPS Request

POST https://simpay.pl/api/get_services

Parametry

Parametr Wymagany Typ Opis
api Tak text Klucz API dostępny w panelu klienta
secret Tak text Sekretny klucz dostępny w panelu klienta

Przykłada arraya: array('params' => array('api' => '123123123', 'secret' => '1111111111111111'))

SMS XML

Wstep

SMS Api XML pozwala kontrolować cały proces otrzymania sms'a oraz wysyłki kodu po stronie serwisu partnerta.

Partner przygotowuje link URL zgodnie z opisaną specyfikacją SimPay.

W momencie złożenia przez użytkownika zamówienia (wysłanie wiadomości SMS), nasz system odpytuje URL podany przez partnera oraz pobiera kod bezpośrednio.

Odbieranie informacji o SMS

Zalecamy wykorzystanie gotowej biblioteki do obsługi: https://github.com/SimPaypl/SimPay-API-php

<?php
$cfg = array(
    /*
        Klucz API usługi z panelu klienta
    */
    'key' => 'eRWNdXmltb7GVTPz'
);

function generateCode() {
    $charset = 'ABCDEFGHIJKLMNPQRSTUVWXYZ123456789';
    $length = 6;

    $str = '';
    $count = strlen($charset);

    while ($length--) {
        $str .= $charset[mt_rand(0, $count-1)];
    }

    return $str;
}

function generateXml($text) {
    return 
        '<?xml version="1.0" encoding="UTF-8"?>
            <sms-response>
                <sms-text>' . iconv('utf-8', 'ascii//TRANSLIT', $text) . '</sms-text>
            </sms-response>';
}

$arrayCodes = array(
    array('7055', 0.25),
    array('7136', 0.5),
    array('7255', 1),
    array('7355', 1.5),
    array('7455', 2),
    array('7555', 2.5),
    array('7636', 3),
    array('77464', 3.5),
    array('78464', 4),
    array('7936', 4.5),
    array('91055', 5),
    array('91155', 5.5),
    array('91455', 7),
    array('91664', 8),
    array('91955', 9.5),
    array('92055', 10),
    array('92555', 12.5),
);

function getSmsValue($number) {
    global $arrayCodes;
    for ($iPosition = 0; $iPosition < count($arrayCodes); $iPosition++) {
        if ($arrayCodes[$iPosition][0] == $number) {
            return $arrayCodes[$iPosition][1];
        }
    }
}
/*
    Zamiana $_POST na obiekt
*/
$return = (object)$_POST;


/*
    Sprawdzanie czy wszystkie parametry dotarły
*/
if (!isset($return->sms_id, $return->sms_text, $return->send_number, $return->send_time, $return->sign)) {
    exit('Missing Parameters');
}
/*
    Sprawdzanie poprawności sygnatury
*/
if (hash('sha256', $return->sms_id . $return->sms_text . $return->sms_from . $return->send_number . $return->send_time . $cfg['key']) != $return->sign) {
    exit('Wrong Sign');
}
/*
    Tutaj należy wykonać wpis np. w bazie danych MySQL, zawierający kod sms i wartość,
    wpis ten pozwoli zweryfikować kod, który wpisze klient na stronie partnera.

    Numer na jaki został wysłany sms:
        * $return->send_number
    Treść na jaką został wysłany sms:
        * $return->sms_text
    Numer z jakiego został wysłany sms:
        * $return->sms_from
    Kwona na jaką został wysłany sms, netto:
        * getSmsValue($return->sms_number)
    Data i godzina o jakiej został wysłany sms:
        * $return->send_time
    ID smsa:
        * $return->sms_id

*/

ob_clean();
header("Content-Type: text/xml");
/*
    Tutaj, można ustalić jaką dokładnie treść SMSa się chce, można w nim wpisać dosłownie wszystko :)
    Oprócz polskich znaków
*/
$return = generateXml('Twoj kod to: ' . generateCode());
echo $return;
<?php
require_once('vendor/autoload.php');

use simpay\SmsXml;

$cfg = array(
    /*
        Klucz API usługi z panelu klienta
    */
    'key' => 'eRWNdXmltb7GVTPz'
);

$simPay = new SmsXml($cfg['key']);

//Parsowanie danych otrzymanych POST do danych zawartych w klasie i możliwych do pobrania poprzez metody
$smsObject = $simPay->parseSMS($_POST);

//Sprawdzenie czy przy parsowaniu wystąpił błąd
if ($simPay->isError()) {
    exit($simPay->getErrorText());
}

//Pobranie różnych części SMS'a np. SIM.TEST zwróci nam tablicę [ 'SIM' , 'TEST' ] lub SIM.TEST.TRESC zwróci nam [ 'SIM' , 'TEST' , 'TRESC' ] itp. itd.
$arrayPieces = $smsObject->getPieces();

//Generowanie kodu do zwrotu
$smsCode = $simPay->generateCode();

//Pozwala pobrać wartośc kodu sms jako kwota netto
$smsObject->getValue(); 

/*
    Tutaj należy wykonać wpis np. w bazie danych MySQL, zawierający kod sms i wartość,
    wpis ten pozwoli zweryfikować kod, który wpisze klient na stronie partnera.

*/

//Generowanie XML'a do wysyłki ( nie można używać polskich znaków treści sms'a )
$return = $simPay->generateXml('Twoj kod doladowania to ' . $smsCode);

exit($return)
SmsXml smsXml = new SmsXml("apikey");
String code = smsXml.generateCode(); // Generate code
double number = smsXml.getSmsValue("number"); // retrieve information's about sms
String sms = smsXml.generateXml("sms"); // Generate xml from sms message
boolean ip = smsXml.getServersIp("ip"); // Check if passed ip is valid ip of simpay servers
SmsXml smsXml = new SmsXml("apikey");
String code = smsXml.generateCode(); // Generate code
double number = smsXml.getSmsValue("number"); // retrieve information's about sms
String sms = smsXml.generateXml("sms"); // Generate xml from sms message
boolean ip = smsXml.getServersIp("ip"); // Check if passed ip is valid ip of simpay servers
from payments.sms_xml import SMS_XML

code = SMS_XML.generateCode() # Generate code
val smsXml: SmsXml = SmsXml("apikey")

val code: String = smsXml.generateCode() // Generate code
val number: Int = smsXml.getSmsValue("number") // retrieve information"s about sms
val sms: String = smsXml.generateXml("sms") // Generate xml from sms message
val ip: Boolean = smsXml.getServersIp("ip") // Check if passed ip is valid ip of simpay servers

DirectBilling

Najnowsze wersje bibliote znajdują się w repozytorium SimPay na platformie Github.

Gotowe biblioteki Directbilling: PHP NodeJs TypeScript Python Kotlin

Generowanie transakcji

<?php
$cfg = array(
  /*
  * Tryb debugowania
  * Typ pola bolean true/false
  * Opis Ustawienie pola na TRUE, włączna tryb debugowania, który wyświetla błędy np. w konfiguracji.
  */
  'debugMode' => TRUE,
  /*
  * ID usługi
  * Typ pola int, np. 60
  * Opis ID Usługi DirectCarrierBilling z panelu simpay.pl, 
  */
  'serviceId' => 1,
  /*
  * Klucz API usługi
  * Typ pola string
  */
  'apiKey' => 'lNEEDQPfPKHleZdd',
  /*
  * Control
  * Typ pola string
  */
  'control' => 112,
  /*
  * Adres URL do powrotu po prawidłowej transakcji
  * Typ pola string
  * Opis Użytkownik jest przekierowywany na ten adres po prawidłowo zakończonej transakcji.
  */
  'completeUrl' => 'https://api.systemy.net/simpay/complete.php',
  /*
  * Adres URL do powrotu po nieudanej transakcji
  * Typ pola string
  * Opis Użytkownik jest przekierowywany na ten adres po nieprawidłowo zakończonej transakcji.
  */
  'failureUrl' => 'https://api.systemy.net/simpay/failure.php',
  /*
  * Kwota transakcji
  * Typ pola float
  */
  'amount' => 10.00,
  /*
  * Typ ustalania prowizji
  * Typ pola enum?
  * Opis
   -> Ustawienie opcji amount
   -> Ustawienie opcji amount_gross
   -> Ustawienie opcji amount_required
  */
  'amountType' => 'amount'
);

$array = array(
  'serviceId' => $cfg['serviceId'],
  'control' => $cfg['control'],
  'complete' => $cfg['completeUrl'],
  'failure' => $cfg['failureUrl'],
  'sign' => hash('sha256', $cfg['serviceId'] . $cfg['amount'] . $cfg['control'] . $cfg['apiKey'])
);

if ($cfg['amountType'] == "amount") {
  $array['amount'] = $cfg['amount'];
} elseif ($cfg['amountType'] == "amount_gross") {
  $array['amount_gross'] = $cfg['amount'];
} else {
  $array['amount_required'] = $cfg['amount'];
}


$ch = curl_init('https://simpay.pl/db/api');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result);

if ($result->status == "success") {
  /*
  * Transakcja wygenerowana poprawnie, tutaj następuje przekierowanie użytkownika
  * do strony płatności. Można dodać tu zapytanie do bazy MySQL tworzące wpis z informacjami o danej płatności
  */
  header('Location: ' . $result->link);
  exit();
} else {
  echo 'Wystąpił błąd podczas generowania transakcji.';
}
<?php
require_once('vendor/autoload.php');

use simpay\DirectbillingTransactions;

$cfg = array(
    'simpay' => array(
        /*
            Tryb debugowania
            Typ pola bolean true/false
            Opis Ustawienie pola na TRUE, włączna tryb debugowania, który wyświetla błędy np. w konfiguracji.
        */
        'debugMode' => false,
        /*
            ID usługi
            Typ pola int, np. 60
            Opis ID Usługi DirectCarrierBilling z panelu simpay.pl,
        */
        'serviceId' => 1,
        /*
            Klucz API usługi
            Typ pola string
        */
        'apiKey' => 'lNEEDQPfPKHleZdd',
        /*
            Control
            Typ pola string
        */
        'control' => 112,
        /*
            Adres URL do powrotu po prawidłowej transakcji
            Typ pola string
            Opis Użytkownik jest przekierowywany na ten adres po prawidłowo zakończonej transakcji.
        */
        'completeUrl' => 'https://api.systemy.net/simpay/complete.php',
        /*
            Adres URL do powrotu po nieudanej transakcji
            Typ pola string
            Opis Użytkownik jest przekierowywany na ten adres po nieprawidłowo zakończonej transakcji.
        */
        'failureUrl' => 'https://api.systemy.net/simpay/failure.php',
        /*
            Kwota transakcji
            Typ pola float
        */
        'amount' => 10.00,
        /*
            Typ ustalania prowizji
            Typ pola enum?
            Opis:
                -> Ustawienie opcji amount
                -> Ustawienie opcji amount_gross
                -> Ustawienie opcji amount_required
        */
        'amountType' => 'amount'
    )
);


$simpayTransaction = new DirectbillingTransactions();
$simpayTransaction->setDebugMode($cfg['simpay']['debugMode']);
$simpayTransaction->setServiceID($cfg['simpay']['serviceId']);
$simpayTransaction->setApiKey($cfg['simpay']['apiKey']);
$simpayTransaction->setControl($cfg['simpay']['control']);
$simpayTransaction->setCompleteLink($cfg['simpay']['completeUrl']);
$simpayTransaction->setFailureLink($cfg['simpay']['failureUrl']);
if ($cfg['simpay']['amountType'] == "amount") {
    $simpayTransaction->setAmount($cfg['simpay']['amount']);
} elseif ($cfg['simpay']['amountType'] == "amount_gross") {
    $simpayTransaction->setAmountGross($cfg['simpay']['amount']);
} else {
    $simpayTransaction->setAmountRequired($cfg['simpay']['amount']);
}
$simpayTransaction->generateTransaction();

if ($simpayTransaction->getResults()->status == "success") {
    /*
        Tutaj należy przekierować użytkownika używając np. header('Location: ' . $simpayTransaction->getResults()->link);
        Można dodać tutaj kod, który doda rekord do bazy zapisujący np pole typu control itd.
    */
    echo $simpayTransaction->getResults()->link;
} else {
    echo 'Generowanie transakcji nie powiodło się!';
}
curl -XPOST -d '{
  "serviceId": "91",
  "control": "112",
  "amount_gross": "10.00",
  "complete": "https://api.systemy.net/simpay/complete.php",
  "failure": "https://api.systemy.net/simpay/complete.php",
  "sign": "sha256sign"
}' 'https://simpay.pl/db/api'
DirectBilling directBilling = new DirectBilling();
DirectBilling directBilling = new DirectBilling("apiKey", "secret", false, 1);

DbGenerateRequest request = new DbGenerateRequest();
request.setAmount("amount");
request.setAmount_gross("amount_gross");
request.setAmount_required("amount_required");
request.setComplete("complete");
request.setFailure("failure");
request.setProvider(Operator.ORANGE); // orange, play, t-mobile, plus-gsm
request.setControl("control");
request.setServiceId(1);

DbGenerateResponse dbGenerateResponse = directBilling.generateTransaction(request);
dbGenerateResponse.getLink(); // Link
dbGenerateResponse.getName(); // Transaction Name
dbGenerateResponse.getStatus(); // Status received from api
DirectBilling directBilling = new DirectBilling();
DirectBilling directBilling = new DirectBilling("apiKey", "secret", false, 1);

DbGenerateRequest request = new DbGenerateRequest();
request.setAmount("amount");
request.setAmount_gross("amount_gross");
request.setAmount_required("amount_required");
request.setComplete("complete");
request.setFailure("failure");
request.setProvider(Operator.ORANGE); // orange, play, t-mobile, plus-gsm
request.setControl("control");
request.setServiceId(1);

DbGenerateResponse dbGenerateResponse = directBilling.generateTransaction(request);
dbGenerateResponse.getLink(); // Link
dbGenerateResponse.getName(); // Transaction Name
dbGenerateResponse.getStatus(); // Status received from api
from payments.direct_billing import DirectBilling

db = DirectBilling("API_KEY", "API_SECRET", True, "SERVICE_ID") # True stands for debug mode

response = db.generate_transaction(api_key="XXXXXXXXXXXX",request={"control": "XXXXXX", "amount": 10.00}) # and others variables
val directBilling: DirectBilling = DirectBilling()

val request: DbGenerateRequest = DbGenerateRequest("SERVICE_ID")

request.amount = "amount" 
request.control = "control" 

val dbGenerateResponse: DbGenerateResponse = directBilling.generateTransaction(API_KEY, request)

Przykładowa odpowiedź serwera gdy transakcja została prawidłowo wygenerowana

{
  "status": "success",
  "link": "https://simpay.pl/db/pay/FPEZ3DBaCkGu47YKvXbt1hpJigz0jRAd",
  "name": "FPEZ3DBaCkGu47YKvXbt1hpJigz0jRAd",
}

Generowanie transakcji odbywa się poprzez wysłanie zapytania POST do serwera simpay.pl z odpowiednimi parametrami, który zwróci dane, na które np. należy przekierować użytkownika. Serwer API simpay.pl zwraca odpowidź za pomocą JSON

Gotowe skrypty do generowania transakcji DirectBilling w PHP https://github.com/SimPaypl/SimPay-API-php/tree/master/examples/directbilling/generate

HTTPS Request

POST https://simpay.pl/db/api

Parametry

Parametr Wymagany Typ Opis
serviceId Tak int ID usługi z panelu klienta simpay
control Tak text Pole dla partnera do przechowywania informacji o płatności, np. numeru zamówienia itd.
amount,amount_gross,amount_required Tak text W tym paremetrze można użyć jednej z trzech metod, amount - kwota netto jaką ma kosztować transakcja, amount_gross - kwota brutto, amount_required - kwota jaką ma uzyskać partner niezależnie od wybranego przez klienta operatora.
complete Nie URL Link na jaki ma zostać przekierowany klient po prawidłowej transakcji.
failure Nie URL Link na jaki ma zostać przekierowany klient po nieprawidłowej transakcji.
provider Nie int Wyznaczenie operatora transakcji, 1 – Orange, 2 – Play, 3 – T-Mobile, 4 – Plus GSM
sign Tak text Sygnatura transakcji tworzona za pomocą szyfrowania sha256. Przykład hash('sha256', serviceId . amount . control . apiKey)

Generowanie transakcji HTML

<form action="https://simpay.pl/db/" method="POST">
  <input type="hidden" name="amount_gross" value="50">
  <input type="hidden" name="serviceId" value="1">
  <input type="hidden" name="control" value="112">
  <input type="hidden" name="failure" value="https://simpay.pl/ok">
  <input type="hidden" name="complete" value="https://simpay.pl/fail">
  <button type="submit">Zapłać</button>
</form>

HTTPS Request

POST https://simpay.pl/db/

Parametry

Parametr Wymagany Typ Opis
serviceId Tak int ID usługi z panelu klienta simpay
control Tak text Pole dla partnera do przechowywania informacji o płatności, np. numeru zamówienia itd.
amount,amount_gross,amount_required Tak text W tym paremetrze można użyć jednej z trzech metod, amount - kwota netto jaką ma kosztować transakcja, amount_gross - kwota brutto, amount_required - kwota jaką ma uzyskać partner niezależnie od wybranego przez klienta operatora.
complete Nie URL Link na jaki ma zostać przekierowany klient po prawidłowej transakcji.
failure Nie URL Link na jaki ma zostać przekierowany klient po nieprawidłowej transakcji.
provider Nie int Wyznaczenie operatora transakcji, 1 – Orange, 2 – Play, 3 – T-Mobile, 4 – Plus GSM

Odbieranie transakcji

<?php
$cfg = array(
  /*
  * Klucz API z panelu
  */
  'apiKey' => 'yjhy45ffgbxv',
  /*
  * ID Usługi z panelu simpay
  */
  'serviceId' => 1111,
  /*
  * Kwota jaką miała kosztować usługa
  */
  'amount' => 22.50
);

function getRemoteAddr() {
    return getenv('HTTP_CLIENT_IP') ?: getenv('HTTP_X_FORWARDED_FOR'[0]) ?: getenv('HTTP_X_FORWARDED') ?: getenv('HTTP_FORWARDED_FOR') ?: getenv('HTTP_FORWARDED') ?: getenv('REMOTE_ADDR');
}

function checkIp($ip) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, 'https://simpay.pl/api/get_ip');
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_FAILONERROR, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $call = curl_exec($curl);
    $response = json_decode($call);
  $error = curl_errno($curl);
  curl_close($curl);

  if (in_array($ip, $response->respond->ips)) {
    return true;
  } else {
    return false;
  }

}

if (!checkIp(getRemoteAddr())) {
  exit('OK');
}

if (!isset($_POST['id'], $_POST['status'], $_POST['valuenet_gross'], $_POST['valuenet'], $_POST['valuepartner'], $_POST['control'], $_POST['sign'])) {
    exit('OK');
}

$json = (object)$_POST;

/*

* ID Trsanakcji
$json->id;

* Status transakcji
$json->status;

* Kwota transakcji brutto
$json->valuenet_gross;

* Kwota transakcji netto
$json->valuenet;

* Kwota z tranakcji jaką otrzymał partner
$json->valuepartner;

* Pole do wykorzystania przez parnera, np do przechowywania informacji o płatności
$json->control;

* Pole, które pozwala zweryfikować poprawność transakcji, a także pochodzenie notyfikacji
$json->sign;

*/

if ($json->status != "ORDER_PAYED") {
  exit('OK');
}

if ($json->sign != hash('sha256', $json->id . $json->status . $json->valuenet . $json->valuepartner . $json->control . $cfg['apiKey'])) {
  exit('OK');
}

if ($json->valuenet_gross != $cfg['amount']) {
  exit('OK');
}

/*
* Tutaj można wykonywać zapytanie do bazy MySQL ze statusem iż transakcja jest prawidłowa
*/

ob_clean();
exit('OK');

<?php
require_once('vendor/autoload.php');

use simpay\Components;
use simpay\Directbilling;

$components = new Components();

$cfg = array(
    'simpay' => array(
        /*
            Klucz API usługi
            Typ pola string
        */
        'apiKey' => 'lNEEDQPfPKHleZdd',
    )
);

$simPay = new Directbilling($cfg['simpay']['apiKey']);

$simPay->setApiKey($cfg['simpay']['apiKey']);

if (!$components->checkIp($components->getRemoteAddr())) {
    $simPay->okTransaction();
    exit();
}

//Parsowanie informacji pobranych z POST
if ($simPay->parse($_POST)) {
    //Sprawdzenie czy parsowanie przebiegło pomyslnie
    if ($simPay->isError()) {
        //Zwrócenie że transakcja została pomyślnie odebrana przez partnera
        $simPay->okTransaction();
        exit();
    }


    //Sprawdzenie czy transakcja została opłacona
    if (!$simPay->isTransactionPaid()) {
        error_log($simPay->getErrorText());
    }
} else {
    //Sprawdzenie typu błedu
    error_log($simPay->getErrorText());
}

//$simPay->getStatus() - Obecny status transakcji
//$simPay->getValuePartner() - Ile partner rzeczywiście uzyskał prowizji
//$simPay->getControl() - Wartość control wysłana przy starcie transakcji

/*
* Tutaj można wykonywać zapytanie do bazy MySQL ze statusem iż transakcja jest prawidłowa
*/

$simPay->okTransaction();
exit();

SimPay zwraca informacje o statusie transakcji w formie zapytania na wcześniej ustalony link przez Partnera np. www.serwis_partnera.pl/payment/dbNotify.php.

SimPay domyślnie zakłada lokalizacje pliku w serwisie Partnera niezbędnego do odbioru powiadomień o transakcji. Można go sprawdzić logując się do Panelu Partnera, a następnie przechodząc do szczegółów dodanej usługi. W przypadku chęci zmiany adresu – prosimy o kontakt.

Odbieranie transakcji polega na odczytaniu danych wysłanych za pomocą metody $_POST.

Gotowe skrypty do obierania transakcji DirectBilling w PHP https://github.com/SimPaypl/SimPay-API-php/tree/master/examples/directbilling/ipn

Informacje zwrotne

Parametr Opis
id ID transakcji
status Status transakcji, prawidłowy powinien być ORDER_PAYED
valuenet Kwota jaką kosztowała transakcja netto
valuenet_gross Kwota jaką kosztowała transakcja brutto
valuepartner Prowizja jaką dostanie partner z transakcji
control Pole przechowujące dane wysłane przez partnera przy generowaniu transakacji
number_from Numer telefonu z jakiego została przeprowadzona transakcja
sign Podpis transakcji, należy weryfikować jego poprawność z nowo wygenerowanym podpisem w następujący sposób sha256(id . status . valuenet . valuepartner . control . apiKey)

Pobieranie danych o transakcji

<?php
$cfg = array(
  /*
  * ID płatności lub indetyfikator transakcji wygenerowany przez api ( np. FPEZ3DBaCkGu47YKvXbt1hpJigz0jRAd )
  * Typ pola int, np. 21463
  * Opis ID płatności DirectCarrierBilling z panelu simpay.pl, 
  */
  'id' => 167276,
  /*
  * Klucz API usługi
  * Typ pola string
  */
  'key' => '85ea5d9f',
  /*
  * Sekretny klucz konta z panelu simpay.pl
  * Typ pola string
  */
  'secret' => 'a9080633d304214e466ca9dec2ee4606',
);


$ch = curl_init('https://simpay.pl/api/db_status');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('params' => array_merge($cfg))));
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result);

print_r($result);

/*
*
* $result->respond->id
* $result->respond->status
* $result->respond->valuenet
* $result->respond->valuenet_gross
* $result->respond->valuepartner
* $result->respond->control
* $result->respond->number_from
* $result->respond->sign
*
*/

<?php
require_once('vendor/autoload.php');

use simpay\Directbilling;

$cfg = array(
    'simpay' => array(
        /*
        *   Klucz API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiKey' => '3c7f4b55',
        /*
        *   Hasło API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiSecret' => '1663121e0b37857519383b8f088efafb',
        /*
        *   Id usługi lub klucz "name" z generowania płatności
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'id' => 'FPEZ3DBaCkGu47YKvXbt1hpJigz0jRAd'
    )
);

$api = new Directbilling('', [$cfg['simpay']['apiKey'], $cfg['simpay']['apiSecret']]);

try {
    print_r($api->getServices());
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
curl -XPOST -d '{
  "params": {
    "key": "3c7f4b55",
    "secret": "1663121e0b37857519383b8f088efafb",
    "id": "FPEZ3DBaCkGu47YKvXbt1hpJigz0jRAd"
  }
}' 'https://simpay.pl/api/db_status'
DirectBilling directBilling = new DirectBilling();
DirectBilling directBilling = new DirectBilling("apiKey", "secret", false, 1);

DbTransactionRequest request = new DbTransactionRequest();
request.setId(1);
request.setKey("key"); // can be omitted  by passing value in constructor
request.setSecret("secret");  // can be omitted  by passing value in constructor

APIResponse<DbTransaction> response = directBilling.getTransaction(request);
List<String> error = response.getError(); // List of errors, if request was successful list will be empty
DbTransaction respond = response.getRespond();
directBilling: DirectBilling  = new DirectBilling();
directBilling: DirectBilling  = new DirectBilling('apiKey', 'secret', false, '1');

request: DbTransactionRequest = new DbTransactionRequest();
request.id = 1;
request.key = 'key'; // can be omitted  by passing value in constructor
request.secret = 'secret';  // can be omitted  by passing value in constructor

response: APIResponse<DbTransaction>  = directBilling.getTransaction(request);
error: string[] = response.error; // List of errors, if request was successful list will be empty
respond: DbTransaction = response.respond;
from payments.direct_billing import DirectBilling

db = DirectBilling("API_KEY", "API_SECRET", True, "SERVICE_ID") # True stands for debug mode

response = db.get_transaction(request={"id": "TRANSACTION_ID"})
val directBilling: DirectBilling = DirectBilling()

val request: DbTransactionRequest = DbTransactionRequest()
request.id = 1 // can be omitted  by passing value in constructor
request.key = "key" // can be omitted  by passing value in constructor
request.secret = "API_SECRET"  // can be omitted  by passing value in constructor

val response: ApiResponse<DbTransaction> = directBilling.getTransaction(request)
val error: Array<String> = response.error // List of errors, if request was successful list will be empty
val respond: DbTransaction = response.respond // can be omitted  by passing value in constructor

Przykładowa odpowiedź od simpay.pl

{
  "respond": {
    "status": "ORDER_PAYED",
    "id": 1122,
    "valuenet": 19.39,
    "valuenet_gross": 23.85,
    "valuepartner": 9.69,
    "control": "controlId",
    "number_from": 48123123123,
    "sign": "817ddd019becd4b1d7dft04ba4cadc7635e1f1dcba52dc4d320c8163b26c76d1"
  },
  "error": []
}

Pobieranie danych o danej transakcji poprzez wysłanie zapytania do serwera API simpay.pl

HTTPS Request

POST https://simpay.pl/api/db_status

Parametry do zapytania

Parametr Wymagany Typ Opis
key Tak text Klucz API dostępny w panelu klienta
secret Tak text Sekretny klucz dostępny w panelu klienta
id Tak int ID transakcji

Parametry jakie możemy odebrać

Parametr Opis
id ID płatności lub indetyfikator transakcji wygenerowany przez api ( np. FPEZ3DBaCkGu47YKvXbt1hpJigz0jRAd )
status Status płatności
valuenet Kwota płatności netto
valuenet_gross Kwota płatności brutto
valuepartner Kwota jaką otrzymał partner z transakcji
control Pole control dla partnera
number_from Numer z jakiego została przeprowadzona transakacja
sign Podpis transakcji

Pobieranie listy usług DCB

<?php
$cfg = array(
  /*
  * Klucz API usługi
  * Typ pola string
  */
  'key' => '3c7f4b55',
  /*
  * Sekretny klucz konta z panelu simpay.pl
  * Typ pola string
  */
  'secret' => '1663121e0b37857519383b8f088efafb',
);

$ch = curl_init('https://simpay.pl/api/get_services_db');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('params' => array_merge($cfg))));
$result = curl_exec($ch);
curl_close($ch);

print_r($result);
<?php
require_once('vendor/autoload.php');

use simpay\Directbilling;

$cfg = array(
    'simpay' => array(
        'debug' => false,
        /*
        *   Klucz API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiKey' => '3c7f4b55',
        /*
        *   Hasło API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiSecret' => '1663121e0b37857519383b8f088efafb'
    )
);

$api = new Directbilling('', [$cfg['simpay']['apiKey'], $cfg['simpay']['apiSecret']]);

try {
    print_r($api->getServices());
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
curl -XPOST -d '{
  "params": {
    "key": "3c7f4b55",
    "secret": "1663121e0b37857519383b8f088efafb"
  }
}' 'https://simpay.pl/api/get_services_db'
DirectBilling directBilling = new DirectBilling();
DirectBilling directBilling = new DirectBilling("apiKey", "secret", false, 1);

DbServicesListRequest request = new DbServicesListRequest();
request.setApi("key"); // can be omitted  by passing value in constructor
request.setSecret("secret");  // can be omitted  by passing value in constructor

APIResponse<DbServicesListResponse> response = directBilling.getServices(request);
List<String> error = response.getError(); // List of errors, if request was successful list will be empty
DbTransaction respond = response.getRespond();
directBilling: DirectBilling  = new DirectBilling();
directBilling: DirectBilling  = new DirectBilling('apiKey', 'secret', false, '1');

request: DbServicesListRequest = new DbServicesListRequest();
request.api = 'key'; // can be omitted  by passing value in constructor
request.secret = 'secret';  // can be omitted  by passing value in constructor

response: APIResponse<DbServicesListResponse> = directBilling.getServices(request);
error: string[] = response.error; // List of errors, if request was successful list will be empty
respond: DbTransaction = response.respond;
from payments.direct_billing import DirectBilling

db = DirectBilling("API_KEY", "API_SECRET", True, "SERVICE_ID") # True stands for debug mode

response = db.get_services(request={})
val directBilling: DirectBilling = DirectBilling()

val request: DbServicesListRequest = DbServicesListRequest()
val request: DbServicesListRequest = DbServicesListRequest(API_KEY,API_SECRET)
request.key = "API_KEY" // can be omitted  by passing value in constructor
request.secret = "API_SECRET"  // can be omitted  by passing value in constructor

val response: ApiResponse<DbServicesListResponse> = directBilling.getServices(request)
val error: Array<String> = response.error // List of errors, if request was successful list will be empty
val respond: DbServicesListResponse = response.respond

Przykładowa odpowiedź API simpay.pl

{
  "respond": {
    "status": "OK",
    "services": [
      {
        "id": 1111,
        "sufix": "APITEST"
      }
    ]
  },
  "error": []
}

HTTPS Request

POST https://simpay.pl/api/get_services_db

Parametry

Parametr Wymagany Typ Opis
api Tak text Klucz API dostępny w panelu klienta
secret Tak text Sekretny klucz dostępny w panelu klienta

Przykłada arraya: array('params' => array('api' => '123123123', 'secret' => '1111111111111111'))

Pobieranie maksymalnych kwot transakcji

<?php
$cfg = array(
  /*
  * Klucz API usługi
  * Typ pola string
  */
  'key' => '3c7f4b55',
  /*
  * Sekretny klucz konta z panelu simpay.pl
  * Typ pola string
  */
  'secret' => '1663121e0b37857519383b8f088efafb',
  /*
  * ID usługi
  * Typ pola int, np. 60
  * Opis ID Usługi DirectCarrierBilling z panelu simpay.pl, 
  */
  'service_id' => '91',
);


$ch = curl_init('https://simpay.pl/api/db_hosts');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('params' => array_merge($cfg))));
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (isset($result['respond'])) {
    $respond = $result['respond'];

    /*
    * Orange, nr 0
    * $respond[0];
    * 
    * PLAY, nr 1
    * $respond[1];
    * 
    * T-Mobile, nr 2
    * $respond[2];
    * 
    * Plus, nr 3
    * $respond[3];
    * 
    * 
    * Maksymalna kwota, 3 to nr operatora
    * $respond[3]['max']
    */

    echo 'Maksymalna kwota dla Orange to: ' . $respond[0]['max'];

} else {
    exit('error');
}
<?php
require_once('vendor/autoload.php');

use simpay\Directbilling;

$cfg = array(
    'simpay' => array(
        'debug' => false,
        /*
        *   Klucz API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiKey' => '3c7f4b55',
        /*
        *   Hasło API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiSecret' => '1663121e0b37857519383b8f088efafb',
        /*
        *   ID Usługi directbilling
        */
        'serviceId' => 11,
        /*
        *   Operator, 1 = Orange, 2 = Play, 3 = T-Mobile, 4 = Plus, 0 = Wszyscy jak w przyjładowej odpowiedzi JSON
        */
        'operator' => 0,
    )
);

$api = new Directbilling(null, [$cfg['simpay']['apiKey'], $cfg['simpay']['apiSecret']]);

try {
    print_r($api->providersMaxAmount($cfg['serviceId'], $cfg['operator']));
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
curl -XPOST -d '{
  "params": {
    "key": "3c7f4b55",
    "secret": "1663121e0b37857519383b8f088efafb",
    "service_id": "91"
  }
}' 'https://simpay.pl/api/db_hosts'
DirectBilling directBilling = new DirectBilling();
DirectBilling directBilling = new DirectBilling("apiKey", "secret", false, 1);

DbTransactionLimitsRequest request = new DbTransactionLimitsRequest();
request.setService_id(1);
request.setApi("key"); // can be omitted  by passing value in constructor
request.setSecret("secret");  // can be omitted  by passing value in constructor

APIResponse<List<DbTransactionLimit>> response = directBilling.getTransactionLimits(request);
directBilling: DirectBilling = new DirectBilling();
directBilling: DirectBilling = new DirectBilling('apiKey', 'secret', false, '1');

request: DbTransactionLimitsRequest = new DbTransactionLimitsRequest();
request.service_id = '1';
request.api = 'key'; // can be omitted  by passing value in constructor
request.secret = 'secret';  // can be omitted  by passing value in constructor

response: APIResponse<LDbTransactionLimit[]> = directBilling.getTransactionLimits(request);
from payments.direct_billing import DirectBilling

db = DirectBilling("API_KEY", "API_SECRET", True, "SERVICE_ID") # True stands for debug mode

response = db.get_transaction_limits(request={})
val directBilling: DirectBilling = DirectBilling()

val request: DbTransactionLimitsRequest = DbTransactionLimitsRequest("SERVICE_ID")

request.key = "API_KEY"
request.secret = "API_SECRET"

val response: ApiResponse<List<DbTransactionLimit>> = directBilling.getTransactionLimits(request)
val error: Array<String> = response.error // List of errors, if request was successful list will be empty
val respond: List<DbTransactionLimit> = response.respond

Przykładowa odpowiedź API simpay.pl

{
  "respond": [
    {
      "id": 1,
      "name": "Orange",
      "max": "300"
    },
    {
      "id": 2,
      "name": "Play",
      "max": "600"
    },
    {
      "id": 3,
      "name": "T-mobile",
      "max": "250"
    },
    {
      "id": 4,
      "name": "Plus",
      "max": "400"
    }
  ],
  "error": []
}

HTTPS Request

POST https://simpay.pl/api/db_hosts

Parametry

Parametr Wymagany Typ Opis
api Tak text Klucz API dostępny w panelu klienta
secret Tak text Sekretny klucz dostępny w panelu klienta
service_id Tak text Id usługi directbilling

Przykłada arraya: array('params' => array('api' => '123123123', 'secret' => '1111111111111111'))

Pobieranie prowizji dla usługi

<?php
$cfg = array(
  /*
  * Klucz API usługi
  * Typ pola string
  */
  'key' => '3c7f4b55',
  /*
  * Sekretny klucz konta z panelu simpay.pl
  * Typ pola string
  */
  'secret' => '1663121e0b37857519383b8f088efafb',
  /*
  * ID usługi
  * Typ pola int, np. 60
  * Opis ID Usługi DirectCarrierBilling z panelu simpay.pl, 
  */
  'service_id' => '91',
);


$ch = curl_init('https://simpay.pl/api/db_hosts_commission');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array('params' => array_merge($cfg))));
$result = json_decode(curl_exec($ch), true);
curl_close($ch);

if (isset($result['respond'])) {
    $respond = $result['respond'];

    /*
    * Orange, nr 0
    * $respond[0];
    * 
    * PLAY, nr 1
    * $respond[1];
    * 
    * T-Mobile, nr 2
    * $respond[2];
    * 
    * Plus, nr 3
    * $respond[3];
    * 
    * 
    * Maksymalna kwota, 3 to nr operatora
    * $respond[3]['max']
    * 
    * 
    * Wyświetlanie prowizji, 0 to nr operatora
    * $respond[0]['commission_0'] - Prowizja w % w kwotach od 0 zł do 9,00 zł
    * $respond[0]['commission_9'] - Prowizja w % w kwotach od 9,01 zł do 25,00 zł
    * $respond[0]['commission_25'] - Prowizja w % w kwotach od 25,01 zł do maksymalnej kwoty operatora
    */

    echo 'Prowizja: ' . $respond[0]['commission_0'];

} else {
    exit('error');
}
<?php
require_once('vendor/autoload.php');

use simpay\Directbilling;

$cfg = array(
    'simpay' => array(
        'debug' => false,
        /*
        *   Klucz API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiKey' => '3c7f4b55',
        /*
        *   Hasło API z panelu
        *   Gdzie znaleźć? "simpay > panel > Konto Klienta > API"
        */
        'apiSecret' => '1663121e0b37857519383b8f088efafb'
    )
);

$api = new Directbilling(null, [$cfg['simpay']['apiKey'], $cfg['simpay']['apiSecret']]);

try {
    print_r($api->getHosts());
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
curl -XPOST -d '{
  "params": {
    "key": "3c7f4b55",
    "secret": "1663121e0b37857519383b8f088efafb",
    "service_id": "91"
  }
}' 'https://simpay.pl/api/db_hosts_commission'
DirectBilling directBilling = new DirectBilling();
DirectBilling directBilling = new DirectBilling("apiKey", "secret", false, 1);

DbServiceCommissionRequest request = new DbServiceCommissionRequest();
request.setService_id(1);
request.setApi("key"); // can be omitted  by passing value in constructor
request.setSecret("secret");  // can be omitted  by passing value in constructor

List<DbCommission> response = directBilling.getServiceCommission(request);
directBilling: DirectBilling = new DirectBilling();
directBilling: DirectBilling = new DirectBilling('apiKey', 'secret', false, '1');

request: DbServiceCommissionRequest = new DbServiceCommissionRequest();
request.service_id = '1';
request.api = 'key'; // can be omitted  by passing value in constructor
request.secret = 'secret';  // can be omitted  by passing value in constructor
from payments.direct_billing import DirectBilling

db = DirectBilling("API_KEY", "API_SECRET", True, "SERVICE_ID") # True stands for debug mode

response = db.get_service_commission(request={})
val directBilling: DirectBilling = DirectBilling()

val request: DbServiceCommissionRequest = DbServiceCommissionRequest()
val request: DbServiceCommissionRequest = DbServiceCommissionRequest("SERVICE_ID")


request.key = "API_KEY" 
request.secret = "API_SECRET"

val response: ApiResponse<List<DbCommission>> = directBilling.getServiceCommission(request)
val error: Array<String> = response.error // List of errors, if request was successful list will be empty
val respond: List<DbCommission> = response.respond

Przykładowa odpowiedź API simpay.pl

{
  "respond": [
    {
      "id": 1,
      "commission_0": "67",
      "commission_9": "67",
      "commission_25": "70"
    },
    {
      "id": 2,
      "commission_0": "55",
      "commission_9": "65",
      "commission_25": "70"
    },
    {
      "id": 3,
      "commission_0": "60",
      "commission_9": "60",
      "commission_25": "60"
    },
    {
      "id": 4,
      "commission_0": "50",
      "commission_9": "50",
      "commission_25": "60"
    }
  ],
  "error": []
}

HTTPS Request

POST https://simpay.pl/api/db_hosts_commission

Parametry

Parametr Wymagany Typ Opis
api Tak text Klucz API dostępny w panelu klienta
secret Tak text Sekretny klucz dostępny w panelu klienta
service_id Tak text Id usługi directbilling

Przykłada arraya: array('params' => array('api' => '123123123', 'secret' => '1111111111111111'))

Inne

Lista IP serwerów simpay

<?php

function getRemoteAddr() {
    return getenv('HTTP_CLIENT_IP') ?: getenv('HTTP_X_FORWARDED_FOR'[0]) ?: getenv('HTTP_X_FORWARDED') ?: getenv('HTTP_FORWARDED_FOR') ?: getenv('HTTP_FORWARDED') ?: getenv('REMOTE_ADDR');
}

$ch = curl_init('https://simpay.pl/api/get_ip');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result);

if ($result->respond->status == "OK") {

  if (in_array(getRemoteAddr, $result->respond->ips)) {
    /*
    * Adres IP poprawnie zweryfikowany.
    */
  } else {
    /*
    * Adresu IP nie przeszedł poprawnej weryfikacji.
    * Nie znaleziono takiego adresu na liście adresów simpay.png2wbmp
    */
  }
} else {
  /*
  * Nie udało się pobrać adresów.
  */
  exit('error');
}
<?php
require_once('vendor/autoload.php');

use simpay\Components;

$api = new Components(null, []);

try {
    print_r($api->getIp());
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}
curl -XGET 'https://simpay.pl/api/get_ip'
DirectBilling directBilling = new DirectBilling();

List<String> response = directBilling.getServersIp();
directBilling: DirectBilling = new DirectBilling();

response: string[] = directBilling.getServersIp();
from payments.direct_billing import DirectBilling

ips = DirectBilling.get_servers_ip()
val directBilling: DirectBilling = DirectBilling()

val response: List<String> = directBilling.getServersIp()

Przykładowa odpowiedź od simpay.pl

{
  "respond": {
    "status": "OK",
    "ips": [
      "54.38.143.44",
      "54.38.143.45"
    ]
  },
  "error": []
}

Funkcja zwraca adresy IP serwerów simpay.pl, potrzebne np. do zabezpieczenia IPNa

HTTPS Request

POST OR GET https://simpay.pl/api/get_ip

Kody błędów

Kody SMS

<?php

{
  "error": [
    {
      "error_code": "99",
      "error_name": "Empty API version; default 1",
      "error_value": null
    }
  ],
  "params": []
}
Kod Opis
001 Message ID already in our database.
002 Message number not exist in out database.
003 Service client no exist.
004 Service from baned client.
005 SMS to service from not verificated user.
006 Numbers not available in this service.
007 Message text is empty.
008 Service client no exist.
009
010
011 Message text prefix is incorrect.
012 Message text sufix is incorrect.
013 Service not found.
014 Service is not verification.
015 Service is currently not available.
016

Kody DirectBilling