NAV Navbar
php class

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

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('SimPay.class.php');

$cfg = 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' => '39599A'
);

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

  /*
  * Sprawdzanie czy kod jest prawidłowy
  */
    if ($api->check()) {
        /*
        *   Tutaj kod jest prawidłowy, można wykonać np. zapytanie do mysql.
        */
        echo 'Wprowadzono poprawny kod.';
    } elseif ($api->error() && $cfg['debug']) {
        echo 'Wystapil blad:<br/>';
        echo $api->pre($api->showError());
    } else {
        echo 'Wprowadzono nieprawidłowy kod.';
    }
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

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-SMS-API-php/tree/master/examples

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);
Aktualnie brak

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-SMS-XML-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>' . $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

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

require_once('SimPay.php');

$simPay = new SimPay();
$simPay->setApiKey($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)

DirectBilling

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

Gotowe biblioteki Directbilling: PHP NodeJs TypeScript

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('SimPayDB.php');
$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 SimPayDBTransaction();
$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ę!';
}

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

{
  "status": "success",
  "link": "https://simpay.pl/db/pay/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-DB-Api-PHP/tree/master/examples/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('SimPayDB.php');

$cfg = array(
  /*
  * Klucz API usługi
  * Typ pola string
  */
  'apiKey' => '3c7f4b55',
  'apiSecret' => '1663121e0b37857519383b8f088efafb'
);
$simPay = new SimPayDB();

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

if (!$simPay->checkIp($simPay->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();
    }

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

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

//Zwrócenie że transakcja została pomyślnie odebrana przez partnera
//Wartość zwracana przez partnera powinna zawierać tylko "OK". System SimPay uzna wtedy, że transakcja została poprawnie obsłużona i nie będzie ponawiał zapytań do serwisu partnera.
$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-DB-Api-PHP/tree/master/examples/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
  * 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
*
*/

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
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);
Aktualnie brak

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');
}

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');
}

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');
}

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