Pereiti prie turinio

Paysera įmokų surinkimas psl. pakeitus iš http į https


Rekomenduojami pranešimai

Sveiki, atrodo, kad būtent po keitimo iš http į https webe nebeveikia paysera įmokų surinkimas. Ar gali taip būti?

 

webtopay.php failas:

class WebToPay_WebClient {

/**

* Gets page contents by specified URI. Adds query data if provided to the URI

* Ignores status code of the response and header fields

*

* @param string $uri

* @param array $queryData

*

* @return string

*

* @throws WebToPayException

*/

public function get($uri, array $queryData = array()) {

if (count($queryData) > 0) {

$uri .= strpos($uri, '?') === false ? '?' : '&';

$uri .= http_build_query($queryData, null, '&');

}

$url = parse_url($uri);

if ('https' == $url['scheme']) {

$host = 'ssl://'.$url['host'];

$port = 443;

} else {

$host = $url['host'];

$port = 80;

}

$fp = fsockopen($host, $port, $errno, $errstr, 30);

if (!$fp) {

throw new WebToPayException(sprintf('Cannot connect to %s', $uri), WebToPayException::E_INVALID);

}

if(isset($url['query'])) {

$data = $url['path'].'?'.$url['query'];

} else {

$data = $url['path'];

}

$out = "GET " . $data . " HTTP/1.0\r\n";

$out .= "Host: ".$url['host']."\r\n";

$out .= "Connection: Close\r\n\r\n";

$content = '';

fwrite($fp, $out);

while (!feof($fp)) $content .= fgets($fp, 8192);

fclose($fp);

list($header, $content) = explode("\r\n\r\n", $content, 2);

return trim($content);

}

}

 

Redirect.php failas:

function get_self_url() {

 

$s = substr(strtolower($_SERVER['SERVER_PROTOCOL']), 0,

 

strpos($_SERVER['SERVER_PROTOCOL'], '/'));

 

if (!empty($_SERVER["HTTPS"])) {

 

$s .= ($_SERVER["HTTPS"] == "on") ? "s" : "";

 

}

 

$s .= '://'.$_SERVER['HTTP_HOST'];

 

if (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] != '80') {

 

$s .= ':'.$_SERVER['SERVER_PORT'];

 

}

 

$s .= dirname($_SERVER['SCRIPT_NAME']);

 

return $s;

 

}

 

 

 

Ar čia yra padaryta, kad veiktų tik ant http? Nes iš payseros pranešimą gaunu:

Pagal pateiktą informaciją į jūsų nurodytą adresą: http://www.manowebas.lt/noriuvip.php, nusiuntus duomenis, buvo gautas atsakymas, kuris neturėjo specifikacijoje nurodyto privalomo „OK“ teksto arba jūsų svetainė tiesiog buvo nepasiekiama.
Redagavo ovsas1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jei tavo svetaine nepasiekiama http protokolu, tuomet gali buti. Pasiziurek nustatymuose ir pacioj paskyroj paysera ar linka callback ir kiti nurodyti su https.

Su http nepasiekiama, yra padarytas redirectas į https. Pačioje payseros paskyroje, tai visur pakeičiau į https. Sms atsiskaitymai atrodo veikia, tik bankiniai neveikia. Tai gal kažkur failuose nusistato webas yra http ar https?

 

Neteisingai gauna tą self url kažkodėl

 

$self_url = get_self_url();

 

$db->query("INSERT INTO dle_user_vip_orders(uid, cost) VALUES ('".$user['user_id']."', '".$paymentList[$paymentNum]."')");

$orderid = $db->query("SELECT * FROM dle_user_vip_orders ORDER BY id DESC LIMIT 1")->fetch_assoc();

 

$request = WebToPay::redirectToPayment(array(

'projectid' => xxx,

'sign_password' => 'xxxx',

'orderid' => $orderid['id'],

'amount' => $paymentList[$paymentNum],

'currency' => 'EUR',

'country' => 'LT',

'accepturl' => $self_url.'paysera_accept.html',

'cancelurl' => $self_url.'paysera_cancel.html',

'callbackurl' => $self_url.'noriuvip.php', ---> http://www.web.lt/noriuvip.php

'test' => 0,

));

} catch (WebToPayException $e) {

header('Location: /');

die(':/');

Redagavo ovsas1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neaisku ar naudoji firmini iskiepi ir kokia versija ant kazkokios sistemos, ar tai jusu koreguota kazkas, ar tai apskritai paciu pasirasyta. Bet siaip nustatymuose neturetu keistis kazkas. Yra instruktazas techninis:

https://developers.paysera.com/lt

 

Jei redirectina is http i https, vadinasi, svetaine veikia ir su http, nes juk auto perraso i https. Tokiu atveju ji pasiekiama. Dar galetum pasiziuret, kokia klaida gauni payseroje ir paskaityt ju klaidu kodu aprasyma + paziuret svetaines log'e arba serverio error log'e, kokia php klaida meta.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neaisku ar naudoji firmini iskiepi ir kokia versija ant kazkokios sistemos, ar tai jusu koreguota kazkas, ar tai apskritai paciu pasirasyta. Bet siaip nustatymuose neturetu keistis kazkas. Yra instruktazas techninis:

https://developers.paysera.com/lt

 

Jei redirectina is http i https, vadinasi, svetaine veikia ir su http, nes juk auto perraso i https. Tokiu atveju ji pasiekiama. Dar galetum pasiziuret, kokia klaida gauni payseroje ir paskaityt ju klaidu kodu aprasyma + paziuret svetaines log'e arba serverio error log'e, kokia php klaida meta.

Nėra jokių klaidų, pinigai yra gaunami. Tik automatiškai neužsideda paslauga. Gaunu tą anksčiau minėtą pranešimą iš payseros, kad jie gauna netinkamą atsakymą.

 

Pagal pateiktą informaciją į jūsų nurodytą adresą: http://www.manowebas.lt/noriuvip.php, nusiuntus duomenis, buvo gautas atsakymas, kuris neturėjo specifikacijoje nurodyto privalomo „OK“ teksto arba jūsų svetainė tiesiog buvo nepasiekiama.
Redagavo ovsas1
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tada reiktu ziureti jusu atsakymo kode. Kiek atsimenu, jiem reikia grazinti tik OK. Realiai ten gali nebuti jokio masyvo, jokiu parametru, o tik reiksme OK. Ir paysera tada klaidos neberodo. Tarkim callback.php irasai:

 

try {
      echo 'OK';
   }

 

Ir jie gauna OK ir klaidos neberodo. Aisku, tai toks work around, kas tik kai kuriom svetainem tinka pasidaryt.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Yra tas ok callback faile:

 

@ob_start ();

@ob_implicit_flush ( 0 );

 

if( !defined( 'E_DEPRECATED' ) ) {

 

@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );

@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );

 

} else {

 

@error_reporting ( E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE );

@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE );

 

}

 

@ini_set ( 'display_errors', true );

@ini_set ( 'html_errors', false );

 

define ( 'DATALIFEENGINE', true );

define ( 'ROOT_DIR', dirname ( __FILE__ ) );

define ( 'ENGINE_DIR', ROOT_DIR . '/engine' );

 

require_once ENGINE_DIR . '/classes/mysql.php';

require_once ENGINE_DIR . '/data/dbconfig.php';

require_once ENGINE_DIR . '/modules/functions.php';

 

require_once('libwebtopay/WebToPay.php');

 

if (isset ($_POST['data'])) {

$data = base64_decode($_POST['data']);

$data = explode('&', $data);

 

$ad = [];

foreach ($data as $d) {

$dd = explode('=',$d);

$ad[$dd[0]] = $dd[1];

}

 

$listOfTime = [

100 => time() + 60 * 60 * 24 * 30,

300 => time() + 60 * 60 * 24 * 90,

500 => time() + 60 * 60 * 24 * 180,

1000 => time() + 60 * 60 * 24 * 366,

];

 

$order = $db->query("SELECT * FROM dle_user_vip_orders WHERE id='".$ad['orderid']."' AND status='0' LIMIT 1")->fetch_assoc();

 

if ($order !== null) {

$vip = $db->query("SELECT * FROM dle_user_vip WHERE uid='".$order['uid']."' LIMIT 1")->fetch_assoc();

 

if ($vip !== null) {

$db->query("UPDATE dle_user_vip SET `time`='".($listOfTime[$ad['amount']])."' WHERE uid='".$order['uid']."' LIMIT 1");

$db->query("UPDATE dle_user_vip_orders SET status='1' WHERE id='".$ad['orderid']."' LIMIT 1");

die('OK');

} else {

$db->query("INSERT INTO dle_user_vip(uid, time, status) VALUES ('".$user['user_id']."', '".$listOfTime[$ad['amount']]."', 0)");

$db->query("UPDATE dle_user_vip_orders SET status='1' WHERE id='".$ad['orderid']."' LIMIT 1");

die('OK');

}

}

}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ką aš žinau...

Tas callback skriptas leidžia bet kam daryti ką tik patinka su tavo duomenų baze - trinti, keisti ar kurti įrašus. Pvz., be jokio mokėjimo tapti VIP arba visiems vartotojams suteikti VIP statusą. Arba visiems atimti. Arba ištrinti visus duomenis, kuriuos turi.

 

Jeigu mokaisi programuoti, būtinai paskaityk, kas yra sql injection ir kaip to išvengti :)

 

Kas tai yra: https://www.php.net/manual/en/security.database.sql-injection.php

Kaip apsisaugoti: https://stackoverflow.com/a/60496/494616

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tas callback skriptas leidžia bet kam daryti ką tik patinka su tavo duomenų baze - trinti, keisti ar kurti įrašus. Pvz., be jokio mokėjimo tapti VIP arba visiems vartotojams suteikti VIP statusą. Arba visiems atimti. Arba ištrinti visus duomenis, kuriuos turi.

 

Jeigu mokaisi programuoti, būtinai paskaityk, kas yra sql injection ir kaip to išvengti :)

 

Kas tai yra: https://www.php.net/manual/en/security.database.sql-injection.php

Kaip apsisaugoti: https://stackoverflow.com/a/60496/494616

Gerai, dėkui. Jeigu toks gudrus, gal žinai, kaip išspręsti tą problemą?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tas callback skriptas leidžia bet kam daryti ką tik patinka su tavo duomenų baze - trinti, keisti ar kurti įrašus. Pvz., be jokio mokėjimo tapti VIP arba visiems vartotojams suteikti VIP statusą. Arba visiems atimti. Arba ištrinti visus duomenis, kuriuos turi.

 

Jeigu mokaisi programuoti, būtinai paskaityk, kas yra sql injection ir kaip to išvengti :)

 

Kas tai yra: https://www.php.net/manual/en/security.database.sql-injection.php

Kaip apsisaugoti: https://stackoverflow.com/a/60496/494616

 

Kaip apsisaugoti - nustoti naudoti plain php ir naudoti frameworkus: Symfony/Laravel ir jų built-in metodus, be savo raw SQL išradinėjimu, jei jau plain SQL tai parametrus reikia set'inti ir PDO. Case closed.

Redagavo Cpliusas
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...