csob / paymentgateway

English documentation of the ČSOB Payment Gateway that offers an API for credit card payments, Apple Pay, Google Pay, mallpay and ČSOB Payment Button.
https://platbakartou.csob.cz/platebni-brana
GNU General Public License v3.0
121 stars 68 forks source link

Non-Numeric value encountered.... crypto.php 31 #407

Closed ondrejvymetalik closed 4 years ago

ondrejvymetalik commented 6 years ago

Zdravím,

někteří mojí zákazníci dostávají tutu chybu při pokusu platby kartou. image001

Děkuji za pomoc

ondrejvymetalik commented 6 years ago

`<?php require_once ('logger.php');

class Constants { static $SHOP_CART_QUANTITY = 1; static $LANGUAGE = 'EN'; static $CURRENCY = 'EUR'; static $PAYMETHOD = 'card'; static $PAYOPERATION = 'payment'; static $GET_RETURNMETHOD = 'GET'; static $POST_RETURNMETHOD = 'POST'; }

/**

/**

function signPaymentInitData( $data, $privateKey, $privateKeyPassword) {

$cart2Sign = $data["cart"][0]["name"] . "|" . $data["cart"][0]["quantity"] . "|" . $data["cart"][0]["amount"] . "|" . $data["cart"][0]["description"] . "|" 
    . $data["cart"][1]["name"] . "|" . $data["cart"][1]["quantity"] . "|" . $data["cart"][1]["amount"];

$data2Sign = $data["merchantId"] . "|" .  $data["orderNo"] . "|" . $data["dttm"] . "|" . $data["payOperation"] . "|" . $data["payMethod"] . "|" . $data["totalAmount"]
    ."|". $data["currency"] ."|". $data["closePayment"]  . "|". $data["returnUrl"] ."|". $data["returnMethod"] . "|" . $cart2Sign . "|" . $data["description"];

$merchantData = $data["merchantData"];
if(!is_null($merchantData)) {
    $data2Sign = $data2Sign . "|" . $merchantData;
}

$customerId = $data["customerId"];
if(!is_null($customerId) && $customerId != '0') {
    $data2Sign = $data2Sign . "|" . $customerId;
}

$data2Sign = $data2Sign . "|" . $data["language"];

if ($data2Sign [strlen ( $data2Sign ) - 1] == '|') {
    $data2Sign = substr ( $data2Sign, 0, strlen ( $data2Sign ) - 1 ); 
}

return sign ( $data2Sign, $privateKey, $privateKeyPassword, "payment/init sign");

}

function createPaymentProcessUrl($merchantId, $payId, $dttm, $privateKey, $privateKeyPassword) { $text = $merchantId . "|" . $payId . "|" . $dttm; $signature = sign($text, $privateKey, $privateKeyPassword, "payment/process sign"); return $merchantId . "/" . $payId . "/" . $dttm . "/" . urlencode($signature); }

function verifyResponse($response, $key, $logMsg) { $text = $response -> payId . "|" . $response -> dttm . "|" . $response -> resultCode . "|" . $response -> resultMessage;

if(!is_null($response -> paymentStatus)) {
    $text = $text  . "|" . $response -> paymentStatus;
}

if(!is_null($response -> authCode)) {
    $text = $text  . "|" . $response -> authCode;
}

if(!is_null($response -> merchantData)) {
    $text = $text  . "|" . $response -> merchantData;
}
return verify($text, $response -> signature, $key, $logMsg);

}

function sign($text, $key, $passwd, $logMsg = null) { $logger = new Logger(); $logger->write($logMsg . ": " . $text); $path = dirname(FILE)."/keys/"; $key = $path . $key; $fp = fopen ( $key, "r" ); if (! $fp) { throw new Exception ( "Key not found" ); } $private = fread ( $fp, filesize ( $key ) ); fclose ( $fp ); $privateKeyId = openssl_get_privatekey ( $private, $passwd ); openssl_sign ( $text, $signature, $privateKeyId ); $signature = base64_encode ( $signature ); openssl_free_key ( $privateKeyId ); return $signature; }

function verify($text, $signatureBase64, $key, $logMsg = null) { $logger = new Logger(); $logger->write($logMsg . ": " . $text); $path = dirname(FILE)."/keys/"; $key = $path . $key; $fp = fopen ( $key, "r" ); if (! $fp) { throw new Exception ( "Key not found" ); } $public = fread ( $fp, filesize ( $key ) ); fclose ( $fp ); $publicKeyId = openssl_get_publickey ( $public ); $signature = base64_decode ( $signatureBase64 ); $res = openssl_verify ( $text, $signature, $publicKeyId ); openssl_free_key ( $publicKeyId ); return (($res != '1') ? false : true); } ?>`

mjanek commented 6 years ago

Dobrý den, Váš požadavek byl zaevidován a předán k řešení. O dalším průběhu Vás bude informovat odpovědný servisní technik. Miroslav Janek

ratajskym commented 5 years ago

Dobrý den, popravdě netuším kde začít s analýzou. Kdy přesně se tohle vyskytuje ? Dokážete to nasimulovat ?

Ve přiloženém kódu mi přijde, že máte starší verzi pluginu, protože v nové verzi dochází k přetypování viz . cena za zboží a cena za dopravu

ratajskym commented 5 years ago

Interně evidováno TSGSMIPS-7231