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 |