Sveiki, Reikia idiegti swedbank'o banklink sistema. Ir susiduriau su tokia problema. Gaunu atsakyma ir banko, bet niekaip negaliu patikrinti autentiskumo su banko sertifikatu. Visada gaunu pranesima blogas parasas. Gal kas galit padeti? Paraso tikrinimo kodas: $v = new Verify(); if ($v->checkPaymentStatus() == true) { $currency = new Currency(intval($_REQUEST['VK_CURR'])); $SwedbankBanklink = new SwedbankBanklink(); $SwedbankBanklink->validateOrder($_REQUEST['VK_REF'], _PS_OS_PAYMENT_, $_REQUEST['VK_AMOUNT'], $SwedbankBanklink->displayName, NULL, NULL, $currency->id, true); if($_REQUEST['VK_AUTO'] == 'N'){ $SwedbankBanklink->currentOrder = $SwedbankBanklink->mokejimai_order->id; $order = new Order($SwedbankBanklink->currentOrder); $url = __PS_BASE_URI__.'order-confirmation.php?id_cart='.$cart->id.'&id_module='.$SwedbankBanklink->id.'&id_order='.$SwedbankBanklink->currentOrder.'&key='.$order->secure_key; // print $url; exit; Tools::redirectLink($url); } } else { header("Location: ../../order.php?step=1"); } class Verify{ function checkPaymentStatus() { $file_cert = dirname(__FILE__).'/crtbank/rsa_new.crt'; if(isset($_REQUEST['VK_MAC']) AND isset($_REQUEST['VK_SERVICE'])){ if ($this->verifySignature($file_cert)) { if( ($_REQUEST['VK_SERVICE'] != '1101' && $_REQUEST['VK_SERVICE'] != '70440') || $_REQUEST['VK_SERVICE'] == '1901' ) { //Apmokėjimas nesėkmingas return false; } } else { //Blogas parašas return false; } return true; }else{ //Blogas kreipinys return false; } } function generateMac($arrayStr) { $ret = ""; foreach($arrayStr as $str ) { $sl = strlen($str); if($sl > 0 && $sl < 10) { $ret .= "00".$sl.$str; } if($sl > 9 && $sl < 100) { $ret .= "0".$sl.$str; } if($sl > 99 && $sl < 1000) { $ret .= $sl.$str; } } return $ret; } function verifySignature($file_cert){ // -- skaitomas sertifikato failas $fp = fopen($file_cert, "r"); $cert = fread($fp, 8192); fclose($fp); switch ($_REQUEST['VK_SERVICE']) { // Apmokejimas nepavyko bet patikrinam ar atejo is banko case '1901': $vk_mac_no[] = $_REQUEST['VK_SERVICE']; $vk_mac_no[] = $_REQUEST['VK_VERSION']; $vk_mac_no[] = $_REQUEST['VK_SND_ID']; $vk_mac_no[] = $_REQUEST['VK_REC_ID']; $vk_mac_no[] = $_REQUEST['VK_STAMP']; $vk_mac_no[] = $_REQUEST['VK_REF']; $vk_mac_no[] = $_REQUEST['VK_MSG']; break; //Apmokejimas sekmingas bet patikrinam ar tikrai tai apmokejo bankas. case '1101': $vk_mac_no[] = $_REQUEST['VK_SERVICE']; $vk_mac_no[] = $_REQUEST['VK_VERSION']; $vk_mac_no[] = $_REQUEST['VK_SND_ID']; $vk_mac_no[] = $_REQUEST['VK_REC_ID']; $vk_mac_no[] = $_REQUEST['VK_STAMP']; $vk_mac_no[] = $_REQUEST['VK_T_NO']; $vk_mac_no[] = $_REQUEST['VK_AMOUNT']; $vk_mac_no[] = $_REQUEST['VK_CURR']; $vk_mac_no[] = $_REQUEST['VK_REC_ACC']; $vk_mac_no[] = $_REQUEST['VK_REC_NAME']; $vk_mac_no[] = $_REQUEST['VK_SND_ACC']; $vk_mac_no[] = $_REQUEST['VK_SND_NAME']; $vk_mac_no[] = $_REQUEST['VK_REF']; $vk_mac_no[] = $_REQUEST['VK_MSG']; $vk_mac_no[] = $_REQUEST['VK_T_DATE']; break; default: break; } $vk_mac = $this->generateMac($vk_mac_no); $signature = $_REQUEST['VK_MAC']; $pubkeyid = openssl_get_publickey($cert); $ok = openssl_verify($vk_mac, base64_decode($signature), $pubkeyid); openssl_free_key($pubkeyid); return $ok; } }