Files
kupshop/class/class.paymuzo.php
2025-08-02 16:30:27 +02:00

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;
}
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////
}