Moduł obsługi systemu platnosci.pl v1.0.2

[Last update 22.07.2009]

Instalacja

Rozpakuj i skonfiguruj :)
Moduł wymaga biblioteki curl do komunikacji z serwisem platnosci.pl. Istnieje możliwość implementacji innego mechanizmu do przesyłania danych metodą HTTP POST - w tym celu wystarczy dopisać własną funkcję w pliku post.php

FAQ

  1. Czy jest wersja dla Drupala 6.x?
    JEST! Jeśli ją chcesz - napisz do mnie.
  2. Jak zintegrować moduł płatności z ubercartem?
    Do tego celu potrzebny jest moduł pośredni, który podepnie się zarówno pod upercarta jak i pod mój moduł płatności. Jest to moim zdaniem najrozsądniejsze rozwiązanie.
  3. Czy możesz zintegrować moduł płatności z ubercartem?
    Mogę to zrobić, ale nie za darmo. Niestety czas to pieniądz a ja aktualnie nie mam go w nadmiarze. Jeśli na prawdę zależy Ci na tym teraz, napisz do mnie. Może wynegocjujemy jakieś warunki finansowe.

Jeśli już używasz tego modułu i masz pierwszą jego wersję ze stycznia 2007!!!
bardzo ważna uwaga! Nieznacznej zmianie uległa struktura tabel w bazie danych w stosunku do pierwszej wersji ze stycznia 2007. wszystkie nazwy pól pozostały bez zmian, jednakże każde pole zawierające datę (datetime lub timestmp) zostało zamienione na typ int aby przechowywać datę w formacie jakiego używa drupal, czyli timestamp zapisany w sekundach. Wszystkich dotychczasowych użytkowników przepraszam za tą zmianę, ale w moim przekonaniu jest ona niezbędna dla zachowania spójności z samym drupalem. Najprostszym sposobem uaktualnienia jest stworzenie tymczasowej tabeli i przekopiowanie do niej danych selectem, który będzie zmieniał daty na unixowy timestamp a następnie zamiana starej tabeli z tą tymczasową.

Konfiguracja

Przejdź do /admin/settings/platnosci_pl i podaj wszystkie parametry swojego konta w systemie platnosci.pl i wybierz rodzaje płatności, które mają być dostępne w twoim serwisie. Na chwilę obecną moduł obsługuje tylko pojedynczy POS systemu platnosci.pl masz możliwość ustawienia automatycznego zatwierdzania transakcji (jeśli ta funkcja nie jest włączona po stronie serwisu platnosci.pl), ponadto możesz podać link wiążący transakcję z konkretnym zamówienie, który będzie widoczny w na stronie ze szczegółami transakcji.

Dodatkowo na stronach serwisu platnosci.pl należy skonfigurować swój POS podając następujące parametry:

urlPozytywny http://twójserwis.pl/platnosci_pl/ok/%transId%/%posId%/%payType%/%sessionId%/%amountPS%/%orderId%
urlNegatywny http://twójserwis.pl/platnosci_pl/error/%transId%/%posId%/%payType%/%sessionId%/%amountPS%/%orderId%/%error%
urlReport http://twójserwis.pl/platnosci_pl/report

pod adresem admin/platnosci_pl znajduje się panel administracyjny pozwalający przeglądać transakcje i logi

Sposób użytkowania

(uwaga: wszystkie wymienione tutaj stałe są zdefiniowane w pliku definitions.php i tam właśnie odsyłam po wyjaśnienia wszystkich dociekliwych) Pierwszym krokiem na drodze do zrealizowania płatności jest wybór jej rodzaju. Aby wyświetlić listę dostępnych typów płatności wywołaj funkcję platnosci_pl_getPaymentTypes(&$form) podając jako parametr formularz do którego chcesz dopiąć listę dostępnych płatności. Dzięki temu masz możliwość dołączenia do tego samego formularza innych form płatności, nieobsługiwanych przez ten moduł (np. płatność gotówką). Gdy klient dokona wyboru płatności masz możliwość sprawdzenia czy dana forma płatności jest poprawna (ułatwia to wykrycie ewentualnych nieprawidłowości w działaniu serwisu lub użytkownika) - do tego celu służy funkcja platnosci_pl_validatePaymentType($type) Następnym krokiem jest przygotowanie transakcji. W tym celu wywołaj funkcję platnosci_pl_prepareTransaction($amount, $desc, $type, $clientData, $orderId)

platnosci_pl_prepareTransaction($amount, $desc, $type, $clientData = array(), $orderId = 0)
amount wartość transakcji w złotych (uwaga - system platnosci.pl przyjmuje kwoty w groszach, więc podana tutaj wartość zostanie przemnożona przez 100 a wszystko co zostanie po przecinku będzie obcięte.)
desc opis transakcji dla klienta max 50 znaków.
type typ transakcji
clientData dane klienta, domyślnie opcjonalne. Jeśli klient płaci kartą kredytową, to dane te są obowiązkowe i muszą być zgodne z danymi na karcie kredytowej klienta. Tablica ta musi mieć następujące pola: PPPRM_FIRSTNAME, PPPRM_LASTNAME oraz PPPRM_EMAIL (zdefiniowane w pliku definitions.php)
orderId opcjonalny numer zlecenia za które płaci klient.
Funkcja zwraca unikalny id sesji dla nowo utworzonej transakcji. Jeśli coś pójdzie nie tak (np. będzie problem z połączeniem z systemem platnosci.pl) funkcja zwróci false.

Kolejnym etapem jest przekierowanie klienta na strony systemu platnosci.pl gdzie dokona płatności. Aby wygenerować formularz, który przeniesie klienta pod odpowiedni adres wywołaj funkcję platnosci_pl_getPaymentFormContent(&$sessId, $submit, $submitClass, $amount, $desc, $type, $orderId, $clientData) Uwaga: funkcji tej można użyć bez wcześniejszego wywoływania platnosci_pl_prepareTransaction w takiej sytuacji moduł automatycznie ją wywoła z odpowiednimi parametrami.

platnosci_pl_getPaymentFormContent(&$sessId, $submit, $submitClass = 'form-submit', $amount = 0, $desc = '',$type = PPPT_INVALID, $orderId = 0, $clientData = array())
sessId Id sesji dla danej transakcji. Jeśli parametr będzie miał wartość 0 zostanie stworzona nowa sesja i parametrowi temu przypisane będzie nowe Id. Jeśli podane Id sesji będzie poprawne, to dane dla parametrów amount, desc, type, orderId i clientData zostaną pobrane z bazy.
submit tekst, który ma być umieszczony na przycisku przekierowującym do serwisu paltnosci.pl
submitClass styl który ma być przypisany do przycisku 'submit' - domyślnie ma wartość 'form-submit'.
amount kwota transakcji. Użyj tego parametru tylko gdy Id sesji ma wartość 0 i moduł ma stworzyć nową sesję.
desc opis transakcji. Użyj tego parametru tylko gdy Id sesji ma wartość 0 i moduł ma stworzyć nową sesję.
type rodzaj płatności. Użyj tego parametru tylko gdy Id sesji ma wartość 0 i moduł ma stworzyć nową sesję.
orderId opcjonalny Id zlecenia za które płaci klient. Użyj tego parametru tylko gdy Id sesji ma wartość 0 i moduł ma stworzyć nową sesję.
clientData dane klienta (tak jak w funkcji platnosci_pl_validatePaymentType). Użyj tego parametru tylko gdy Id sesji ma wartość 0 i moduł ma stworzyć nową sesję.
Funkcja zwraca formularz przekierowujący klienta na strony serwisu platnosci.pl - formularz ten ma tylko jeden widoczny przycisk, wszystkie jego pozostałe pola są ukryte. Jeśli w czasie wykonywania tej funkcji wystąpi błąd, to zwrócona zostanie wartość false.

Jeśli moduł ma ustawione automatycznie potwierdzanie płatności to w zasadzie na tym kończy się minimum, które trzeba zaimplementować, żeby wszystko działało.

Pozostałe funkcje

platnosci_pl_getSessionData($sessId) zwraca tablicę danych dotyczących sesji o podanym Id. Tablica zawiera pola PPPRM_USER_ID, PPPRM_PAYMENT_TYPE, PPPRM_AMOUNT, PPPRM_DESCRIPTION, PPPRM_IP, PPPRM_TRANSACTION_STATUS, PPPRM_CREATED, PPPRM_LAST_UPDATE, PPPRM_FIRSTNAME, PPPRM_LASTNAME, PPPRM_EMAIL, PPPRM_ORDER_ID (zdefiniowane w pliku definitions.php).
platnosci_pl_checkTransactionState($sessId) zwraca stan danej transakcji odczytując go z bazy danych.
platnosci_pl_forceTransactionStateCheck($sessId) zwraca stan danej transakcji pobierając go z serwisu platnosci.pl. Funkcja jednocześnie nadpisuje aktualnie zapisany stan transakcji.
platnosci_pl_confirmPayment($sessId, $confirm) potwierdza bądź odrzuca daną transakcję. Aby potwierdzić parametr confirm musi mieć wartość true, w przeciwnym razie false.
hook_platnosci_pl_stateChange możesz podłączyć się do tego zdarzenia aby być powiadamianym o każdej zmianie stanu transakcji.

Uwagi dodatkowe

Ze względu na to, że system platnosci.pl przesyła informacje do modułu z wykorzystaniem HTTP POST, to twój serwis musi być w trybie on-line, żeby moduł był w stanie odebrać przesyłane komunikaty. Z tego co mi wiadomo nie ma chyba sensownej metody obejścia tego problemu poza modyfikacją tej funkcji: http://api.drupal.org/api/4.7/function/_menu_site_is_offline - niestety jest to grzebanie w jądrze drupala, więc raczej nie polecam. Jeśli goście od platnosci.pl zechcą dorzucić do swojego systemu obsługę XML-RPC to sprawa będzie o wiele prostsza, ponieważ moduł XML-RPC Drupala działa zawsze, bez względu na to, czy serwis jest offline czy online.

Zmiany w stosunku do wersji z 14.11.2007 (v1.0.1) Zmiany w stosunku do wersji z 09.02.2007 (v1.0.0) Zmiany w stosunku do wersji z 07.02.2007 Zmiany w stosunku do wersji z 05.02.2007 Zmiany w stosunku do poprzedniej wersji TODO