NAV Navigation
shell php java typescript python kotlin go

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

Język Odnośnik
PHP https://github.com/SimPaypl/SimPay-API-php
Java https://github.com/SimPaypl/SimPay-API-java
TypeScript https://github.com/SimPaypl/SimPay-API-TypeScript
Python https://github.com/SimPaypl/SimPay-API-Python
Kotlin https://github.com/SimPaypl/SimPay-API-Kotlin
Go https://github.com/SimPaypl/SimPay-API-go

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 int Strona
limit int Limit wyników. domyślnie: 15, maksymalnie: 99

Opis obiektu

Nazwa Typ Opis
Total int Liczba wszystkich rekordów w obiekcie
Count int Liczba rekordów na aktualnej stronie
PerPage int Ilość rekordów maksymalnie na stronie
CurrentPage int Aktualna strona
TotalPages int Ilość wszystkich stron
links.NextPage string URL następnej strony
links.PrevPage string URL poprzedniej strony

SMS

sms := simpay.NewSms("0b4dca15", "3eea38f407073ff0abff956b57d71783");

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 sms

Nazwa Opis
GetServiceList Pobieranie listy usług
GetServiceDetails Pobieranie informacji o usłudze
GetTransactions Pobieranie listy transakcji
GetTransactionDetails Pobieranie informacji o transakcji
GetServiceNumbers Pobieranie dostępnych numerów dla usługi
GetServiceNumberDetails Pobieranie informacji o pojedyńcznym numerze usługi
GetNumbers Pobieranie dostępnych numerów
GetNumberDetails Pobieranie informacji o numerze
VerifyCode Weryfikacja poprawności kodu

Pobieranie listy usług

serviceList, err := sms.GetServiceList(1, 20)

Przykładowa odpowiedź

{
    PaginatedResponse: {
                            Response:{Success:true Errors:map[]} 
                            Pagination:{Total:1 Count:1 PerPage:15 CurrentPage:1 TotalPages:1 Links:{NextPage: PrevPage:}}
                        } 
    ServiceList:[{Id:3549 
                  Type:ONE_TIME_CODE 
                  Status:service_active 
                  Name:TEST Prefix:SIM 
                  Suffix:TESTSIMPAY 
                  Adult:false 
                  CreatedAt:2021-11-08 17:18:53 +0000 UTC}]
}

GetServiceList(page, limit uint) → (SmsServiceListResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
page uint Tak Numer strony
limit uint Tak Limit obiektów na strone

Opis obiektu

Nazwa Typ Opis
Id int 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 bool Czy usługa jest 18+
CreatedAt Time Data utworzenia usługi w formacie: ISO 8601

Pobieranie informacji o usłudze

serviceDetails, err := sms.GetServiceDetails(1676)

Przykładowa odpowiedź

{
    Response:{Success:true Errors:map[]} 
    ServiceDetails:{Id:1 
                    Type:ONE_TIME_CODE 
                    Status:service_rejected 
                    Name:TEST 
                    Prefix:SIM 
                    Suffix:TEST 
                    Description:Example 
                    description 
                    Adult:false 
                    Numbers:[7055 7136 7255 7355 7455 7555 7636 77464 78464 7936 91055 91155 91455 91664 91955 92055 92555] 
                    CreatedAt:2021-02-16 21:00:30 +0000 UTC}
}

GetServiceDetails(serviceId uint) → (SmsServiceDetailsResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
serviceId uint Tak Id usługi

Opis obiektu

Nazwa Typ Opis
Id int 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 bool Czy usługa jest 18+
Numbers []string Lista numerów SMS dostępnych w usłudze
CreatedAt Time Data utworzenia usługi w formacie: ISO 8601

Pobieranie listy transakcji

transactions, err := sms.GetTransactions(1676, 1, 20)

Przykładowa odpowiedź

{
    PaginatedResponse:{Response:{Success:true Errors:map[]} 
    Pagination:{Total:3 Count:3 PerPage:15 CurrentPage:1 TotalPages:1 Links:{NextPage: PrevPage:}}} 
    TransactionList:[{Id:1 From:48123123123 Code:ABCDEF Used:false SendAt:1970-01-01 00:00:00 +0000 UTC} 
                     {Id:2 From:48123123123 Code:ABCDEF Used:false SendAt:1970-01-01 00:00:00 +0000 UTC} 
                     {Id:3 From:48123123123 Code:ABCDEF Used:false SendAt:1970-01-01 00:00:00 +0000 UTC}]
}

GetTransactions(serviceId, page, limit uint) → (SmsTransactionListResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
serviceId uint Tak Id usługi
page uint Tak Strona
limit uint Tak Limit obiektów na strone

Opis obiektu

Nazwa Typ Opis
Id int Id transakcji
From int64 Numer, z którego został wysłany SMS
Code string Kod zwrotny SMS
Used bool Czy kod został wykorzystany
SendAt Time Data wysłania SMSa w formacie: ISO 8601

Pobieranie informacji o transakcji

transactionDetails, err := sms.GetTransactionDetails(1676, 2203305)

Przykładowa odpowiedź

{
    Response:{Success:true Errors:map[]} 
    TransactionDetails:{Id:1 From:48123123123 Code:ABCDEF Used:false SendNumber:7636 Value:6 SendAt:1970-01-01 00:00:00 +0000 UTC}
}

GetTransactionDetails(serviceId, transactionId uint) → (SmsTransactionDetailsResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
serviceId uint Tak Id usługi
transactionId uin Tak Id transakcji

Opis odpowiedzi

Nazwa Typ Opis
Id int Id transakcji
From int64 Numer, z którego został wysłany SMS
Code string Kod zwrotny SMS
Used bool Czy kod został wykorzystany
SendNumber int Numer na jaki został wysłany SMS
Value float64 Koszt wysłanego SMSa netto
SendAt Time Data wysłania SMSa w formacie: ISO 8601

Pobieranie dostępnych numerów dla usługi

numbers, err := sms.GetServiceNumbers(1676, 1, 20)

Przykładowa odpowiedź

{
    PaginatedResponse:{Response:{Success:true Errors:map[]} 
    Pagination:{Total:9 Count:9 PerPage:15 CurrentPage:1 TotalPages:1 Links:{NextPage: PrevPage:}}}
    NumberList:[{Number:70908 Value:0.5 ValueGross:0.62 Adult:true} 
                {Number:71908 Value:1 ValueGross:1.23 Adult:true} 
                {Number:72998 Value:2 ValueGross:2.46 Adult:true} 
                {Number:73908 Value:3 ValueGross:3.69 Adult:true} 
                {Number:75908 Value:5 ValueGross:6.15 Adult:true} 
                {Number:76908 Value:6 ValueGross:7.38 Adult:true} 
                {Number:79908 Value:9 ValueGross:11.07 Adult:true} 
                {Number:91998 Value:19 ValueGross:23.37 Adult:true} 
                {Number:92598 Value:25 ValueGross:30.75 Adult:true}]
}

GetServiceNumbers(int $serviceId, int $page, int $limit) → array

Opis parametrów

Nazwa Typ Wymagany? Opis
serviceId uint Tak Id usługi
page uint Tak Strona
limit uint Tak Limit obiektów na strone

Opis obiektu

Nazwa Typ Opis
Number int Numer SMSa
value float64 Kwota netto
ValueGross float64 Kwota brutto
Adult bool Czy jest 18+

Pobieranie informacji o pojedyńcznym numerze usługi

numberDetails, err := sms.GetServiceNumberDetails(7055, 1676)

Przykładowa odpowiedź

{
    Response:{Success:true Errors:map[]}
    NumberDetails:{Number:70908 Value:0.5 ValueGross:0.62 Adult:true}
}

GetServiceNumberDetails(serviceId uint, number int64) → (NumberDetailsResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
serviceId uint Tak Id usługi
number uint Tak Numer

Opis odpowiedzi

Nazwa Typ Opis
Number int Numer SMSa
Value float64 Kwota netto
ValueGross float64 Kwota brutto
Adult bool Czy jest 18+

Pobieranie wszystkich dostępnych numerów

numbers, err := sms.GetNumbers(1, 20)

Przykładowa odpowiedź

{
    PaginatedResponse:{Response:{Success:true Errors:map[]} 
    Pagination:{Total:26 Count:15 PerPage:15 CurrentPage:1 TotalPages:2 Links:{NextPage:https://api.simpay.pl/sms/numbers?page=2 PrevPage:}}} 
    NumberList:[{Number:7055 Value:0.5 ValueGross:0.62 Adult:false} 
                {Number:7255 Value:2 ValueGross:2.46 Adult:false} 
                {Number:7136 Value:1 ValueGross:1.23 Adult:false} 
                {Number:7355 Value:3 ValueGross:3.69 Adult:false} 
                {Number:7455 Value:4 ValueGross:4.92 Adult:false} 
                {Number:7555 Value:5 ValueGross:6.15 Adult:false} 
                {Number:7636 Value:6 ValueGross:7.38 Adult:false} 
                {Number:77464 Value:7 ValueGross:8.61 Adult:false} 
                {Number:78464 Value:8 ValueGross:9.84 Adult:false} 
                {Number:7936 Value:9 ValueGross:11.07 Adult:false} 
                {Number:91055 Value:10 ValueGross:12.3 Adult:false} 
                {Number:91155 Value:11 ValueGross:13.53 Adult:false} 
                {Number:91455 Value:14 ValueGross:17.22 Adult:false} 
                {Number:91664 Value:16 ValueGross:19.68 Adult:false} 
                {Number:91955 Value:19 ValueGross:23.37 Adult:false}]
}
)

GetNumbers(page, limit uint) → (NumberListResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
page uint Tak Strona
limit uint Tak Limit obiektów na strone

Opis odpowiedzi

Nazwa Typ Opis
Number int Numer SMSa
Value float Kwota netto
ValueGross float Kwota brutto
Adult bool Czy jest 18+

Pobieranie pojedyńczego numeru sms

sms.GetNumberDetails(number int64) → (NumberDetailsResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
number int Tak Numer

Opis odpowiedzi

Nazwa Typ Opis
Number int Numer SMSa
Value float64 Kwota netto
ValueGross float64 Kwota brutto
Adult bool Czy jest 18+

Weryfikacja poprawności kodu

sms.VerifyCode(1636, "AF4CXF", 7055)

Przykładowa odpowiedź w przypadku nowego kodu

{
    Success:true 
    CodeVerification:{Used:false Code:63D9C7 Test:true From:123123123 Number:7055 Value:0.5 UsedAt:0001-01-01 00:00:00 +0000 UTC}
}

Przykładowa odpowiedź w przypadku użytego kodu

{
    Success:true 
    CodeVerification:{Used:true Code:63D9C7 Test:true From:123123123 Number:7055 Value:0.5 UsedAt:2021-11-08 00:56:00 +0000 UTC}
}

sms.VerifyCode(serviceId uint, code string, number int64) -> (CodeVerificationResponse, error)

Opis parametrów

Nazwa Typ Wymagany Opis
serviceId int Tak Id usługi
code string Tak Kod zwrotny z SMSa
number int64 Tak Numer na jaki miał zostać wysłany SMS

Opis odpowiedzi

Nazwa Typ Opis
Used bool Czy SMS został wykorzystany
Code string Kod zwrotny z SMSa
Test bool Czy testowy SMS
From string Numer z jakiego wysłano SMSa
Number int Numer na jaki wysłano SMSa
Value int Kwota netto kosztu SMSa
UsedAt Time Data kiedy wykorzystano SMSa w formacie: ISO 8601, dostępne tylko w przypadku gdy used jest równe true

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 := simpay.NewSmsXml("testKey")

NewSmsXml(hashingKey string) → SmsXml

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.

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

// Funkcja sprawdzająca występowanie wymaganych paramterów
isValid := smsXml.CheckParameters(m map[string]interface{})

// Funkcja odpowiedzialna za odbieranie informacji o SMS
value := smsXml.GetNumberValue("7455")

//Generowanie kodu do zwrotu
code := smsXml.GenerateCode()

xml := smsXml.GenerateXml(code)

DirectBilling

directBilling := simpay.NewDirectBilling("0b4dca15", "3eea38f407073ff0abff956b57d71783")

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 sms

Nazwa Opis
GetServiceList Pobieranie listy usług
GetServiceDetails Pobieranie informacji o usłudze
CalculateCommission Kalkulacja prowizji
GetTransactionList Pobieranie listy transakcji
GetTransactionDetails Pobieranie informacji o transakcji
GenerateTransaction Generowanie transakcji

Pobieranie listy usług

directBilling.GetServiceList(1, 20)

Przykładowa odpowiedź

{
    PaginatedResponse:{Response:{Success:true Errors:map[]}
                       Pagination:{Total:3 Count:3 PerPage:15 CurrentPage:1 TotalPages:1 Links:{NextPage: PrevPage:}}}
                       ServiceList:[{Id:1 Name:Testowa usługa Suffix:TEST1 Status:service_db_rejected CreatedAt:2021-10-01 12:57:18 +0000 UTC} 
                                    {Id:2 Name:Testowa usługa Suffix:TEST2 Status:service_active CreatedAt:2021-10-01 13:57:18 +0000 UTC} 
                                    {Id:3 Name:Testowa usługa Suffix:TEST3 Status:service_active CreatedAt:2021-10-01 14:57:18 +0000 UTC}]
}


GetServiceList(page, limit uint) → (DirectBillingServiceListResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
page uint Tak Numer strony
limit uint Tak Limit obiektów na strone

Opis odpowiedzi

Nazwa Typ Opis
Id int Id usługi
Name string Nazwa usługi
Suffix string Suffix usługi
Status string Status usługi, po więcej informacji sprawdź Modele
CreatedAt Time Data utworzenia usługi w formacie: ISO 8601

Pobieranie informacji o usłudze

directBilling.GetServiceDetails(139)

Przykładowa odpowiedź

{
    Response:{Success:false Errors:map[]} 
    ServiceDetails:{Id:0 Name: Suffix: Status: Api:{Complete: Failure:} 
                    Providers:{TMobile:false Orange:false Play:false Plus:false}
                    Commissions:{TMobile:{Commission0: Commission9: Commission25:} 
                                 Orange:{Commission0: Commission9: Commission25:} 
                                 Play:{Commission0: Commission9: Commission25:} 
                                 Plus:{Commission0: Commission9: Commission25:}} 
    MaxValues:{TMobile: Orange: Play: Plus:} 
    CreatedAt:0001-01-01 00:00:00 +0000 UTC}
}


GetServiceDetails(serviceId uint) → (DirectBillingServiceDetailsResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
serviceId uint Tak Id usługi

Opis odpowiedzi

Nazwa Typ Opis
Id int 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.TMobile bool Dostępność operatora T-Mobile
Providers.Orange bool Dostępność operatora Orange
Providers.Play bool Dostępność operatora Play
Providers.Plus bool Dostępność operatora Plus
Commissions.TMobile.Commission0 string Prowizja dla partnera w % operatora T-Mobile od kwota 0.01 zł do 8.99 zł
Commissions.TMobile.Commission9 string Prowizja dla partnera w % operatora T-Mobile od kwota 9.00 zł do 24,99 zł
Commissions.TMobile.Commission25 string Prowizja dla partnera w % operatora T-Mobile od kwota 25.00 zł do maksymalnej kwoty
Commissions.Orange.Commission9 string Prowizja dla partnera w % operatora Orange od kwota 0.01 zł do 8.99 zł
Commissions.Orange.Commission25 string Prowizja dla partnera w % operatora Orange od kwota 9.00 zł do 24,99 zł
Commissions.Orange.Commission0 string Prowizja dla partnera w % operatora Orange od kwota 25.00 zł do maksymalnej kwoty
Commissions.Play.Commission0 string Prowizja dla partnera w % operatora Play od kwota 0.01 zł do 8.99 zł
Commissions.Play.Commission9 string Prowizja dla partnera w % operatora Play od kwota 9.00 zł do 24,99 zł
Commissions.Play.Commission25 string Prowizja dla partnera w % operatora Play od kwota 25.00 zł do maksymalnej kwoty
Commissions.Plus.Commission0 string Prowizja dla partnera w % operatora Plus od kwota 0.01 zł do 8.99 zł
Commissions.Plus.Commission9 string Prowizja dla partnera w % operatora Plus od kwota 9.00 zł do 24,99 zł
Commissions.Plus.Commission25 string Prowizja dla partnera w % operatora Plus od kwota 25.00 zł do maksymalnej kwoty
MaxValues.TMobile 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
CreatedAt Time Data utworzenia usługi w formacie: ISO 8601

Kalkulacja prowizji

directBilling.CalculateCommission(139, 4.4)

Opis paramterów

Nazwa Typ Wymagany Opis
serviceId uint Tak Id usługi
amount float32 Tak Kwota jaką chcemy otrzymać “na czysto”

Przykładowa odpowiedź

{
    Response:{Success:true Errors:map[]} 
    CalculateCommission:{Orange:{Net:285.72 Gross:351.44} 
                         Play:{Net:285.72 Gross:351.44} 
                         TMobile:{Net:333.34 Gross:410.01} 
                         Plus:{Net:333.34 Gross:410.01}}
}

Opis odpowiedzi

Nazwa Typ Opis
Orange.Net float64 Kwota netto
Orange.Gross float64 Kwota brutto
Play.Net float64 Kwota netto
Play.Gross float64 Kwota brutto
TMobile.Net float64 Kwota netto
TMobile.Gross float64 Kwota brutto
Plus.Net float64 Kwota netto
Plus.Gross float64 Kwota brutto

CalculateCommission(serviceId uint, amount float32) → (CalculateCommissionResponse, error)

Pobieranie listy transakcji

directBilling.GetTransactionList(139, 1, 20)

Przykładowa odpowiedź

{
    PaginatedResponse:{Response:{Success:true Errors:map[]} 
    Pagination:{Total:9 Count:9 PerPage:30 CurrentPage:1 TotalPages:1 Links:{NextPage: PrevPage:}}} 
    TransactionList:[{Id:552098 Status:transaction_db_generate_error Value:0.34 ValueNetto:0.24 Operator:orange CreatedAt:2021-10-20 00:34:47 +0000 UTC UpdatedAt:2021-10-19 22:34:47 +0000 UTC} 
                     {Id:552097 Status:transaction_db_new Value:0.34 ValueNetto:0.24 Operator:orange CreatedAt:2021-10-20 00:34:14 +0000 UTC UpdatedAt:2021-10-19 22:34:14 +0000 UTC} 
                     {Id:552096 Status:transaction_db_new Value:0.34 ValueNetto:0.24 Operator:orange CreatedAt:2021-10-20 00:33:53 +0000 UTC UpdatedAt:2021-10-19 22:33:53 +0000 UTC} 
                     {Id:548852 Status:transaction_db_confirmed Value:34.46 ValueNetto:24.12 Operator:orange CreatedAt:2021-10-05 20:50:25 +0000 UTC UpdatedAt:2021-10-05 18:50:25 +0000 UTC} 
                     {Id:548851 Status:transaction_db_confirmed Value:34.46 ValueNetto:24.12 Operator:orange CreatedAt:2021-10-05 20:48:26 +0000 UTC UpdatedAt:2021-10-05 18:48:26 +0000 UTC} 
                     {Id:544659 Status:transaction_db_confirmed Value:13.41 ValueNetto:6.7 Operator:plus CreatedAt:2021-09-17 20:55:52 +0000 UTC UpdatedAt:2021-09-17 18:55:53 +0000 UTC} 
                     {Id:544508 Status:transaction_db_confirmed Value:13.41 ValueNetto:8.04 Operator:t-mobile CreatedAt:2021-09-17 10:31:17 +0000 UTC UpdatedAt:2021-09-17 08:31:17 +0000 UTC} 
                     {Id:448984 Status:transaction_db_rejected Value:13.41 ValueNetto:6.7 Operator:plus CreatedAt:2021-01-19 21:08:56 +0000 UTC UpdatedAt:2021-01-22 20:48:11 +0000 UTC} 
                     {Id:448931 Status:transaction_db_rejected Value:13.41 ValueNetto:8.98 Operator:orange CreatedAt:2021-01-19 19:14:35 +0000 UTC UpdatedAt:2021-01-22 18:48:11 +0000 UTC}]
}

GetTransactionList(int $serviceId, int $page, int $limit) → array

Opis odpowiedzi

Nazwa Typ Opis
Id int Id transakcji
Status string Status transakcji, więcej informacji zobacz w Modelach
Value float64 Kwota transakcji
ValueNetto float64 Kwota transakcji netto
Operator string Operator, listę operatorów zobacz w Modelach
CreatedAt Time Data utworzenia transakcji w formacie: ISO 8601
UpdatedAt Time Data aktualizacji transakcji w formacie: ISO 8601

Pobieranie informacji o transakcji

directBilling.GetTransactionDetails(139, 552097)

Przykładowa odpowiedź

{
    Response:{Success:true Errors:map[]} 
    TransactionDetails:{Id:1 Status:transaction_db_confirmed PhoneNumber:<nil> Control:1111 Value:16.67 ValueNetto:10 Operator:t-mobile Notify:{IsSend:false LastSendAt:1970-01-01 00:00:00 +0000 UTC Count:0} 
                        CreatedAt:2021-09-17 12:01:50 +0000 UTC UpdatedAt:2021-09-17 10:01:50 +0000 UTC}
}

GetTransactionDetails(int $serviceId, int $transactionId) → object

Opis odpowiedzi

Nazwa Typ Opis
Id int Id transakcji
Status string Status transakcji, więcej informacji zobacz w Modelach
PhoneNumber string/nil Numer telefonu, który został wymuszony przy generowaniu transakcji
Control string Status transakcji, więcej informacji zobacz w Modelach
Value float64 Kwota transakcji
ValueNetto float64 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.IsSend bool Informacja czy powiadomienie zostało wysłane
Notify.LastSendAt Time Data wysłania ostatniego powiadomienia w formacie: ISO 8601
Notify.Count int Ilość wysłanych powiadomień
CreatedAt Time Data utworzenia transakcji w formacie: ISO 8601
UpdatedAt Time Data aktualizacji transakcji w formacie: ISO 8601

Generowanie transakcji

simpay.GenerateTransactionRequest{
	Amount:      11.14,
	AmountType:  "net",
	Description: "",
	Control:     "",
	Returns: struct {
		Success string `json:"success"`
		Failure string `json:"failure"`
	}{},
	PhoneNumber: "",
	Signature:   "",
}

Przykładowa odpowiedź

{
    Response:{Success:true Errors:map[]} 
    Data:{TransactionId:1d87a1b3-18f8-4146-bcb1-c0c9f293b04f RedirectUrl:https://db.simpay.pl/1d87a1b3-18f8-4146-bcb1-c0c9f293b04f}
}

GenerateTransaction(serviceId uint, request GenerateTransactionRequest) → (DirectBillingGenerateTransactionResponse, error)

Opis parametrów

Nazwa Typ Wymagany? Opis
serviceId int Tak Id usługi
apiKey string Tak Api key z panelu klienta, dostępny w usłudze

Opis metod dostępnych w obiekcie

Nazwa Opis
Sign(key string) Metoda podpisująca żądanie na podstawie wszystkich parametrów
SignWithAmountAndControl(key string) Metoda podpisująca żądanie na podstawie wartości Amount oraz Control

Typy kwoty

Nazwa Opis
“net” Typ kwoty transakcji netto
“gross” Typ kwoty transakcji brutto
“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 lub funkcją transaction.Data.RedirectUrl. Dostępna jest jeszcze funkcja TransactionId do pobrania Id wygenerowanej transakcji.

Odbieranie informacji o transakcji

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"
}

Opis przesłanego zapytania

Nazwa Typ Opis
id int Id transakcji
service_id int 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 int 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