DotPay Premium SMS - kody o różnych wartościach
Thursday, 16 June 2016, 10:47
DotPay
DotPay to jeden z dwoch (obok Płatności.pl) największych serwisów obsługujących płatności internetowe w Polsce. Ja jakoś preferuję ten pierwszy - może to sentyment, może przyzwyczajenie, ale jakoś wygodniej mi się z nim pracuje. Wydaje się mi być łatwiejszy w implementacji we własnych rozwiązaniach, mniej restrykcyjny (przy zachowaniu wszelkich standardów bezpieczeństwa), a przez to o wiele bardziej elastyczny. Jego wielką zaletą jest wszechstronność, mamy tutaj ogromną ilość różnych kanałów płatności. Jednak o ile w zakresie obsługi mikropłatności i płatności internetowych możliwe, że Płatności.pl ma większą część rynku, to w zakresie płatności SMS wydaje mi się, żę niekwestionowanym liderem jest właśnie DotPay. Ja z DotPayem styczność mam od lat i wdrożenia oparte na tym systemie zdarzają mi się muszę przyznać dość często. Szczególnie ostatnio popularne stało się tworzenie na stronach swego rodzaju portfela, który można doładować na przykład SMSami. Pomijając kwestię prowizji, co moim zdaniem i tak powinno dyskwalifikować to rozwiązanie jako podstawę systemu płatności, mają one jednak jeszcze jedną wadę - sztywno skwantyfikowane wartości. Posiadanie zaufanego systemu płatności jest sprawą kluczową. Obsługując miliony ludzi obracających pieniędzmi w zakresie bankowości zarówno prywatnej jak i profesjonalnej, zakupów i podróży, Partypoker i innych gier online, systemy takie muszą działać szybko i stabilnie. Każda transakcja musi być całkowicie bezpieczna. Tego typu firmy muszą odpowiedzialnie podchodzić nawet do najmniejszych transakcji, aby utrzymać przy sobie klientów i pozyskiwać nowych.
Premium SMS
Jak to w ogóle działa? Od strony użytkownika dość prosto. Właściciel serwisu rejestruje usługę, która dostaje przypisany identyfikator. Użytkownik wysyła SMS na numer o podwyższonej cenie w treści wpisując identyfikator usługi. Pieniądze za takiego drogiego SMSa są dzielone pomiędzy operatora GSM, serwis płatności i właściciela strony. Użytkownik w odpowiedzi dostaje SMSem zwrotnym kod do wykorzystania na stronie. Tutaj popisu wirtuozerii w udoskonaleniu swojego systemu raczej nie wykażemy. Problem jednak jest jak już wspomniałem z wartościami tych SMSów. Otóż istnieje kilka określonych numerów o sztywnych kwotach, z których możemy wybierać. Nieraz jednak potrzeba umożliwić kilka kwot zasileń, jak chociażby we wspomnianym systemie portfela - dajemy użytkownikowi do wyboru wszystkie możliwe warianty cenowe i za ile SMSa wyśle, za tyle zasilamy jego konto. I tutaj pojawia się problem - otóż do samej usługi można wybrać dowolne płatne numery, nawet więcej niż jeden, ale w nigdzie DotPay nie informuje o tym, w jaki sposób sprawdzać co to za kod. Uzytkownik wpisuje nam zawsze ośmioznakowy kod SMS niezależnie od tego z jakiego numeru go otrzyma, a w przykładowych skryptach widzimy jedynie jak sprawdzać na zasadzie prawda/fałsz, czy kod jest prawidłowy. W efekcie wszyscy (przyznam się, że do tej pory sam tak robiłem) postępują łopatologicznie i zakładają osobne usługi dla wszystkich kwot/numerów - na przykład USLUGA2 dla SMSa za 2 PLN, USLUGA3 dla SMSa za 3 PLN i tak dla każdego numeru. W efekcie mamy zazwyczaj 9 różnych kodów i usług do tego samego.
Tego typu profanacje mogłem sobie wybaczyć maksymalnie raz w miesiącu, ale robiąc w przeciągu dwóch tygodniu drugi tego typu system na stronę lesser.pl stwierdziłem, że to idiotyzm. Szukałem w dokumentacji, szukałem w internecie, ale niestety nie znalazłem rozwiązania. Postanowiłem nie odpuszczać i zadzwoniłem na pomoc techniczną DotPay (swoją drogą mogliby coś z tym zrobić, że można się tam dodzwonić jedynie o pełni księżyca w nieparzyste piątki, ale na szczęście tym razem ktoś podniósł słuchawkę), a tam pan uprzejmie mnie poinformował, że owszem nigdzie o tym nie piszą, ale jest taka możliwość i co więcej nie wymaga za dużo gimnastyki - wystarczy zmienić nazwę pliku, który odpytujemy po stronie DotPay.
Sprawdzanie kodu
Metoda ta zadziała tylko w przypadku kodów sprawdzanych po stronie DotPaya, niestety nie da się tego zastosować w przypadku samodzielnego sprawdzania kodów. Na czym polega haczyk? Łopatologiczne rozwiązanie, o którym pisałem wyżej sugeruje sam DotPay podając jako przykłady w dokumentacji usługi AP.ARCH3 i AP.ARCH5. Na dodatek sam proces sprawdzania kodu nie jest nigdzie technicznie opisany, dokumentacja ogranicza się do użycia gotowych udostępnionych skryptów. Skrypty te jak już mówiłem zwracają jedynie jedną informację - czy kod jest poprawny, czy nie.
echo file_get_contents('http://dotpay.pl/check_code.php?type=sms&del=1&id=34286&code=LESSER&check=' . $sms);
W ten sposób uzyskamy jedynie dwie możliwe odpowiedzi - 1 gdy kod jest poprawny, 0 gdy kod nie jest poprawny, podaliśmy błędne dane lub jaki kolwiek inny czynnik sprawia, że nie powinniśmy tego kodu uznać.
Weźmy teraz na przykład usługę AP.LESSER, która posiada przydzielone wszystkie możliwe płatne numery. W takim przypadku nie mamy możliwości odróżnienia kodu za 2 PLN od kodu za 25 PLN. Na szczęście rozwiązanie jest bardzo proste - kod przykładowy odpytuje plik check_code.php, a super tajny plik, który udostępnia wszystkie potrzebne nam informacje nazywa się check_code_fullinfo.php.
echo file_get_contents('http://dotpay.pl/check_code_fullinfo.php?type=sms&del=1&id=34286&code=LESSER&check=' . $sms);
Taki kod umożliwi nam już odbiór znacznie więcej niż tylko stanu kodu. Mamy tutaj dwa rodzaje odpowiedzi - odpowiedź negatywna zawiera 0 (zero), a po spacji zawiera powód błędu.
0 Bad Server
To przykładowy komunikat oznajmujący, że IP, z którego odpytujemy DotPaya nie zgadza się z tym, które przypisaliśmy usłudze. Znacznie ważniejsza jest jednak odpowiedź w przypadku kodu poprawnego.
1 86400 LESSER 15.00
Jak widac mamy już tutaj znacznie więcej niż samą jedynkę. Pierwsza linijka to po prostu 1 oznaczająca odpowiedź pozytywną. Druga linijka i trzecia raczej nie są zbyt przydatne - druga określa długośc przydatności danego kodu, co jednak i tak leży przecież w naszej gestii, trzecia z kolei zawiera nazwę usługi, na który został wysłany SMS, ale to przecież i tak z góry wiemy. Najbardziej przydatna jest ostatnia linijka - zawiera ona kwotę (netto), za ile wysłano SMSa. W tym momencie już chyba wszystko jest jasne - tworzymy usługę (niech będzie ten LESSER), przydzielamy mu dowolne płatne numery i mamy wszystko w obrębie jednej usługi. Jesteśmy w stanie sami dowiedzieć się w czasie sprawdzania, co oznacza ten SMS, co to nam użytkownik namalował. Kiedy użytkownik wyśle SMS pod numer płatny 25 PLN, dostaniemy w odpowiedzi kwotę 25.00, a jeśli wyśle taki sam SMS na numer za 19 PLN, to dostaniemy w odpowiedzi 19.00 i nie ma potrzeby kombinować z tworzeniem kilku usług, tymbardziej, że nieraz zachodzi potrzeba dodania nowych, usunięcia jakiegoś zbyt taniego numeru, czy cokolwiek innego, co spowoduje, że nagle chcemy dodać nowy numer płatny. Wtedy tylko przypisujemy go już istniejącej usłudze i nie ma żadnej potrzeby zmieniania zaplecza technicznego.
Mam nadzieję, że ten wpis znowu się komuś przyda .