Metody płatności
Definiowanie płatności na przykładzie AllPay:
1. Narzędzia -> sprzedaż on-line -> Metody płatności -> dodaj nową2. Wypełniamy formularz:
skrypt -> allpay,
nazwa -> Allpay
Nazwa dodatkowa:, np: Visa, MasterCard, American Express
dodatkowy opis: Obciążenie karty nastąpi w chwili wysłania zamówienia. Autoryzacja zostanie przeprowadzona on-line przez firmę AllPay.
Informacja - akceptacja: Proces płatności zakończył się sukcesem. Zamówienie zostanie zrealizowane.
Informacja - błąd: Proces płatności zakończył się błędem.
po zapisaniu wchodzimy w edycję jeszcze raz i wypełniamy dodatkowe opcje:
Numer ID w AllPay: [numer_applay]
Potwierdzenia URLC - PIN: w opcjach na stronie AllPay.pl należy zdefiniować dowolny PIN szesnastoznakowy, jako adres zwrotny nalezy podać: http://[adres_www]/allpay.php
Domyślny kanał (0-19): 0
---------------
Należy dodać moduł "Płatności"
W administracja -> ustawienia modułów -> dodaj nowy:
moduł: payments
Nazwa: Płatności
globalny: [NIE]
moduł obiektowy: [TAK]
status:: [TAK]
Szablon: payments.tpl
----------------
do menu - w głównej gałęzi należy dodać kategorię "płatności" ->
Uaktywnić w niej moduł "Płatności", wirtualny katalog ustawić na "payments"
Przykładowa klasa płatności w katalogu /payments
(nazwa skryptu zgodna z nazwą podaną w ustawieniu płatności - pole nazwa skrytu - z rozszerzeniem ".inc.php")
<?php
class dotpay {
var $code, $title, $description, $enabled, $type, $par;
var $form_action_url = 'https://ssl.dotpay.eu/';
var $order;
var $params;
var $payment_types = array();
var $types = array (
0 => 'karty płatnicze',
1 => 'mTransfer (mBank)',
2 => 'Płacę z Inteligo (Inteligo Bank PKO BP)',
3 => 'MultiTransfer (MultiBank)',
6 => 'Przelew24 (Bank Zachodni WBK)',
7 => 'ING OnLine (ING Bank Śląski)',
8 => 'Sez@m (Bank Przemysłowo-Handlowy S.A.)',
9 => 'Pekao24 (Bank Pekao S.A.)',
10 => 'MilleNet (Millennium Bank)',
11 => 'przekaz/przelew - forma uniwersalna',
13 => 'Deutsche Bank PBC S.A.',
14 => 'Kredyt Bank S.A. KB24 Bankowośd Elektroniczna',
15 => 'iPKO ( Bank PKO BP)',
16 => 'Lukas Bank',
17 => 'Nordea Bank Polska',
18 => 'Bank BPH - usługa „Przelew z BPH”',
19 => 'Citibank Handlowy',
21 => 'Dotpay Moje Rachunki',
22 => 'Ukash',
23 => 'Moneybookers',
24 => 'mPay',
25 => 'Invest Bank',
26 => 'Bank Ochrony Środowiska',
27 => 'Bank Gospodarki Żywnościowej',
31 => 'Zielone Okienko (Płatnośd w sklepach Żabka)',
32 => 'Fortis Bank S.A.',
33 => 'Volkswagen Bank Polska S.A.');
function get_types() {
foreach ($this->types as $k => $v) {
if ($_SESSION['set']['charset'] != 'utf-8') $v = iconv('utf-8', 'iso-8859-2', $v);
$this->payment_types[] = array(
'pay_type' => $k,
'enabled' => 1,
'title' => $v
);
}
}
function process_button() {
global $_txt, $currencies, $currency, $languages_id, $customer_id, $osCsid, $instance;
$my_order = $_txt['store_name']." - ". $this->order['id']."\n";
$delivery_name = $this->order['firstname']." ".$this->order['lastname'];
$delivery_addr = $order->delivery['street_address']."\n".
$order->delivery['city'].", ".$order->delivery['postcode']."\n".
$order->delivery['country'];
if ($this->order['lastname'] == '' && strpos($this->order['firstname'],' ')) {
list($this->order['firstname'],$this->order['lastname']) = explode(' ',$this->order['firstname']);
}
$process_button_string = tep_draw_hidden_field('session_id', session_id() ) .
tep_draw_hidden_field('lang', 'pl') .
tep_draw_hidden_field('pay', 'yes') .
tep_draw_hidden_field('waluta', $_SESSION['set']['currency_iso']) .
tep_draw_hidden_field('id', $this->params['dotpayid']) .
tep_draw_hidden_field('kanal', ($_POST['pay_type']?$_POST['pay_type']:$this->params['channel'])) .
tep_draw_hidden_field('onlinetransfer', $this->params['online']) .
tep_draw_hidden_field('kwota', round($this->order['total'], 2)) .
tep_draw_hidden_field('opis', $_txt['store_name'].' ' . $this->order['id'] . '-' . date('Ymdhis') ) .
tep_draw_hidden_field('forename', $this->order['firstname']) .
tep_draw_hidden_field('surname', $this->order['lastname']) .
tep_draw_hidden_field('oscdesc', $my_order) .
tep_draw_hidden_field('oscname', $delivery_name) .
tep_draw_hidden_field('deladdr', $delivery_addr) .
tep_draw_hidden_field('street', $this->order['street_address']) .
tep_draw_hidden_field('street_n1', '') .
tep_draw_hidden_field('city', $this->order['city']) .
tep_draw_hidden_field('bill_state', '') .
tep_draw_hidden_field('postcode', $this->order['postcode']) .
tep_draw_hidden_field('country', 'Polska') .
tep_draw_hidden_field('comments', $this->order['comments']) .
tep_draw_hidden_field('phone', $this->order['phone']) .
tep_draw_hidden_field('email', $this->order['email']) .
tep_draw_hidden_field('control', $this->order['uid']) .
tep_draw_hidden_field('vmodule', '1.0.0') .
tep_draw_hidden_field('URLC', tep_href_link('dotpay.php','','SSL')) .
tep_draw_hidden_field('return_url', tep_href_link($instance['payments']->url_success, '', '')) .
tep_draw_hidden_field('cancel_return_url', tep_href_link($instance['payments']->url_fail, '', ''));#
return $process_button_string;
}
function check() {
return true;
}
}
?>
class dotpay {
var $code, $title, $description, $enabled, $type, $par;
var $form_action_url = 'https://ssl.dotpay.eu/';
var $order;
var $params;
var $payment_types = array();
var $types = array (
0 => 'karty płatnicze',
1 => 'mTransfer (mBank)',
2 => 'Płacę z Inteligo (Inteligo Bank PKO BP)',
3 => 'MultiTransfer (MultiBank)',
6 => 'Przelew24 (Bank Zachodni WBK)',
7 => 'ING OnLine (ING Bank Śląski)',
8 => 'Sez@m (Bank Przemysłowo-Handlowy S.A.)',
9 => 'Pekao24 (Bank Pekao S.A.)',
10 => 'MilleNet (Millennium Bank)',
11 => 'przekaz/przelew - forma uniwersalna',
13 => 'Deutsche Bank PBC S.A.',
14 => 'Kredyt Bank S.A. KB24 Bankowośd Elektroniczna',
15 => 'iPKO ( Bank PKO BP)',
16 => 'Lukas Bank',
17 => 'Nordea Bank Polska',
18 => 'Bank BPH - usługa „Przelew z BPH”',
19 => 'Citibank Handlowy',
21 => 'Dotpay Moje Rachunki',
22 => 'Ukash',
23 => 'Moneybookers',
24 => 'mPay',
25 => 'Invest Bank',
26 => 'Bank Ochrony Środowiska',
27 => 'Bank Gospodarki Żywnościowej',
31 => 'Zielone Okienko (Płatnośd w sklepach Żabka)',
32 => 'Fortis Bank S.A.',
33 => 'Volkswagen Bank Polska S.A.');
function get_types() {
foreach ($this->types as $k => $v) {
if ($_SESSION['set']['charset'] != 'utf-8') $v = iconv('utf-8', 'iso-8859-2', $v);
$this->payment_types[] = array(
'pay_type' => $k,
'enabled' => 1,
'title' => $v
);
}
}
function process_button() {
global $_txt, $currencies, $currency, $languages_id, $customer_id, $osCsid, $instance;
$my_order = $_txt['store_name']." - ". $this->order['id']."\n";
$delivery_name = $this->order['firstname']." ".$this->order['lastname'];
$delivery_addr = $order->delivery['street_address']."\n".
$order->delivery['city'].", ".$order->delivery['postcode']."\n".
$order->delivery['country'];
if ($this->order['lastname'] == '' && strpos($this->order['firstname'],' ')) {
list($this->order['firstname'],$this->order['lastname']) = explode(' ',$this->order['firstname']);
}
$process_button_string = tep_draw_hidden_field('session_id', session_id() ) .
tep_draw_hidden_field('lang', 'pl') .
tep_draw_hidden_field('pay', 'yes') .
tep_draw_hidden_field('waluta', $_SESSION['set']['currency_iso']) .
tep_draw_hidden_field('id', $this->params['dotpayid']) .
tep_draw_hidden_field('kanal', ($_POST['pay_type']?$_POST['pay_type']:$this->params['channel'])) .
tep_draw_hidden_field('onlinetransfer', $this->params['online']) .
tep_draw_hidden_field('kwota', round($this->order['total'], 2)) .
tep_draw_hidden_field('opis', $_txt['store_name'].' ' . $this->order['id'] . '-' . date('Ymdhis') ) .
tep_draw_hidden_field('forename', $this->order['firstname']) .
tep_draw_hidden_field('surname', $this->order['lastname']) .
tep_draw_hidden_field('oscdesc', $my_order) .
tep_draw_hidden_field('oscname', $delivery_name) .
tep_draw_hidden_field('deladdr', $delivery_addr) .
tep_draw_hidden_field('street', $this->order['street_address']) .
tep_draw_hidden_field('street_n1', '') .
tep_draw_hidden_field('city', $this->order['city']) .
tep_draw_hidden_field('bill_state', '') .
tep_draw_hidden_field('postcode', $this->order['postcode']) .
tep_draw_hidden_field('country', 'Polska') .
tep_draw_hidden_field('comments', $this->order['comments']) .
tep_draw_hidden_field('phone', $this->order['phone']) .
tep_draw_hidden_field('email', $this->order['email']) .
tep_draw_hidden_field('control', $this->order['uid']) .
tep_draw_hidden_field('vmodule', '1.0.0') .
tep_draw_hidden_field('URLC', tep_href_link('dotpay.php','','SSL')) .
tep_draw_hidden_field('return_url', tep_href_link($instance['payments']->url_success, '', '')) .
tep_draw_hidden_field('cancel_return_url', tep_href_link($instance['payments']->url_fail, '', ''));#
return $process_button_string;
}
function check() {
return true;
}
}
?>
Opis metod:
- check ()
sprawdzanie czy metoda jest dostępna
zwracane wartości - boolean - get_types()
pobieranie typów płatności
zwracane wartości - brak
działanie: ustawienie parametru klasy payment_types - jako tablica, przykład:
$this->payment_types =
array (
array(
'pay_type' => 0,
'enabled' => 1,
'title' => 'karty płatnicze'
),
array(
'pay_type' => 1,
'enabled' => 1,
'title' => 'mTransfer'
)
); - process_button()
wygenerowanie pól formularza z przekierowaniem do systemu płatności
metoda powinna zawrócić jedynie pola - bez tagu <form>
funkcja globalna tep_draw_hidden_field(nazwa, wartość) generuje pola ukryte: <input type="hidden".... />
Skrypt użytkownika
- w katalogu payments możemy umieścić plik "userscript.inc.php" który powinien zawierać funkcję:
payment_status_update($order_id,$paystatus,$orders_base)
której zadaniem będzie zmiana statusu zamówienia
$paystatus == 2 oznacza poprawny odbiór płatności przez skrypt odbierający płatności z systemów płatności
$orders_base - to nazwa bazy zamówień, np: 'zamowienia'
$order_id - ID zamówienia