Nestpay payment gateway - problem (wrong security code)

Treba da integrisem jednom prijatelju Nestpay sistem za placanje karticama (koristi ga Intesa), ali iz nekog razloga ne prolazi autorizacija, pa mi sistem vraca “Wrong security code”.
Testirao sam primer koji su oni dali, sve je uradjeno kako treba, ali uvek dobijam isti error.

Taj security code " $storeK" se kreira u testnom panelu i sve je to uradjeno kako treba.

Da li je neko moze da uoci u cemu je problem, ako je nekome poznato:

$orgClientId  =   "111111";
$orgOid =    "3939393";
$storeK="xxxx";
$orgAmount = "500.00";
$orgOkUrl =  "http://www.xxxxx.com/ok.php";
$orgFailUrl = "http://www.xxxxx.com/fail.php";
$orgTransactionType = "Auth";
$orgInstallment = "";
$orgRnd =  microtime();
$orgRnd=str_replace(" ","",$orgRnd);

$orgCurrency = "978";
$instalment='';
$clientId  =  str_replace("|", "\\|", str_replace("\\", "\\\\", $orgClientId));
$oid =   str_replace("|", "\\|", str_replace("\\", "\\\\", $orgOid));
$amount = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgAmount));
$okUrl =  str_replace("|", "\\|", str_replace("\\", "\\\\", $orgOkUrl));
$failUrl = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgFailUrl));
$transactionType = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgTransactionType));
$installment = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgInstallment));
$rnd = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgRnd));
$currency =   str_replace("|", "\\|", str_replace("\\", "\\\\", $orgCurrency));
$storeKey =  str_replace("|", "\\|", str_replace("\\", "\\\\", $storeK));

$plainText = $clientId . "|" . $oid . "|" . $amount . "|" . $okUrl . "|" . $failUrl . "|" .$transactionType . "|" . $rnd . "||||" . $currency . "|" . $storeKey;

$hashValue = hash('sha512', $plainText);
$hash = base64_encode (pack('H*',$hashValue));

Sve gore navedene vrednosti se salju POSTOM na definisani link

<form method="post" action="https://specific link">
        <input type="submit" value="Complete Payment" />
        <input type="hidden" name="clientid" value="<?php echo $orgClientId ?>">
        <input type="hidden" name="ammount" value="<?php echo $orgAmount ?>">
        <input type="hidden" name="oid" value="<?php echo $orgOid ?>">
        <input type="hidden" name="okUrl" value="<?php echo $orgOkUrl ?>">
        <input type="hidden" name="failUrl" value="<?php echo $orgFailUrl ?>">
        <input type="hidden" name="trantype" value="<?php echo $orgTransactionType ?>">
        <input type="hidden" name="currency" value="<?php echo $orgCurrency ?>">
        <input type="hidden" name="rnd" value="<?php echo $orgRnd ?>">
        <input type="hidden" name="hash" value="<?php echo $hash ?>">
        <input type="hidden" name="storetype" value="3d_pay_hosting">
        <input type="hidden" name="hashAlgorithm" value="ver2">
        <input type="hidden" name="lang" value="en">
       
  </form>

Sve deluje ok, ali i dalje dobijam error:

Array
(
    [clientid] => 111111
    [oid] => 3939393
    [mdStatus] => 7
    [mdErrorMsg] => Wrong security code
    [ErrMsg] => Wrong security code
    [Response] => Error
    [ProcReturnCode] => 99
    [hashAlgorithm] => ver2  
    [currency] => 978
    [storetype] => 3d_pay_hosting

Pozz :slight_smile:

Sama dokumentacija mi je uzasno konfuzna i setup, nista mi nije jasno :smiley:

Dodeljeno mi je kao sys adminu da osposobim paymant za jedan outdated sajt koji je imao php fajl koji se trigerovao pri kupovini… sad ne znam sta je potrebno dodati wordpress sajtu da bi se ovo realizovalo, da li si ti ovo radio putem nekog plugina ili kako?

Pokusao sam da promenim sve post parametre u tom php fajlu, mada neki fale i ne radi posao. :confused:

Interesuje me ako mozes da definises neke korake kojim si ti pristupio ovoj implementaciji uz njihovu dokumentaciju.

Uspeo sam da prilagodim podacima za kupovinu i dobio sam prozor za ubacivanje informacija.

Ali request nije prosao kada se posalju informacije, da li je proslo ili ne, checkout ne funkcionise, nista nemam u error logu sto moze da posluzi.

Jedine informacije koje su bile za menjanje da sam primetio za request fajl su clientID i store key, sto sam promenio.

Potrebno je da postavis jedan fajl (definises u promenljivoj $failUrl) koji ce da ti vraca errore koje salje server payment, ako postoji neka greska.
U taj fajl prosto stavi ovo:

<?php
echo "<pre>";
print_r($_REQUEST);
echo "</pre>";
 ?>

Ovo ti je bitno, da ne izostavis nesto. Ako se secam dobro i imam u nekim test fajlovima, ovako treba da izgleda deo koji se koristi za kreiranje plain texta:
$plainText = $clientId . "|" . $oid . "|" . $amount . "|" . $okUrl . "|" . $failUrl . "|" .$transactionType . "||" . $rnd . "||||" . $currency . "|" . $storeKey;

Da li imas sve vrednosti za ove promenljive gore?

To sto sam bio implementirao, nije korisceno za WP sajt vec sam direktno u custom websajtu prilagodjavao i doradjivao.

Meni je nedavno firma iz Bosne radila sličan sistem za WHMCS samo što je kod mene bila UniCredit Banka radili su po ovoj dokumentaciji https://ipg.pikpay.ba/en/documentation/form koja je isto nejasna i nije poptuna ali oni su to brzo i profesionalno odradili, napravili su mi addon za WHMCS, ako te zanima javi se na pp da ti proslijedim njihov link web stranice.

@drmko
Definisao sam kako su mi poslali:
$orgOkUrl = “http://www.xxxxx.rs/NestResponseOK.ashx”;
$orgFailUrl = “http://www.xxxxx.rs/NestResponseFAIL.ashx”;

Gde sam umesto xxxxx ubacio nas website sa koga se kupuje
Doduse nemam ove NestResponse fajlove u prilogu od njih.

Sve konstante su navedene iznad, ovo je ono sto ide ispod njih, sto referencira:

$clientId = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgClientId));
$oid = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgOid));
$amount = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgAmount));
$okUrl = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgOkUrl));
$failUrl = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgFailUrl));
$transactionType = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgTransactionType));
$installment = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgInstallment));
$rnd = str_replace("|", "\\|", str_replace("\\", "\\\\", microtime()));
$currency = str_replace("|", "\\|", str_replace("\\", "\\\\", $orgCurrency));
$storeKey = str_replace("|", "\\|", str_replace("\\", "\\\\", "xxxxx\\|"));

Jedino transactionType i installment nema u dokumentaciji sta i da li treba da se doda, sve ostalo je uredno za constantu plaintext da prisvoji.

Ovo je custom WP sajt, tako da bih rekao da smo na istom sto se tice ovoga.

Sto se tice php za request da proverim, deluje mi sve uredno.
Sad je problem checkout.php .

@WebMajstor
Kliktacu ako stignem malo po sajtu. Problem je sto oni cekaju od nas da mi to sredimo i da oni kazu all good. Ali videcu, mozda cu ih cimati da ubrzamo proces ako zagusti.

TransactionType mora da se definise:

$orgTransactionType = “PreAuth”;
$orgInstallment = “”;

Stavi ako nisi, pa probaj.

My bad, jesam stavio tako kao u dokumentaciji.

Dobijam plain text i fields za ubacivanje:

Credit Card Number
CVV
Expiration Date Year
Expiration Date Month
Choosing Visa / Master Card

kapiram to je rezultat, sledece je pakovanje checkout.php-a

Kada ubacim njihov response, izbacuje mi ovaj error:

3D Payment Page
Payment Response
000
Security Alert. Incorrect Client Id.

Za client ID sam koristio ID koji mi je banka dodelila, koji je ujedino deo logina. Correct?

Tu gresku moze da ti pokaze i ako ti je Client ID dobro upisan i ispravan, a problem moze da ti napravi plain text, jedna tacka vise, crtica, razmak, nastaje neki error, jer njihov procesor iz tog hashovanog plain teksta izvlaci sve parametre, a pogresno ce da izvuce ako je plain tekst neispravan.

Prvo sve testiraj iz jednostavnog primera koji su ti oni dali, da ti to prodje, a onda implementiraj u taj sajt.
Ja nisam imao php test fajlove, nisu mi bili poslali, nego sam iz PDF dokumentacije izvlacio html formu i deo php koda koji je gore naveden.

Znam kako je to, naizgled izgleda ok, a ustvari neka greskica postoji. Kad sam ja testirao, problem je bio u nepravilno kreiranom plain tekstu, izostavio sam bio ovo na jednom mestu ||.

Ako ne uspes da resis da ti radi u osnovnom primeru, postavicu ti deo php koda nesto preradjenog koji kreira taj plain tekst.