Labas. Kurioje vietoje klaida? Neteisingas parašas, ar apdorojimo klaida? var_dump($ok); // 5 eilutė nuo pabaigos Kokį paslaugos numerį siunčia (i.e. VK_SERVICE)? Ir dar - banke žmonės draugiški. ;) -- JB Mantas rašė: > 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; > } > }