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