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.
Inne języki
Język | Odnośnik |
---|---|
Polski | https://docs.simpay.pl/pl/shell/#wstep |
English | https://docs.simpay.pl/en/shell/#wstep |
Gotowe biblioteki
Paginacja
Obiekt paginacji
"pagination": {
"total": 1,
"count": 1,
"per_page": 15,
"current_page": 1,
"total_pages": 1,
"links": {
"next_page": null,
"prev_page": null
}
}
Jeżeli w danym Requescie dostępna jest paginacja istnieje możliwość użycia poniższych Parametrów URL
Parametry URL
Nazwa | Typ | Opis |
---|---|---|
page | integer | Strona |
limit | integer | Limit wyników. domyślnie: 15, maksymalnie: 99 |
Opis obiektu
Nazwa | Typ | Opis |
---|---|---|
total | integer | Liczba wszystkich rekordów w obiekcie |
count | integer | Liczba rekordów na aktualnej stronie |
per_page | integer | Ilość rekordów maksymalnie na stronie |
current_page | integer | Aktualna strona |
total_pages | integer | Ilość wszystkich stron |
links[next_page] | string/null | URL następnej strony lub jeżeli nie istnieje null |
links[prev_page] | string/null | URL poprzedniej strony lub jeżeli nie istnieje null |
SMS
sms = SMS('0b4dca15', '3eea38f407073ff0abff956b57d71783');
Sms(string apiKey, string apiPassword) → Sms
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
key | string | Tak | Klucz API z panelu klienta |
password | string | Tak | Hasło API z panelu Klienta |
sms() → sms
Dostepne metody w obiekcie sms
Nazwa | Opis |
---|---|
get_service_list | Pobieranie listy usług |
get_service | Pobieranie informacji o usłudze |
get_transaction_list | Pobieranie listy transakcji |
get_transaction | Pobieranie informacji o transakcji |
get_service_numbers | Pobieranie dostępnych numerów dla usługi |
get_service_number | Pobieranie informacji o pojedyńcznym numerze usługi |
get_numbers | Pobieranie dostępnych numerów |
get_number | Pobieranie informacji o numerze |
verify_sms_code | Weryfikacja poprawności kodu |
Pobieranie listy usług
sms.get_service_list()
Przykładowa odpowiedź
[
{
id: 3549,
type: 'ONE_TIME_CODE',
status: 'service_active',
name: 'TEST',
prefix: 'SIM',
suffix: 'TESTSIMPAY',
adult: false,
created_at: 2021-11-08T17:18:53.000Z
}
]
get_service_list_paginated(page, limit) → array
- W tym zapytaniu dostępna jest paginacja! Przeczytaj na temat paginacji
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
page | integer | Nie | Numer strony |
limit | integer | Nie | Limit obiektów na strone |
Opis obiektu
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id usługi |
type | string | Typ usługi |
status | string | Status usługi. service_active - oznacza status aktywny |
name | string | Nazwa usługi |
prefix | string | Prefix treści SMS |
suffix | string | Suffix treści SMS |
adult | boolean | Czy usługa jest 18+ |
created_at | datetime | Data utworzenia usługi w formacie: ISO 8601 |
Pobieranie informacji o usłudze
sms.get_service(3549)
Przykładowa odpowiedź
{
id: 3549,
type: 'ONE_TIME_CODE',
status: 'service_active',
name: 'TEST',
prefix: 'SIM',
suffix: 'TESTSIMPAY',
description: 'Usługa testowa',
adult: false,
numbers: [
'7055', '7136', '7255',
'7355', '7455', '7555',
'7636', '77464', '78464',
'7936', '91055', '91155',
'91455', '91664', '91955',
'92055', '92555'
],
created_at: 2021-11-08T17:18:53.000Z
}
get_service(int serviceId) → object
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Nie | Id usługi |
Opis obiektu
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id Usługi |
type | string | Typ usługi |
status | string | Status usługi. service_active - oznacza status aktywny |
name | string | Nazwa usługi |
prefix | string | Prefix treści SMS |
suffix | string | Suffix treści SMS |
description | string | Opis usługi |
adult | boolean | Czy usługa jest 18+ |
numbers | array | Lista numerów SMS dostępnych w usłudze |
created_at | datetime | Data utworzenia usługi w formacie: ISO 8601 |
Pobieranie listy transakcji
sms.get_transaction_list(3549)
Przykładowa odpowiedź
[
{
id: 2216609,
from: 123123123,
code: '81FFC5',
used: true,
send_at: 2021-11-14T18:00:36.000Z
}
]
get_transaction_list_paginated(int serviceId, int page, int limit) → array
- W tym zapytaniu dostępna jest paginacja! Przeczytaj na temat paginacji
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Tak | Id usługi |
page | integer | Nie | Strona |
limit | integer | Nie | Limit obiektów na strone |
Opis obiektu
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id transakcji |
from | integer | Numer, z którego został wysłany SMS |
code | string | Kod zwrotny SMS |
used | boolean | Czy kod został wykorzystany |
send_at | datetime | Data wysłania SMSa w formacie: ISO 8601 |
Pobieranie informacji o transakcji
sms.get_transaction(3549, 2216609)
Przykładowa odpowiedź
{
id: 2216609,
from: 123123123,
code: '81FFC5',
used: true,
send_number: 7055,
value: 0.5,
send_at: 2021-11-14T18:00:36.000Z
}
get_transaction(int serviceId, int transactionId) → object
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Tak | Id usługi |
transactionId | integer | Nie | Id transakcji |
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id transakcji |
from | integer | Numer, z którego został wysłany SMS |
code | string | Kod zwrotny SMS |
used | bolean | Czy kod został wykorzystany |
send_number | integer | Numer na jaki został wysłany SMS |
value | float | Koszt wysłanego SMSa netto |
send_at | datetime | Data wysłania SMSa w formacie: ISO 8601 |
Pobieranie dostępnych numerów dla usługi
sms.get_service_numbers(3549)
Przykładowa odpowiedź
{
success: true,
data: [
{ number: 7055, value: 0.5, value_gross: 0.62, adult: false },
{ number: 7136, value: 1, value_gross: 1.23, adult: false },
{ number: 7255, value: 2, value_gross: 2.46, adult: false },
{ number: 7355, value: 3, value_gross: 3.69, adult: false },
{ number: 7455, value: 4, value_gross: 4.92, adult: false },
{ number: 7555, value: 5, value_gross: 6.15, adult: false },
{ number: 7636, value: 6, value_gross: 7.38, adult: false },
{ number: 7936, value: 9, value_gross: 11.07, adult: false },
{ number: 77464, value: 7, value_gross: 8.61, adult: false },
{ number: 78464, value: 8, value_gross: 9.84, adult: false },
{ number: 91055, value: 10, value_gross: 12.3, adult: false },
{ number: 91155, value: 11, value_gross: 13.53, adult: false },
{ number: 91455, value: 14, value_gross: 17.22, adult: false },
{ number: 91664, value: 16, value_gross: 19.68, adult: false },
{ number: 91955, value: 19, value_gross: 23.37, adult: false }
],
pagination: {
total: 17,
count: 15,
per_page: 15,
current_page: 1,
total_pages: 2,
links: {
next_page: 'https://api.simpay.pl/sms/3549/numbers?page=2',
prev_page: null
}
}
}
get_service_numbers_paginated(int serviceId, int page, int limit) → array
- W tym zapytaniu dostępna jest paginacja! Przeczytaj na temat paginacji
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Tak | Id usługi |
page | integer | Nie | Strona |
limit | integer | Nie | Limit obiektów na strone |
Opis obiektu
Nazwa | Typ | Opis |
---|---|---|
number | integer | Numer SMSa |
value | float | Kwota netto |
value_gross | float | Kwota brutto |
adult | boolean | Czy jest 18+ |
Pobieranie informacji o pojedyńcznym numerze
sms.get_service_number(3549, 7055)
Przykładowa odpowiedź
{
number: 7055
value: 0.5
value_gross: 0.62
adult: false
}
get_service_number(int serviceId, int number) → object
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Tak | Id usługi |
number | integer | Tak | Numer |
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
number | integer | Numer SMSa |
value | float | Kwota netto |
value_gross | float | Kwota brutto |
adult | boolean | Czy jest 18+ |
Pobieranie wszystkich dostępnych numerów
sms.get_numbers()
Przykładowa odpowiedź
{
success: true,
data: [
{ number: 7055, value: 0.5, value_gross: 0.62, adult: false },
{ number: 7255, value: 2, value_gross: 2.46, adult: false },
{ number: 7136, value: 1, value_gross: 1.23, adult: false },
{ number: 7355, value: 3, value_gross: 3.69, adult: false },
{ number: 7455, value: 4, value_gross: 4.92, adult: false },
{ number: 7555, value: 5, value_gross: 6.15, adult: false },
{ number: 7636, value: 6, value_gross: 7.38, adult: false },
{ number: 77464, value: 7, value_gross: 8.61, adult: false },
{ number: 78464, value: 8, value_gross: 9.84, adult: false },
{ number: 7936, value: 9, value_gross: 11.07, adult: false },
{ number: 91055, value: 10, value_gross: 12.3, adult: false },
{ number: 91155, value: 11, value_gross: 13.53, adult: false },
{ number: 91455, value: 14, value_gross: 17.22, adult: false },
{ number: 91664, value: 16, value_gross: 19.68, adult: false },
{ number: 91955, value: 19, value_gross: 23.37, adult: false }
],
pagination: {
total: 26,
count: 15,
per_page: 15,
current_page: 1,
total_pages: 2,
links: {
next_page: 'https://api.simpay.pl/sms/numbers?page=2',
prev_page: null
}
}
}
get_numbers_paginated(int page, int limit) → array
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
page | integer | Nie | Strona |
limit | integer | Nie | Limit obiektów na strone |
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
number | integer | Numer SMSa |
value | float | Kwota netto |
value_gross | float | Kwota brutto |
adult | boolean | Czy jest 18+ |
Pobieranie pojedyńczego numeru sms
get_number(int number) → object
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
number | integer | Tak | Numer |
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
number | integer | Numer SMSa |
value | float | Kwota netto |
value_gross | float | Kwota brutto |
adult | boolean | Czy jest 18+ |
Weryfikacja poprawności kodu
sms.verify_sms_code(3549, '81FFC5', 7055)
Przykładowa odpowiedź w przypadku nowego kodu
{
used: false,
code: '81FFC5',
test: true,
from: '123123123',
number: 7055,
value: 0.5,
}
Przykładowa odpowiedź w przypadku użytego kodu
{
used: true,
code: '81FFC5',
test: true,
from: '123123123',
number: 7055,
value: 0.5,
used_at: 2021-12-10T21:10:44.000Z
}
verify_sms_code(int serviceId, string code, int number) -> object
Modele
Znajdziesz tutaj modele typów, statusów itd. do usług SMS
Status usługi
Nazwa | Opis |
---|---|
service_new | Nowa (do zweryfikowania) |
service_active | Aktywna |
service_blocked | Zablokowana |
service_deleted | Usunięta |
service_second_verify | Ponowna weryfikacja |
service_rejected | Odrzucona |
service_verify | Weryfikacja |
service_ongoing_registration | W trakcie rejestracji |
Typ usługi
Nazwa | Opis |
---|---|
ONE_TIME_CODE | Kod jednorazowy |
CODE_PACK | Paczka kodów |
API_URL | API |
SMSXML
smsXml = SMS_XML('testKey', 'apiPassword')
SMS_XML(string apiKey, string apiPassword) → SMS_XML
SMS Api XML pozwala kontrolować cały proces otrzymania sms’a oraz wysyłki kodu po stronie serwisu partnera. 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.
smsXml(string hashKey) → smsXml
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
hashKey | string | Tak | Klucz do tworzenia sygnatury znajdujący się w panelu klienta w usłudze |
Odbieranie informacji o SMS
smsParse = smsXml.check_parameters(body);
if !smsParse:
//Wystapił błąd podczas przetwarzania sms'a
return
//Generowanie kodu do zwrotu
smsCode = smsXml.generate_code();
print( smsXml.generate_xml('Twoj kod doladowania to ' + smsCode) );
DirectBilling
directbilling = DirectBilling('0b4dca15', '3eea38f407073ff0abff956b57d71783')
DirectBilling(string apiKey, string apiPassword) → DirectBilling
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
apiKey | string | Tak | Klucz API z panelu klienta |
apiPassword | string | Tak | Hasło API z panelu Klienta |
Dostepne metody w obiekcie directbilling
Nazwa | Opis |
---|---|
get_service_list | Pobieranie listy usług |
get_service | Pobieranie informacji o usłudze |
get_transaction_list | Pobieranie listy transakcji |
get_transaction | Pobieranie informacji o transakcji |
create_transaction | Generowanie transakcji |
Pobieranie listy usług
directbilling.get_service_list()
Przykładowa odpowiedź
[
{
id: 158,
name: 'TEST',
suffix: 'TESTSIMPAY',
status: 'service_active',
created_at: 2021-11-08T17:19:16.000Z
}
]
get_service_list_paginated(int page, int limit) → array
- W tym zapytaniu dostępna jest paginacja! Przeczytaj na temat paginacji
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
page | integer | Nie | Numer strony |
limit | integer | Nie | Limit obiektów na strone |
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id usługi |
name | string | Nazwa usługi |
suffix | string | Suffix usługi |
status | string | Status usługi, po więcej informacji sprawdź Modele |
created_at | datetime | Data utworzenia usługi w formacie: ISO 8601 |
Pobieranie informacji o usłudze
directbilling.get_service(158)
Przykładowa odpowiedź
{
id: 158,
name: 'TEST',
suffix: 'TESTSIMPAY',
status: 'service_active',
api: {
complete: 'https://simpay.pl/',
failure: 'https://simpay.pl/'
},
providers: {
't-mobile': false,
orange: false,
play: false,
plus: false
},
commissions: {
't-mobile': {
commission_0: '60',
commission_9: '60',
commission_25: '60'
},
orange: {
commission_0: '67',
commission_9: '67',
commission_25: '70'
},
play: {
commission_0: '55',
commission_9: '65',
commission_25: '70'
},
plus: {
commission_0: '50',
commission_9: '50',
commission_25: '60'
}
},
maxValues: {
't-mobile': '250',
orange: '300',
play: '600',
plus: '400'
},
created_at: 2021 - 11 - 08 T17: 19: 16.000 Z
}
get_service(int serviceId) → object
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Nie | Id usługi |
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id usługi |
name | string | Nazwa usługi |
suffix | string | Suffix usługi |
status | string | Status usługi, po więcej informacji sprawdź Modele |
api[complete] | string | Przekierowanie w przypadku powodzenia transakcji |
api[failure] | string | Przekierowanie w przypadku niepowodzenia transakcji |
providers[t-mobile] | boolean | Dostępność operatora T-Mobile |
providers[orange] | boolean | Dostępność operatora Orange |
providers[play] | boolean | Dostępność operatora Play |
providers[plus] | boolean | Dostępność operatora Plus |
commissions[t-mobile][commission_0] | string | Prowizja dla partnera w % operatora T-Mobile od kwota 0.01 zł do 8.99 zł |
commissions[t-mobile][commission_9] | string | Prowizja dla partnera w % operatora T-Mobile od kwota 9.00 zł do 24,99 zł |
commissions[t-mobile][commission_25] | string | Prowizja dla partnera w % operatora T-Mobile od kwota 25.00 zł do maksymalnej kwoty |
commissions[orange][commission_9] | string | Prowizja dla partnera w % operatora Orange od kwota 0.01 zł do 8.99 zł |
commissions[orange][commission_25] | string | Prowizja dla partnera w % operatora Orange od kwota 9.00 zł do 24,99 zł |
commissions[orange][commission_0] | string | Prowizja dla partnera w % operatora Orange od kwota 25.00 zł do maksymalnej kwoty |
commissions[play][commission_0] | string | Prowizja dla partnera w % operatora Play od kwota 0.01 zł do 8.99 zł |
commissions[play][commission_9] | string | Prowizja dla partnera w % operatora Play od kwota 9.00 zł do 24,99 zł |
commissions[play][commission_25] | string | Prowizja dla partnera w % operatora Play od kwota 25.00 zł do maksymalnej kwoty |
commissions[plus][commission_0] | string | Prowizja dla partnera w % operatora Plus od kwota 0.01 zł do 8.99 zł |
commissions[plus][commission_9] | string | Prowizja dla partnera w % operatora Plus od kwota 9.00 zł do 24,99 zł |
commissions[plus][commission_25] | string | Prowizja dla partnera w % operatora Plus od kwota 25.00 zł do maksymalnej kwoty |
maxValues[t-mobile] | string | Maksymalna kwota pojedyńcznej transakcji dla operatora T-Mobile |
maxValues[orange] | string | Maksymalna kwota pojedyńcznej transakcji dla operatora Orange |
maxValues[play] | string | Maksymalna kwota pojedyńcznej transakcji dla operatora Play |
maxValues[plus] | string | Maksymalna kwota pojedyńcznej transakcji dla operatora Plus |
created_at | datetime | Data utworzenia usługi w formacie: ISO 8601 |
Kalkulacja prowizji
directbilling.calculate_commission(158, 10.00)
Przykładowa odpowiedź
{
orange: {
net: 14.93,
gross: 18.36
},
play: {
net: 15.39,
gross: 18.93
},
't-mobile': {
net: 16.67,
gross: 20.5
},
plus: {
net: 20,
gross: 24.6
}
}
calculate_commission(int serviceId, float amount) → object
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Tak | Id usługi |
amount | float | Tak | Kwota jaką chcemy otrzymać “na czysto” |
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
orange[net] | float | Kwota netto |
orange[gross] | float | Kwota brutto |
play[net] | float | Kwota netto |
play[gross] | float | Kwota brutto |
t-mobile[net] | float | Kwota netto |
t-mobile[gross] | float | Kwota brutto |
plus[net] | float | Kwota netto |
plus[gross] | float | Kwota brutto |
- Jeżeli operator nie jest aktywny lub kwota jest za duża zwrócony zostanie
null
Pobieranie listy transakcji
directbilling.get_transaction_list(158);
Przykładowa odpowiedź
[{
id: 559917,
status: 'transaction_db_confirmed',
value: 42.86,
value_net: 30,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 53: 21.000 Z,
updated_at: 2021 - 11 - 17 T01: 53: 21.000 Z
},
{
id: 559916,
status: 'transaction_db_confirmed',
value: 45.72,
value_net: 32,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 52: 44.000 Z,
updated_at: 2021 - 11 - 17 T01: 52: 44.000 Z
},
{
id: 559914,
status: 'transaction_db_confirmed',
value: 0.45,
value_net: 0.3,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 41: 41.000 Z,
updated_at: 2021 - 11 - 17 T01: 41: 41.000 Z
},
{
id: 559913,
status: 'transaction_db_confirmed',
value: 0.02,
value_net: 0.01,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 40: 33.000 Z,
updated_at: 2021 - 11 - 17 T01: 40: 33.000 Z
},
{
id: 559912,
status: 'transaction_db_payed',
value: 0.01,
value_net: 0,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 35: 36.000 Z,
updated_at: 2021 - 11 - 17 T01: 35: 36.000 Z
},
{
id: 559911,
status: 'transaction_db_payed',
value: 0.01,
value_net: 0,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 26: 43.000 Z,
updated_at: 2021 - 11 - 17 T01: 26: 43.000 Z
},
{
id: 559910,
status: 'transaction_db_rejected',
value: 0.01,
value_net: 0,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 26: 30.000 Z,
updated_at: 2021 - 11 - 17 T01: 26: 30.000 Z
},
{
id: 559909,
status: 'transaction_db_confirmed',
value: 0.01,
value_net: 0,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 26: 04.000 Z,
updated_at: 2021 - 11 - 17 T01: 26: 04.000 Z
},
{
id: 559908,
status: 'transaction_db_payed',
value: 0.01,
value_net: 0,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 25: 47.000 Z,
updated_at: 2021 - 11 - 17 T01: 25: 47.000 Z
},
{
id: 559907,
status: 'transaction_db_payed',
value: 0.01,
value_net: 0,
operator: 'orange',
created_at: 2021 - 11 - 17 T01: 22: 12.000 Z,
updated_at: 2021 - 11 - 17 T01: 22: 12.000 Z
}
]
get_transaction_list_paginated(int serviceId, int page, int limit) → array
- W tym zapytaniu dostępna jest paginacja! Przeczytaj na temat paginacji
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id transakcji |
status | string | Status transakcji, więcej informacji zobacz w Modelach |
value | float | Kwota transakcji |
value_netto | float | Kwota transakcji netto |
operator | string | Operator, listę operatorów zobacz w Modelach |
created_at | datetime | Data utworzenia transakcji w formacie: ISO 8601 |
updated_at | datetime | Data aktualizacji transakcji w formacie: ISO 8601 |
Pobieranie informacji o transakcji
directbilling.get_transaction(139, 559911)
Przykładowa odpowiedź
{
id: 559911,
status: 'transaction_db_payed',
phoneNumber: null,
control: 'control',
value: 0.01,
value_net: 0,
operator: 'orange',
notify: {
is_send: false,
last_send_at: '2021-11-18T15:56:04+00:00',
count: 10
},
created_at: 2021-11-17T01:26:43.000Z,
updated_at: 2021-11-17T01:26:43.000Z
}
get_transaction(int serviceId, int transactionId) → object
Opis odpowiedzi
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id transakcji |
status | string | Status transakcji, więcej informacji zobacz w Modelach |
phoneNumber | string/null | Numer telefonu, który został wymuszony przy generowaniu transakcji |
control | string | Status transakcji, więcej informacji zobacz w Modelach |
value | float | Kwota transakcji |
value_netto | float | Kwota transakcji netto |
operator | string | Operator, listę operatorów zobacz w Modelach |
notify | array | Tablica z informacjami dotyczącymi notyfikacji serwera, zobacz poniżej |
notify[is_send] | boolean | Informacja czy powiadomienie zostało wysłane |
notify[last_send_at] | datetime | Data wysłania ostatniego powiadomienia w formacie: ISO 8601 |
notify[count] | integer | Ilość wysłanych powiadomień |
created_at | datetime | Data utworzenia transakcji w formacie: ISO 8601 |
updated_at | datetime | Data aktualizacji transakcji w formacie: ISO 8601 |
Generowanie transakcji
directbilling.create_transaction(158, 'APIKEY', {
'amount': 10.00,
'amountType': 'gross',
'description': '',
'control': 'test'
})
Przykładowa odpowiedź
{
success: true,
data: {
transactionId: '',
redirectUrl: ''
}
}
create_transaction(int serviceId, string apiKey, request request) → object
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
serviceId | integer | Tak | Id usługi |
apiKey | string | Tak | Api key z panelu klienta, dostępny w usłudze |
Typy kwoty
Nazwa | Opis |
---|---|
AmountType.NET | Typ kwoty transakcji netto |
AmountType.GROSS | Typ kwoty transakcji brutto |
AmountType.REQUIRED | Typ kwoty transakcji kwota wymagana netto |
Opis obiektu
Nazwa | Typ | Opis |
---|---|---|
transactionId | string | UUID transakcji |
redirectUrl | string | Adres na jaki należy przekierować klienta |
Po wygenerowaniu transakcji użytkownika należy przekierować na url podany w odpowiedzi, można go pobrać z obiektu pod kluczem redirectUrl
.
Odbieranie informacji o transakcji
notify = directbilling.check_notification( 'mdRhwVlXc3WMN4Dbd3hfvkap4', body );
if not notify:
return
Obiekt jaki zostanie przesłany do serwisu partnera
{
"id": 1111,
"service_id": 1,
"status": "transaction_db_payed",
"values": {
"net": 11.07,
"gross": 11.07,
"partner": 11.07
},
"returns": {
"complete": "https://www.simpay.pl",
"failure": "https://www.simpay.pl"
},
"control": "test",
"number_from": "123123123",
"provider": 1,
"signature": "signature"
}
check_notification(string apiKey, string payload)
Opis parametrów
Nazwa | Typ | Wymagany? | Opis |
---|---|---|---|
apiKey | string | Tak | Api key z panelu klienta, dostępny w usłudze |
payload | string | Tak | Body zapytania przychodzącego |
Opis przesłanego zapytania
Nazwa | Typ | Opis |
---|---|---|
id | integer | Id transakcji |
service_id | integer | Id usługi |
status | string | Status transakcji, więcej informacji zobacz w Modelach |
values | object | Obiekt z kwotami transakcji |
values[net] | float | Kwota transakcji netto |
values[gross] | float | Kwota transakcji brutto |
values[partner] | float | Prowizja dla partnera z transakcji |
returns | object | Obiekt z adresami URL przekierowań po transakcji |
returns[complete] | string | Adres na jaki klient miał zostać przekierowany po prawidłowej transakcji |
returns[failure] | string | Adres na jaki klient miał zostać przekierowany po nie prawidłowej transakcji |
control | string | Pole control do wykorzystania przez partnera |
number_from | string | Numer telefonu z jakiego została przeprowadzona transakcja |
provider | integer | Operator płatności, zobacz więcej w Modele |
signature | string | Sygnatura, automatycznie weryfikowana przez bibliotekę |
Modele
Status usługi
Nazwa | Opis |
---|---|
service_db_new | Nowa |
service_db_active | Aktywna |
service_db_rejected | Odrzucona |
service_db_ongoing_registration | W trakcie rejestracji |
Status transakcji
Nazwa | Opis |
---|---|
transaction_db_new | Nowa |
transaction_db_confirmed | Użytkownik przekierowany |
transaction_db_rejected | Odrzucona |
transaction_db_canceled | Anulowana |
transaction_db_payed | Opłacona |
transaction_db_generate_error | Błąd podczas generowania |
Provider
Nazwa | Opis |
---|---|
1 | Orange |
2 | Plus |
3 | Play |
4 | T-Mobile |
Bezpieczeństwo
Weryfikacja certyfikatu klienta
Powiadomienia z serwerów SimPay są podpisywane certyfikatem.
Przykład konfiguracji nginx z weryfikacją certyfikatu klienckiego na lokalizacji /notify
# Tutaj wpisz fingerprint certyfikatu otrzymanego od SimPay
set $simpay_fingerprint "13d4313b94469038cdbab1839559ae381309a79d";
# Tutaj podmień ścieżkę na tą z certyfikatem otrzymanym od SimPay
ssl_client_certificate /opt/simpay/ssl/ipn.simpay.pem;
ssl_verify_client optional;
ssl_verify_depth 2;
location /notify {
if ($ssl_client_verify != "SUCCESS") { return 403; }
if ($ssl_client_fingerprint != $simpay_fingerprint) {
return 403;
}
}
Certyfikat IPN SimPay
-----BEGIN CERTIFICATE-----
MIICZjCCAe2gAwIBAgIUESmcYMAYfB5YTAGSqCyOay9OnZgwCgYIKoZIzj0EAwIw
czEmMCQGA1UEAwwdUGF5bWVudHMgU29sdXRpb25zIFJvb3QgQ0EgWDExJjAkBgNV
BAoMHVBheW1lbnRzIFNvbHV0aW9ucyBzcC4geiBvLm8uMRQwEgYDVQQHDAtLcmFz
bm9zaWVsYzELMAkGA1UEBhMCUEwwHhcNMjExMTExMTg0NzI5WhcNMzExMTA5MTg0
NzI5WjBzMSYwJAYDVQQDDB1QYXltZW50cyBTb2x1dGlvbnMgUm9vdCBDQSBYMTEm
MCQGA1UECgwdUGF5bWVudHMgU29sdXRpb25zIHNwLiB6IG8uby4xFDASBgNVBAcM
C0tyYXNub3NpZWxjMQswCQYDVQQGEwJQTDB2MBAGByqGSM49AgEGBSuBBAAiA2IA
BE371EkfU3OZJj6aUnv4JLfQ773ShbEooYxFc//DsWVi0rps0MUlpLuWpDN9tqdh
DJWQpdXq2Pam3nbzEr/klHeFRBBdI4ghWjs3GX+KxNUMMp0qVFNxZ+oBDdBkb7GD
s6NCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
FMplUBx3+kPIl5fkMLREXv5DwQyvMAoGCCqGSM49BAMCA2cAMGQCMGLV6BCrVb/W
RjsFkmho+qVUa9mdm54dPDI4JZ5rb98BnU0xxSGpPwXc+odSgPox7QIwXP1vJztU
qPn0D9ZdNFSIg7wpppLwIfhniv3gy4khuI9PAuWF76rjs90+Ij/pR67n
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICWjCCAeGgAwIBAgIUcPa5Jqg71Be/IaLIlPy4XDLJJP8wCgYIKoZIzj0EAwIw
czEmMCQGA1UEAwwdUGF5bWVudHMgU29sdXRpb25zIFJvb3QgQ0EgWDExJjAkBgNV
BAoMHVBheW1lbnRzIFNvbHV0aW9ucyBzcC4geiBvLm8uMRQwEgYDVQQHDAtLcmFz
bm9zaWVsYzELMAkGA1UEBhMCUEwwHhcNMjExMTExMTk0OTUwWhcNMzExMTA5MTk0
OTUwWjBnMRowGAYDVQQDDBFTaW1wYXkgUm9vdCBDQSBYMTEmMCQGA1UECgwdUGF5
bWVudHMgU29sdXRpb25zIHNwLiB6IG8uby4xFDASBgNVBAcMC0tyYXNub3NpZWxj
MQswCQYDVQQGEwJQTDB2MBAGByqGSM49AgEGBSuBBAAiA2IABE9noXtjwMQ0IlDy
Anddos7JRYf3EcCbW8/ilHQcBxkE8828iTK+4bw1h8KYRzEfJRSZmZMlbH8AKPSC
oukSbSAnMMSu8vQ2QBQKwjjsxIttLv63HHBQ4c5k7C6WYm28C6NCMEAwDgYDVR0P
AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFDPp5r7ojf5I/9pO
Z6uZKGAoJwS7MAoGCCqGSM49BAMCA2cAMGQCMCgFY0DWNkHPr1yV7inFuKPIKUBT
XzWc7F1vlcWszNuNJtyaxiSUsmysYxyxD0+QEwIwQ53zxnkppiw9+luTIZAxkchi
DoEV+E1e5GR8f4QaKCPIb4y9qp9dpWd9328sXvVP
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICCDCCAY2gAwIBAgIUUGkJrAO+6V0xrOcbZ5szLAix4bIwCgYIKoZIzj0EAwIw
ZzEaMBgGA1UEAwwRU2ltcGF5IFJvb3QgQ0EgWDExJjAkBgNVBAoMHVBheW1lbnRz
IFNvbHV0aW9ucyBzcC4geiBvLm8uMRQwEgYDVQQHDAtLcmFzbm9zaWVsYzELMAkG
A1UEBhMCUEwwHhcNMjIwMjA3MTk0MTU3WhcNMzIwMjA1MTk0MTU3WjBjMRYwFAYD
VQQDDA1TaW1wYXkgSVBOIFgxMSYwJAYDVQQKDB1QYXltZW50cyBTb2x1dGlvbnMg
c3AuIHogby5vLjEUMBIGA1UEBwwLS3Jhc25vc2llbGMxCzAJBgNVBAYTAlBMMHYw
EAYHKoZIzj0CAQYFK4EEACIDYgAEmFd9ZEds0KBVKuRsi50sO+B+NUJM2MRbXnTh
7kkStVk8XFIzOHWEhbppttB1RaOrPpIT/Ys/+/YXWAGTAvubuWYH2rDYFv8h54gU
VI8HGK81aVbQmv8ln5tug7rKKmKtMAoGCCqGSM49BAMCA2kAMGYCMQC7sy+9bFAU
ZWUWgI0KRFWSYTwdhOC4V84+Ea4PCvVPha26hMe9NqB1A1Vf3tInBWUCMQD0x33e
8jDjlCiXN0jDf+5gKsREQs9Q2pF6r+P7uzX26dT+OvOz6IfJlYS+SEXYHjU=
-----END CERTIFICATE-----
Adresy IP serwerów
Powiadomienia z serwerów SimPay wysyłane są z następujących adresów IP
LP | IP |
---|---|
1 | 135.125.153.121 |