241 lines
8.6 KiB
PHP
241 lines
8.6 KiB
PHP
<?php
|
|
|
|
class PayMuzo
|
|
{
|
|
public $privatni;
|
|
|
|
public $heslo;
|
|
|
|
public $verejny;
|
|
// parametry: jmeno souboru soukromeho klice, heslo k soukromemu klici, jmeno souboru s verejnym klicem
|
|
// function CSignature($privatni="test_key.pem", $heslo="changeit", $verejny="test_cert.pem"){
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function __construct()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function CSignature($privatni, $heslo, $verejny)
|
|
{
|
|
$fp = fopen($privatni, 'r');
|
|
$this->privatni = fread($fp, filesize($privatni));
|
|
fclose($fp);
|
|
$this->heslo = $heslo;
|
|
|
|
$fp = fopen($verejny, 'r');
|
|
$this->verejny = fread($fp, filesize($verejny));
|
|
fclose($fp);
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function sign($text)
|
|
{
|
|
$pkeyid = openssl_get_privatekey($this->privatni, $this->heslo);
|
|
openssl_sign($text, $signature, $pkeyid);
|
|
$signature = base64_encode($signature);
|
|
openssl_free_key($pkeyid);
|
|
|
|
return $signature;
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function verify($text, $signature)
|
|
{
|
|
$pubkeyid = openssl_get_publickey($this->verejny);
|
|
$signature = base64_decode($signature);
|
|
$vysledek = openssl_verify($text, $signature, $pubkeyid);
|
|
openssl_free_key($pubkeyid);
|
|
|
|
return ($vysledek == 1) ? true : false;
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function getOperation($ID)
|
|
{
|
|
$str = [
|
|
'CREATE_ORDER' => 'Vytvoření objednávky',
|
|
];
|
|
|
|
return $str[$ID];
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function getPRCode($number)
|
|
{
|
|
$errStr = [
|
|
0 => 'OK. Transakce proběhla v pořádku',
|
|
1 => 'Pole príliš dlouhé',
|
|
2 => 'Pole príliš krátké',
|
|
3 => 'Chybný obsah pole',
|
|
4 => 'Pole je prázdné',
|
|
5 => 'Chybí povinné pole',
|
|
11 => 'Neznámý obchodník',
|
|
14 => 'Duplikátní číslo objednávky',
|
|
15 => 'Objekt nenalezen',
|
|
17 => 'Částka k úhradě překročila autorizovanou částku',
|
|
18 => 'Součet kreditovaných částek překročil uhrazenou částku',
|
|
20 => 'Objekt není ve stavu odpovídajícím této operaci',
|
|
26 => 'Technický problém při spojení s autorizačním centrem',
|
|
27 => 'Chybný typ objednávky',
|
|
28 => 'Zamítnuto v 3D',
|
|
30 => 'Zamítnuto v autorizačním centru',
|
|
31 => 'Chybný podpis',
|
|
1000 => 'Technický problém',
|
|
];
|
|
|
|
return $errStr[$number];
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function getSRCode($number)
|
|
{
|
|
$errStr = [
|
|
0 => 'Bez významu',
|
|
1 => 'ORDERNUMBER',
|
|
2 => 'MERCHANTNUMBER',
|
|
6 => 'AMOUNT',
|
|
7 => 'CURRENCY',
|
|
8 => 'DEPOSITFLAG',
|
|
10 => 'MERORDERNUM',
|
|
11 => 'CREDITNUMBER',
|
|
12 => 'OPERATION',
|
|
18 => 'BATCH',
|
|
22 => 'ORDER',
|
|
24 => 'URL',
|
|
25 => 'MD',
|
|
26 => 'DESC',
|
|
34 => 'DIGEST',
|
|
1001 => 'Zamítnuto v autorizačním centru, karta blokována.',
|
|
1002 => 'Zamítnuto v autorizačním centru, autorizace zamítnuta',
|
|
1003 => 'Zamítnuto v autorizačním centru, problem karty',
|
|
1004 => 'Zamítnuto v autorizačním centru, technický problém',
|
|
1005 => 'Zamítnuto v autorizačním centru, problém účtu.',
|
|
3000 => 'Neoveřeno v 3D. Vydavatel karty není zapojen do 3D nebo karta nebyla aktivována. Kontaktujte vydavatele karty.',
|
|
3001 => 'Držitel karty ověřen',
|
|
3002 => 'Neoveřeno v 3D. Vydavatel karty nebo karta není zapojena do 3D. Kontaktujte vydavatele karty.',
|
|
3004 => 'Neoveřeno v 3D. Vydavatel karty není zapojen do 3D nebo karta nebyla aktivována. Kontaktujte vydavatele karty.',
|
|
3005 => 'Zamítnuto v 3D. Technický problém pri ověření držitele karty. Kontaktujte vydavatele karty.',
|
|
3006 => 'Zamítnuto v 3D. Technický problém pri ověření držitele karty.',
|
|
3007 => 'Zamítnuto v 3D. Technický problém v systému zúčtující banky. Kontaktujte obchodníka.',
|
|
3008 => 'Zamítnuto v 3D. Použit nepodporovaný karetní produkt. Kontaktujte vydavatele karty.',
|
|
];
|
|
|
|
return $errStr[$number];
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function getAction($action)
|
|
{
|
|
$ret = '';
|
|
|
|
switch ($action) {
|
|
// autorizovana
|
|
case 'APPROVED':
|
|
$ret = 'autorizována';
|
|
break;
|
|
// uhrazena
|
|
case 'DEPOSITED':
|
|
$ret = 'uhrazena';
|
|
break;
|
|
// zpracovana
|
|
case 'PROCESSED':
|
|
$ret = 'zpracována';
|
|
break;
|
|
// kreditovana
|
|
case 'CREDITED':
|
|
$ret = 'kreditována';
|
|
break;
|
|
// zamitnuta
|
|
case 'DECLINED':
|
|
$ret = 'zamitnuta';
|
|
break;
|
|
// rezervovana
|
|
case 'REVERSED':
|
|
$ret = 'rezervována';
|
|
break;
|
|
// uzavrena
|
|
case 'CLOSED':
|
|
$ret = 'uzavřena';
|
|
break;
|
|
// nedokoncena
|
|
case 'REQUESTED':
|
|
$ret = 'nedokončena';
|
|
break;
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public function getFollowingAction($status)
|
|
{
|
|
$ret = [];
|
|
|
|
switch ($status) {
|
|
// autorizovana
|
|
case 'APPROVED':
|
|
$ret = ['REVERSED', 'DEPOSITED'];
|
|
break;
|
|
// uhrazena
|
|
case 'DEPOSITED':
|
|
$ret = ['APPROVED', 'CLOSED'];
|
|
break;
|
|
// zpracovana
|
|
case 'PROCESSED':
|
|
$ret = ['CREDITED', 'CLOSED'];
|
|
break;
|
|
// kreditovana
|
|
case 'CREDITED':
|
|
$ret = ['CREDITED', 'DEPOSITED', 'CLOSED'];
|
|
break;
|
|
// zamitnuta
|
|
case 'DECLINED':
|
|
$ret = ['DELETED'];
|
|
break;
|
|
// rezervovana
|
|
case 'REVERSED':
|
|
$ret = ['DELETED'];
|
|
break;
|
|
// uzavrena
|
|
case 'CLOSED':
|
|
$ret = ['DELETED'];
|
|
break;
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
}
|