Instrukcja podłączenia płatności DOTPAY

Poniżej przedstawiam zaktualizowaną wersję integracji systemu Dotpay.pl

Artykuł przedstawia sposób integracji systemu DOTPAY w trybie automatycznym. Krótko pisząc. Klient wchodzi, płaci, dotpay przesyła do naszej strony dane, nasz skrypt księguje i dopisuje wpłatę np. do salda klienta. Jeśli chcesz jedynie odbierać wpłaty i nie zależy Ci na automatycznych ich księgowaniu skorzystać z podstawowej formy integracji.

Wcześniejsza wersja (1.0) którą opisałem jest już dość przestarzała zatem polecam skorzystać z poniższej.

Do integracji będziemy potrzebowali:

1. konto hostingowe z obsługą php
2. 30 minut wolnego czasu
3. konto w Dotpay (aktywne)
Zaczynamy.

Transakcję będą obsługiwały trzy pliki, które są ze sobą pośrednio powiązane.

1) formularz.php
2) dotpay.php
3) koniec.php

Omówmy każdy z nich.

1) formularz.php będzie posiadał w sobie dane,  które użytkownik prześle do Dotpaya. To w nim ustawimy nasz ID, kwotę transakcji, opis itd. Również w nim nasz klient będzie wprowadzał swoje dane.

2) dotpay.php to plik do połączeń poufnych pomiędzy naszą stroną a serwerem dotpay.pl. Połączenia poufne czyli takie, które są wykonywane wyłącznie pomiędzy serwerami (naszym i dotpay
a) a o którym jako internauta nawet nie musimy wiedzieć, że istnieją. To właśnie plik dotpay.php obsłuży naszą transakcję i zaksięguje płatność.

3) koniec.php jest to plik, który wyświetli informację po tym jak nasz klient zapłaci w dotpayu za produkt. Jest to zazwyczaj tekst z rodzaju "dziękujemy za dokonanie płatności, prosimy oczekiwać na realizację zamówienia" itp.

Jak zatem w skrócie wygląda demonstracyjna transakcja ?

Prowadzimy przykładowo stronę kulinarną. Mamy w niej przepisy na ciasta, potrawy itd. Większość artykułów jest dostępna gratis. Jest natomiast strefa specjalna dla abonentów. Znajdują się tam specjalistyczne artykuły jak wykonać np. sushi czy ugotować zupę z płetwy rekina. Chcemy pobierać opłaty za dostęp do tych materiałów.

Tym samym tworzymy np. w menu zakładkę pt.: "opłać dostęp do strefy specjalnej", internauta klika i jest kierowany do pliku formularz.php

Poniżej przedstawiam przykładową zawartość tego pliku.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr">
<head>
<title>gp.ESTATER.mini PRO</title>
<meta name="keywords" content="tutaj,slowa,kluczowe" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
<form name="do_platnosci" method="POST" action="https://ssl.dotpay.eu">
<input type="hidden" name="id" value="1423" />
<input type="hidden" name="opis" value="Zasilenie konta w portalu PAWELDANIELEWSKI.PL" />
<input type="hidden" name="control" value="" />
<input type="hidden" name="amount" value="100" />
<input type="hidden" name="typ" value="3" />
<input type="hidden" name="URL" value="http://paweldanielewski.pl/koniec.php" />
<input type="hidden" name="URLC" value="http://paweldanielewski.pl/dotpay.php" />
<input type="submit" name="dalej" value="zapłać teraz" />
</form>
</body>
</html>

Czas omówić to co widzisz powyżej. Wskazany kod utworzy stronę z formularzem. input type="hidden" to ustanowienie zmiennej, która będzie niewidoczna. Pisząc krótko tylko przycisk "submit" będzie widoczny na takiej stronie.

Każda ze zmiennych hiden ma nazwę name="costam" oraz wartość value="costam". Są to zmienne niezbędne i wymagane przez Dotpay do poprawnej integracji.

Zmienna id o wartości 1423 określa Twój numer konta Dotpay. Możesz podmienić 1423 na swój numer lub wprowadzić adres email który podałeś podczas rejestracji w Dotpay.

Opis określa co będzie widział nasz klient na stronie Dotpay
a jako opis transakcji.

Control to dowolna wartość, która zostanie zwrócona przez serwer do naszego skryptu. Możesz tutaj wprowadzić dowolną wartość. Jeśli jesteś programistą PHP lub masz większe doświadczenie możesz w tej zmiennej przechować np. numer UID naszego abonenta. Tym samym nasz skrypt dotpay.php automatycznie dopisze dostęp do artykułów o sushi klientowi o wskazanym UID. Jeśli nie wiesz jak wprowadzić tutaj UID klienta lub chcesz jedynie otrzymywać wpłaty bez automatycznego księgowania powinieneś skorzystać z podstawowej formy integracji Dotpay czyli w trybie pół-automatycznym. Wystarczy zatem na stronie umieścić link:

zapłać w dotpay

Każdą wpłatę wykonaną za pomocą w/w odnośnika musisz księgować ręcznie. Moje współczucie jeśli masz transakcje na kwotę 2 - 3 zł w ilości np. 100 sztuk dziennie.

Kolejna zmienna "amount" w kodzie formularz.php określa kwotę na jaką ma zostać obciążony nasz klient. Domyślnie wprowadziłem 100 zł.

Zmiennej "typ" nie modyfikuj.

W dwóch pozostałych zmień adres domeny na swój tak aby prawidłowo kierował na pliki dotpay.php oraz koniec.php

Odpowiadając zatem na pytanie tytułowe. Klient wchodzi na formularz. Klika w przycisk "zapłać teraz" i jest kierowany do strony dotpay.pl

  • Jeśli wiesz jak, możesz taki przycisk dowolnie stylizować, zamienić np. na obazek, powodować podświetlenia po najechaniu (hover) itd. Wskazówka: szukaj w google pod hasłem "css"

... wracając. Klient klika i jest przekierowany na stronę dotpay`a. Tam wybiera swój bank, wprowadza imię, nazwisko itd. Klika na dole strony "dokonaj płatności" i jest kierowany do swojego banku. Tam wykonuje przelew i dalej jest kierowany na stronę dotpaya. Tutaj widzi przycisk "powrót do sklepu". Po kliknięciu trafia pod adres który wprowadziliśmy w zmiennej URL czyli na nasz plik koniec.php

W międzyczasie, chwilę po tym jak zapłaci w swoim banku, w połączeniu nieufnym bank przesyła potwierdzenie do dotpaya, a dotpay na nasz skrypt dotpay.php, który księguje płatność.

Aby prosto to wytłumaczyć:

1. Oficjalna droga

formularz.php -> dotpay.eu -> bank -> dotpay.eu -> koniec.php

2. Droga danych poufnych
dotpay.eu -> bank -> dotpay.eu -> dotpay.php

Poniżej przedstawiam to co interesuje Cię zapewne najbardziej czyli zawartość pliku dotpay.php

<?php
require("config.inc.php");
//Definiujemy tablicę IP z których połączenie jest dozwolone
//Patrz - serwerów dotpay
$allow_server = array('217.17.41.5', '195.150.9.37');
 
//Sprawdzamy czy w/w tablica zawiera numer IP klienta który właśnie się z nami łączy
if (!in_array($_SERVER['REMOTE_ADDR'], $allow_server)) {
        exit('You are not authorized to do this operation!'); //Jeśli nie, to kończymy skrypt
}
 
//Jeśli wszystko jest OK, to zaczynamy księgowanie
if ($_POST['t_status'] == 2 && $_POST['amount'] != '' && $_POST['control'] != '') {
        $control = cln($_POST['control']);
        $amount = cln($_POST['amount']);
        if (is_numeric($control) && is_numeric($amount)) {
                /* tabela mysql [transid w primary z autoinkrementem], [uid], [kwota], [czas] */
                mysql_query('INSERT INTO `transakcje` VALUES ("", "'.$control.'", "'.$amount.'", "'.time().'")');
                echo('OK');
        }
}
mysql_close($dbh);
?>


Jeśli nie znasz podstaw PHP i SQL dojście do tego co napisałem powyżej będzie dla Ciebie drogą przez mękę.

Powyższy kod należy zaznaczyć, skopiować i wkleić do dotpay.php

Spowoduje on zaksięgowanie płatności na koncie naszego abonenta.

UWAGA powyższy kod NIE SPRAWDZA jaka powinna być kwota transakcji a to oznacza, że jakiś cwaniak może przy pomocy odpowiedniego narzędzia zmodyfikować zmienną amount w taki sposób, że zasili nam konto na 1 zł mimo, że wprowadziliśmy np. kwotę abonamentu 20 zł a skrypt i tak zaksięguje go jako poprawną płatność. Niestety takie próby stanowią około 0.5% wszystkich transakcji. Napisanie zabezpieczenia niestety jest już dla bardziej zaawansowanych i celowo nie zostało tutaj zastosowane. Jeśli jednak zależy Ci na jego wprowadzeniu skorzystaj z poniższej podpowiedzi.

1. wprowadź tabelę temp_transakcje w mysql identyczną z tabelą główną transakcji

2. po kliknięciu w przycisk skieruj internautę na plik tranzit.php, w pliku tym zrób odwołanie do mysql aby zapamiętał szczegół transakcji w temp_transakcje, w tym aby zapisał kwotę. Plik ten musi również po załadowaniu automatycznie wysyłać postem formularz dalej do ssl.dotpay.eu. Jako control wprowadź numer ID transakcji z temp_transakcje

3. w pliku dotpay.php napisz kod php/mysql który zrobi odwołanie do mysql i sprawdzi czy to co przedstawia dotpay w zmiennej $_POST['amount'] równa się kwocie z wpisu w tabeli mysql temp_transakcje. Jeśli tak może zaczynać księgowanie jeśli nie wykonaj exit;

Pamiętaj również aby w ustawieniach zaznaczyć (zezwolić) na przekazywanie zmiennej URLC.
Zrobisz to tutaj https://ssl.dotpay.pl/index.php?show=parametry
Zaznaczamy na TAK: "Zezwól na przyjęcie parametru URLC z zewnętrznego serwisu"

Wszelkie szczegóły integracji znajdziesz w dokumentacji na stronie:
https://ssl.dotpay.pl/index.php?show=documentation

To wszystko, zapraszam do komentarzy.
http://www.paweldanielewski.pl[...]dlaczenie-dotpay-v2/#post-tabs