Instrukcja podłączenia płatności DotPay

PawelDanielewski
Ten artykuł wymaga dopracowania!

Jeżeli możesz popraw ten artykuł według zaleceń, które możesz znaleźć na stronie [[Artykuły do poprawy]]. Po dopracowaniu tego tekstu można usunąć ten komunikat.

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.

Do integracji będziemy potrzebowali:

  • konto hostingowe z obsługą php
  • 30 minut wolnego czasu
  • konto w Dotpay (aktywne)

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

  • formularz.php
  • dotpay.php
  • koniec.php

Omówmy każdy z nich.

  • formularz.php będzie posiadał w sobie dane, które użytkownik prześle do Dotpay`a. To w nim ustawimy nasz ID, kwotę transakcji, opis itd. Również w nim nasz klient będzie wprowadzał swoje dane.
  • 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 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ść.
  • koniec.php wyświetli informację po tym jak nasz klient zapłaci w DotPay za produkt. Jest to zazwyczaj tekst z rodzaju "dziękujemy za dokonanie płatności, prosimy oczekiwać na realizację zamówienia".

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.

<code class="html4strict"><!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 hidden 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 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:

<a href='https://ssl.dotpay.eu?id=twoj_id_dotpay'>zapłać w dotpay</a>

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"

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

  1. 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

3 komentarzy

Popraw artykuł zgodnie z zaleceniami dot. ich pisania. Kod sformatowałem, bo wyglądało to co najmniej dziwnie.

@Demonical Monk, nie znam tych zasad, nie wiem gdzie są i szczerze, nie wiem czy mam ochotę je poznawać i wdrażać.