RSS
 

Instrukcja podłączenia Dotpay (v2)

18 sty
No Gravatar

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


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.

 

Tags: , , , , , ,

Leave a Reply

 
 
  1. MichałNo Gravatar

    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???

     
  2. Paweł DanielewskiNo Gravatar

    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.

     
  3. MichałNo Gravatar

    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!

     
  4. slamNo Gravatar

    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

     
  5. Paweł DanielewskiNo Gravatar

    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.

     
  6. sLAmNo Gravatar

    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 ?

     
  7. MateuszNo Gravatar

    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.

     
  8. psychobNo Gravatar

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

     
  9. kk77No Gravatar

    14-08-2010 at 07:25

    witam,
    A jak wyglądać powinien plik config.inc.php
    ??

     
  10. kk77No Gravatar

    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

     
  11. psychobNo Gravatar

    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

     
  12. Paweł DanielewskiNo Gravatar

    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

     
  13. MateuszNo Gravatar

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

     
  14. Paweł DanielewskiNo Gravatar

    30-08-2010 at 05:29

    Fakt, zapomniałem o tym wpisie na giełdzie. W takiej sytuacji wszystko jest ok.