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 Dotpay`a. 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 dotpay`u 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.
<form action="https://ssl.dotpay.eu" method="POST"> <input name="id" type="hidden" value="1423" /> <input name="opis" type="hidden" value="Zasilenie konta w portalu PAWELDANIELEWSKI.PL" /> <input name="control" type="hidden" /> <input name="amount" type="hidden" value="100" /> <input name="typ" type="hidden" value="3" /> <input name="URL" type="hidden" value="http://paweldanielewski.pl/koniec.php" /> <input name="URLC" type="hidden" value="http://paweldanielewski.pl/dotpay.php" /> <input name="dalej" type="submit" value="zapłać teraz" /> </form>
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:
<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
Demo przycisku:
* 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
Czy wiesz jak zarobić 20.000 zł w miesiąc przez Internet ?
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");
/*sprawdzam czy nadaje serwer DOTPAY`a */
$ip=$_SERVER['REMOTE_ADDR'];
if($ip=='217.17.41.5'){
$test=1;
}
if($ip=='195.150.9.37'){
$test=1;
}
if($test!=1){
echo "Nie jestes serwerem Dotpay";
exit;
}
/* Jeśli wszystko ok to zaczynamy ksiegowanie */
if($_POST[t_status]==2 and $_POST[amount]!=null and $_POST[control]!=null and $_POST[amount]=='100'){
$control=cln($_POST['control']);
$amount=cln($_POST['amount']);
if(is_numeric($control)==true and 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
Kwotę swojego abonamentu edytujesz we wpisie $_POST[amount]=='100'
Domyślnie ustawiłem 100 zł, kwotę oczywiście możesz dowolnie zmienić.
Skrypt spowoduje on zaksięgowanie płatności na koncie naszego abonenta.
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.
Czy wiesz jak zarobić 20.000 zł w miesiąc przez Internet ?
Michał
31-01-2010 at 22:21
Witam,
Podczas integracji mojego sklepu opartego i CMS Drupal + Ubercart z dotpay napotkałem bardzo dziwną przypadłość.
Mój skrypt odpowiadający księgowaniu zamienia status zamówienia na kompletne i wysyła wiadomość do klienta o tym, że dokonał płatności.
Oto kod:
$ip = trim($_SERVER['REMOTE_ADDR']);
if($ip == '217.17.41.5' || $ip == '195.150.9.37'){
if($_POST['status'] == 'OK' && $_POST['t_status'] == 2){
if(uc_order_update_status($_POST['control'], 'completed')){
echo "OK";
}else{
echo "FAIL";
}
}
}
Dzieją się natomiast jakieś cuda… na razie działam w trybie testowym. Gdy potencjalny klient dokona zapłaty wszystko działa prawidłowo, status zamówienia zmienia się na kompletne ALE WIADOMOŚCI DO NIEGO WYSYŁAJĄ SIĘ W NIESKOŃCZONOŚĆ, JEDNA ZA DRUGĄ O TYM ŻE JEGO ZAMÓWIENIE JEST OPŁACONE.
Wygląda na to że dotpay wysyła w kółko potwierdzenie zapłaty na mój skrypt. W dzienniku zdarzeń zapisywane są następujące logi:
Odsyłający: https://ssl.dotpay.pl/confirm.php
Nazwa hosta: 217.17.41.5
Lokalizacja: http://www.mojsklep.pl/dotpay.php
O CO TU CHODZI???
Paweł Danielewski
01-02-2010 at 10:49
Michale, zerknij tutaj https://ssl.dotpay.pl/login.php?show=testurlc
Wpisz dane przykładowej transakcji i kliknij wykonaj test. Na dole będziesz miał wynik testu + komunikat czy wszystko jest OK. No właśnie, stawiam, że serwer Dotpay odbiera ze skryptu oprócz znaków OK jeszcze coś czego nie widać, być może przed < ? lub za ?> jest spacja która się przesyła, trzeba to sprawdzić pod w/w linkiem.
Michał
01-02-2010 at 14:49
OK, problem rozwiązany, dzięki. Chodziło o to że mój plik który aktualizował zamówienie i miał wyświetlić OK po poprawnym zaktualizowaniu był podstroną Drupala i oprócz OK generował mnustwo innego kodu. Zrobiłem osobny plik i teraz wydaje się że wszystko jest GIT! Peace!
slam
01-04-2010 at 21:30
Spoko poradnik. Właśnie zaimplementowałem płatności, troche przerobiłem Twój skrypt. Poniżej wrzucam, może komuś się przyda.
Początek PHP
// Modyfikacja sLAm require('config.php'); // Połączenie do bazy danych // Sprawdzanie czy DotPay $ip=$_SERVER['REMOTE_ADDR']; if($ip == '217.17.41.5'){ $test = 1; } if($ip == '195.150.9.37'){ $test = 1; } if($test != 1){ echo "Nie jestes serwerem Dotpay"; exit; } $liczba_dni = '4'; // całe doby $kwota = '10.98'; // ZŁ, format 10.98 $id = $_POST['control']; // identyfikator użytkownika $query = mysql_query("SELECT koniec_czasu, liczba_dni FROM uzytkownik WHERE id='".$id."'"); $result = mysql_fetch_array($query, MYSQL_ASSOC); $bierzaca_data = time(); // pobieranie czasu serwera $koniec_czasu = $bierzaca_data + (86400*$liczba_dni); if($_POST[t_status] >= 1 and $_POST[amount] != null and $_POST[control] != null and $_POST[amount] == $kwota){ $control = $_POST['control']; $amount = $_POST['amount']; if($control == true and $amount){ // wrzycenie danych do bazy if ($bierzaca_data > $result[koniec_czasu]) { mysql_query("UPDATE uzytkownik SET koniec_czasu='".$koniec_czasu."' WHERE id='".$control."'"); mysql_query("UPDATE uzytkownik SET liczba_dni='".$liczba_dni."' WHERE id='".$control."'"); echo 'OK'; } // uaktualnianie bazy o dodatkowe dni dostepu else { $aktualna_liczba_dni = $result[liczba_dni]; $aktualny_koniec_czasu = $result[koniec_czasu]; $nowa_liczba_dni = $aktualna_liczba_dni + $liczba_dni; $nowy_koniec_czasu = $aktualny_koniec_czasu + (86400*$liczba_dni); mysql_query("UPDATE uzytkownik SET koniec_czasu='".$nowy_koniec_czasu."' WHERE id='".$control."'"); mysql_query("UPDATE uzytkownik SET liczba_dni='".$nowa_liczba_dni."' WHERE id='".$control."'"); echo 'OK'; } } }Koniec PHP
Skrypt dostepu czasowego do witryny.
W razie pomocy kontakt@pawelsikora.pl
Paweł Danielewski
02-04-2010 at 03:37
Pawle, zerknąłem teraz bez wdawania się w szczegóły.
Zmienna $_POST[t_status]==1 powinna być ustawiona na 2kę.
Statusem jeden Dotpay zonacza NOWE transakcje, 2ką zakończone poprawnie. Oznacza to, że przy ustawionym 1 przejdzie transakcja i taki delikwent dostanie czas dostępu nawet jeśli wybierze np. płatność na poczcie.
Przy 2jce dopiero zostanie to dopisane w chwili gdy zapłaci faktycznie i zostanie to zaksięgowane w Dotpayu.
sLAm
02-04-2010 at 11:55
O, zapomniałem to zmienić
Testowałem na DotPay URLC, a z 2 nie przechodziło, więc do testów ustawiłem 1. Faktycznie możesz wyedytować mój powyższy post i zmienić na :
$_POST[t_status] == 2
A swoja drogą, ciekawe czemu z 2 w teście URLC na DotPay nie przechodziło ? Być może dla tego, ze to test ?
Mateusz
05-07-2010 at 20:45
Świetny poradnik. Dobrze, że tu trafiłem. Informacje przydały się do jednej z moich stron. Dziękuję i pozdrawiam.
psychob
05-08-2010 at 19:46
@sLAm
Może dlatego, że nie zmieniłeś „test dla transakcji” z nowa do „Wykonana”.
Dzięki za poradnik. Może się przydać.
kk77
14-08-2010 at 07:25
witam,
A jak wyglądać powinien plik config.inc.php
??
kk77
14-08-2010 at 08:21
Pojawia mi się taki komunikat jak testuje
Sprawdzanie potwierdzeń za pomocą potwierdzeń URLC
Warning: mysql_close(): supplied argument is not a valid MySQL-Link resource in /home/****/public_html/biuro/dotpay/dotpay.php on line 25
Status: Nieprawidłowe potwierdzenie odbioru. Oczekiwany komunikat: OK
psychob
19-08-2010 at 16:59
Dobra przeczytałem i mam parę Ale:
- (ktoś od kogoś zrzynał) http://portalijczyk.pl/?p=99
- cln(), mój php nie zna takiej funkcji (http://pl.php.net/manual-lookup.php?pattern=cln&src=)
- no i można by rozwinąć mocno ten temat, w tym artykule poleciałeś jednak po łebkach
Paweł Danielewski
21-08-2010 at 20:41
1. niestety ale jest to (prawdopodobnie) jeden z moich klientów, który oprócz skopiowania artykułu ode mnie, oferuje usługi oficjalnie wykonywane przez moich techników tyle, że za połowę ceny.
2. cln jest funkcją zdefiniowaną przeze mnie. fuction cln($var){ return strip_tags($var); }
3. można tylko potrzeba więcej czasu
W jaki sposób podłączyć płatności Dotpay? | Portalijczyk.pl
26-08-2010 at 11:54
[...] powstał w oparciu o http://www.paweldanielewski.pl/index.php/2010/01/18/poradnik-podlaczenie-dotpay-v2/ Podziel [...]
Mateusz
26-08-2010 at 12:16
tekst na mojej stronie został częściowo przeredagowany, na końcu znajduje się również informacja o źródle z linkiem do tego blogu, a dodatkowo nagrałem krótki materiał video. co do oferowanej przeze mnie usługi np instalacji portali zabrzmiało to jak zarzut, a przecież na stronie GP w dziale „Giełda Pomocy” można przeczytać:
„Co mogę zlecać? Jakie pytania zadawać? Które usługi wykonywać ?
Praktycznie wszystko. Choć sami oferujemy np. płatne instalacje, możesz je wykonywać jako Pomocnik taniej, nie ograniczamy Cię w tej kwestii. Liczy się przede wszystkim jakość usługi. Pamiętaj, jeśli Użytkownik raz skorzysta z Twoich usług i będzie zadowolony, istnieje b. duże prawdopodobieństwo, że zrobi to po raz drugi.”
Paweł Danielewski
30-08-2010 at 05:29
Fakt, zapomniałem o tym wpisie na giełdzie. W takiej sytuacji wszystko jest ok.