|
Project Information
Featured
Links
|
Co to jest?django-platnosci - wydajna obsługa serwisu platnosci.pl dla Django + Celery Zalety: nasz moduł jest - kompletny - implementuje 90% funkcjonalności,
- wydajny - notyfikacje oparte na asynchronicznych komunikatach (Celery),
- otwarty - licencja MIT,
- sprawdzony w produkcji - w kilku naszych projektach,
- testowalny - kiepskie testy są i tak lepsze niż żadne testy.
Kto winien?(C) 2009, 2010 FHU Kagami, http://fhu-kagami.pl/ Ten moduł rozpowszechniany jest na licencji MIT. BRAK GWARANCJIAUTORZY NIE DAJĄ ŻADNEJ GWARANCJI POPRAWNEGO DZIAŁANIA. AUTORZY NIE ZALECAJĄ KORZYSTANIA Z TEGO MODUŁU DO AUTORYZACJI PRAWDZIWYCH TRANSAKCJI -- KORZYSTAJ JEDYNIE Z TESTOWYCH. Instalacja$ pip install http://django-platnosci.googlecode.com/svn/trunk/ Jak zacząć- korzystamy z Django, Celery oraz serwisu platnosci.pl. Zapoznaj się z dokumentacją tychże.
- skontaktuj się z platnosci.pl i skorzystaj z podanych przez nich danych aby ustawić odpowiednio zmienne konfiguracyjne settings.PLATNOSCI_POS_ID, PLATNOSCI_MD5_KEY1, PLATNOSCI_MD5_KEY2, PLATNOSCI_POS_AUTH_KEY.
- zobacz platnosci.conf.settings, aby sprawdzić, z jakich adresów URL będziemy korzystali.
Chcę zapłacić- utwórz obiekt PlatnosciOutgoingTransaction -- wartosci kluczowe to pay_type, pos_id, session_id, order_id; sumę pieniędzy przekazuje wartość amount.
- zaprezentuj użytkownikowi formularz POST do serwera platnosci.pl który będzie zawierał powżysze wartości oraz inne, wymagane przez platnosci.pl
- kroki w punktach 2 i 3 ułatwia funkcja PlatnosciOutgoingTransaction.run_payment - przeczytaj jej docstrings, podaj jej wymagane parametry (parametry nie-wymagane zostaną ustawione automatycznie). Funkcja zwróci słownik, który to słownik wystarczy wyświetlić użytkownikowi w ukrytych polach formularzu z metodą POST, kierującego do PLATNOSCI_NEW_PAYMENT_URL.
- gdy użytkownik zaakceptuje ten formularz i dokona platnosci - dalsza jej autoryzacja dzieje się już po stronie platnosci.pl. Serwer platnosci.pl kontaktuje się z naszym serwerem. To dzieje się już bez ingerencji użytkownika i może trwać nawet dniami (w przypadku przekazu pieniężnego, przykładowo).
Chcę zaksięgować wpłatę- musisz udostępnić na świat, a zatem i serwerowi platnosci.pl widok platnosci.views.payment_status_view tak, aby mógł on aktualizować informacje o zmienionych płatnościach
- w przypadku, gdy platnosci.pl po HTTP wywoła nasz serwis i zasygnalizuje, że zmieniła się istniejąca płatność PlatnosciOutgoingTransaction, moduł platnosci z poziomu Django przesyła informację o nowym zadaniu dla Celery -- w takiej sytuacji będzie musiało być uruchomione zadanie platnosci.task.UpdateOutgoingTransactionTask(PlatnosciOutgoingTransaction.pk).
Zaksięgowało się. Co dalej?- co zrobić po aktualizacji transakcji? (vide komentarz na końcu procedury platnosci.task.update_outgoing_transaction) -- to już należy do Ciebie, ten moduł nie implementuje żadnej funkcjonalności związanej z obsługą i zapisywaniem płatności docelowo dla konta użytkownika, ponieważ autorom wydaje się, że jest to bardzo specyficzne zadanie -- czego nie stworzymy w tej kwestii, na pewno nie będziemy w stanie wszystkim dogodzić... być może jest to kwestia do zrobienia - wsteczne zapytanie po HTTP do Twojego serwisu, sygnalizujące ostateczne zatwierdzenie transakcji - czekamy na Wasze komentarze :-)
- możesz ustawić zmienną settings.PLATNOSCI_SUCCESS_URL i wstawić do niej adres URL, który będzie wywołany po każdej udanej (autoryzowanej) płatności - za pomocą metody GET przekaże PlatnosciIncomingTransaction.pk jako pit_id. W ten sposób Twój serwis WWW zostanie powiadomiony o płatności tak szybko, jak to możliwe, w wydajny sposób (bez poolingu). Inna sprawa, że ten URL może być wywoływany wielokrotnie dla jednej i tej samej płatności; do tego, jako, że jest on wystawiony na świat zewnętrzny, to każdy go może wywłoać. Stąd, zalecamy sprawdzenie czy ID podane jako parametr istnieje oraz czy PlatnosciIncomingTransaction.trans_status == '99' oraz PlatnosciIncomingTransaction.added_to_user_account == False.
Definicje kanałów płatności- musisz uruchomić daemona celery wraz z obsługą zadań periodycznych aby pobierać definicje płatności z serwera platnosci.pl (platnosci.task.UpdateDefinitionsTask) oraz aby móc aktualizować na-żądanie (patrz wyżej) zmienione transakcje (platnosci.task.UpdateOutgoingTransactionTask).
- domyślnie, definicje platnosci pobierane są co 2 dni. W przypadku, gdybyś je zmienił, musisz ręcznie wyczyścić bazę danych z obiektów PlatnosciPayType i ponownie uruchomić proces pobierania definicji platnosci.
|