- Pobierz biblioteki Tpay z serwisu Github.com
- Stwórz plik (np. w folderze examples) rozszerzający klasę PaymentCardForms, w którego konstruktorze podaj swoje dane dostępowe do API kart płatniczych:
<?php
namespace tpayLibs\examples;
use tpayLibs\src\_class_tpay\PaymentForms\PaymentCardForms;
use tpayLibs\src\_class_tpay\Utilities\TException;
include_once 'config.php';
include_once 'loader.php';
class CardBasic extends PaymentCardForms
{
public function __construct()
{
$this->cardApiKey = 'bda5eda723bf1ae71a82e90a249803d3f852248d';
$this->cardApiPass = 'IhZVgraNcZoWPLgA';
$this->cardKeyRSA = 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQ2NLRTVZNU1Wemd5a1Z5ODNMS1NTTFlEMEVrU2xadTRVZm1STS8NCmM5L0NtMENuVDM2ekU0L2dMRzBSYzQwODRHNmIzU3l5NVpvZ1kwQXFOVU5vUEptUUZGVyswdXJacU8yNFRCQkxCcU10TTVYSllDaVQNCmVpNkx3RUIyNnpPOFZocW9SK0tiRS92K1l1YlFhNGQ0cWtHU0IzeHBhSUJncllrT2o0aFJDOXk0WXdJREFRQUINCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ';
$this->cardVerificationCode = '6680181602d396e640cb091ea5418171';
$this->cardHashAlg = 'sha1';
parent::__construct();
}
}
- Dodaj funkcję wykonującą zapytanie do serwera Tpay i przekierowanie do panelu transakcyjnego:
public function getRedirectTransaction()
{
try {
$config = [
'name' => 'John Doe',
'email' => '[email protected]',
'desc' => 'Transaction description',
];
$this
->setAmount(123.00)
->setCurrency(985)
->setReturnUrls('https://shop.com/success', 'https://shop.com/error');
$transaction = $this->registerSale($config['name'], $config['email'], $config['desc']);
if (isset($transaction['sale_auth']) === false) {
throw new TException('Error generating transaction: ' . $transaction['err_desc']);
}
$transactionId = $transaction['sale_auth'];
header("Location: https://secure.tpay.com/cards/?sale_auth=$transactionId");
} catch (TException $e) {
echo 'Unable to generate transaction. Reason: ' . $e->getMessage();
}
}
Niektóre dane należy pobrać z bazy danych (kwotę, walutę itp.), w tym przykładzie wprowadziliśmy dane przykładowe.
- Wykonanie funkcji MakeCardPayment() zwróci wynik, zawierający parametr "sale_auth", na który wykonane zostaje przekierowanie klienta.
Przykładowy zestaw parametrów zwracany przez API:
$transaction = [
'result' => '1',
'sale_auth' => 't59c28295aeb071b0cf6471b24f727f6456998de',
];
- Cały plik można wykonać dodając poza klasą linijkę:
(new CardBasic())->getRedirectTransaction();
- Pamiętaj, że powiadomienie o poprawnym opłaceniu zostanie wysłane do Twojego sklepu, dopiero po finalizacji transakcji.
W celu odebrania takiego powiadomienia, utwórz plik CardNotification.php, rozszerzający klasę CardNotificationHandler. W panelu odbiorcy płatności należy podać adres URL prowadzący do tego pliku zgodnie z dokumentacją.
Dodaj konstruktor nowej klasy:
<?php
namespace tpayLibs\examples;
use tpayLibs\src\_class_tpay\Notifications\CardNotificationHandler;
include_once 'config.php';
include_once 'loader.php';
class CardNotification extends CardNotificationHandler
{
public function __construct()
{
$this->cardApiKey = 'bda5eda723bf1ae71a82e90a249803d3f852248d';
$this->cardApiPass = 'IhZVgraNcZoWPLgA';
$this->cardKeyRSA = 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JR2ZNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0R05BRENCaVFLQmdRQ2NLRTVZNU1Wemd5a1Z5ODNMS1NTTFlEMEVrU2xadTRVZm1STS8NCmM5L0NtMENuVDM2ekU0L2dMRzBSYzQwODRHNmIzU3l5NVpvZ1kwQXFOVU5vUEptUUZGVyswdXJacU8yNFRCQkxCcU10TTVYSllDaVQNCmVpNkx3RUIyNnpPOFZocW9SK0tiRS92K1l1YlFhNGQ0cWtHU0IzeHBhSUJncllrT2o0aFJDOXk0WXdJREFRQUINCi0tLS0tRU5EIFBVQkxJQyBLRVktLS0tLQ';
$this->cardVerificationCode = '6680181602d396e640cb091ea5418171';
$this->cardHashAlg = 'sha1';
parent::__construct();
}
}
- Następnie dodaj wywołanie funkcji sprawdzającej powiadomienie systemowe (wbudowanej w bibliotekę Tpay) oraz funkcję getOrderDetailsFromDatabase, która zwróci kwotę i walutę zamówienia zapisane w sklepie, na potrzeby walidacji powiadomienia:
private function getTpayNotification()
{
//Jeżeli chcesz wyłączyć sprawdzanie adresu IP serwera Tpay, wykonaj tą komendę:
$this->disableValidationServerIP();
//Jeżeli korzystasz z proxy, wykonaj tą komendę aby sprawdzić adres IP w tablicy HTTP_X_FORWARDED_FOR:
$this->enableForwardedIPValidation();
$notification = $this->handleNotification();
//Pobierz szczegóły zamówienia z bazy danych sklepu
$shopOrderData = $this->getOrderDetailsFromDatabase($notification['order_id']);
//Sprawdź poprawność podpisu powiadomienia
$this
->setAmount($shopOrderData['amount'])
->setCurrency($shopOrderData['currency'])
->setOrderID($notification['order_id']);
$this->validateCardSign($notification['sign'], $notification['sale_auth'],
$notification['card'], $notification['date'], $notification['status']);
return $notification;
}
private function getOrderDetailsFromDatabase($orderId)
{
//Zaprogramuj pobranie szczegółów zamówienia z bazy sklepu w oparciu o OrderId
//Przykładowe dane na potrzeby przykładu
return [
'amount' => 123.00,
'currency' => 985,
];
}
- Dodaj funkcję sterującą klasą init() oraz własną funkcję setOrderAsConfirmed(), która w oparciu o zwrócone dane oznaczy zamówienie jako opłacone oraz zapisze przydatne dane - np. token klienta do ponownego użytku (cli_auth) oraz tytuł transakcji (sale_auth).
public function init()
{
$notification = $this->getTpayNotification();
if (isset($notification['status']) && $notification['status'] === 'correct') {
$this->setOrderAsConfirmed($notification);
}
}
Zmienna $notification będzie zawierała tablicę danych, opisanych w dokumentacji.
- Dodaj wywołanie nowo stworzonej klasy na jej końcu:
(new CardNotification())->init();