Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Pagalbos su callback


Ewal'

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1584 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

<?php
// Initialize the session
session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: prisijungimas.php");
    exit;
}
    require_once('WebToPay.php');
    require_once('db.php');

    try {
        $response = WebToPay::checkResponse($_GET, array(
        'projectid'     => XXX,
        'sign_password' => 'XXXXXXXXX',
        ));
	
    $u_id=$_SESSION['username'];

	$amount = (int) $response['amount'];

    $sql = "UPDATE users SET money=money+'$amount' WHERE username='$u_id'";

} catch (Exception $e) {
	echo get_class($e).':'.$e->getMessage();
}
?>

Gal turite minčių, kodėl lėšos nėra įrašomos į DB?

Ar gali būtų dėl     $u_id=$_SESSION['username']; ?

 

p.s sukuriau atskirą failą:

<?php
// Initialize the session
session_start();
 
// Check if the user is logged in, if not then redirect him to login page
if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: prisijungimas.php");
    exit;
}
$u_id=$_SESSION['username'];
	echo"$u_id";
	?>

ir pridėjau     require_once('id.php');

nepadėjo ?

Redaguota , nario Ewal'
Nuoroda į komentarą
Dalintis per kitą puslapį

šeip callbacka eina pats paysera ne vartotojas jei čia bank link darai tai turėtu būti accept.php ,cancel.php <- šitie vartotojui jei apmokėjo ir atšauke. o kitas sistemai callbackas kai paysera iskaito pinigus tada pats paysera užeina i tą failą dėl to tokie kaip

$_SESSION["loggedin"]

neturi būti

Nuoroda į komentarą
Dalintis per kitą puslapį

8 minutes prieš, GBandza parašė:

šeip callbacka eina pats paysera ne vartotojas jei čia bank link darai tai turėtu būti accept.php ,cancel.php <- šitie vartotojui jei apmokėjo ir atšauke. o kitas sistemai callbackas kai paysera iskaito pinigus tada pats paysera užeina i tą failą dėl to tokie kaip


$_SESSION["loggedin"]

neturi būti

Gal galėtum pavyzdį parašyti, kaip susekti kuriam naudotojui reikia įterpti šią suma? Šiuo atveju "username" 

Nuoroda į komentarą
Dalintis per kitą puslapį

@Ewal' Paysera sistema kreipiasi į callback.php, ne vartotojas. Vartotoją redirectina vėliau tik į accept.php. Taigi, akivaizdu, kad Paysera nebus prisijungusi ir neveiks.

Pataisytas kodas:

callback.php

Spoiler

<?php

/*
# Kada pakeisi į $_POST.
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
	echo 'Access is denied.';
	exit;
}
*/

require 'WebToPay.php';
require 'db.php';

try {
	# Kada baigsi testuoti, pakeisk vietoj $_GET į $_POST.
	$response = WebToPay::checkResponse($_GET, array(
		'projectid'	 => '',
		'sign_password' => '',
	));

	$order_id = (int) $response['orderid'];
	$user_id = (int) $response['user_id'];

  	# Nepamiršk apsaugoti ir neįterpti bet kokius duomenis. Nepasitikėk third-party atsakymais.
	$currency = $response['currency'];
	# Jau apsaugotas su (int).
	$amount = (int) $response['amount'] / 100;
	$country = $response['country'];

	# Gale if ($currency ...) pridėk – && $amount == [prekes suma], kad sutaptų sumokėta suma (saugumas).
	if ($currency === 'EUR') {
		$mysqli_query = $mysqli_connect->query("UPDATE `users` SET `money` = `money` + $amount WHERE `id` = $user_id LIMIT 1;");

		if ($mysqli_query) {
			echo 'OK Paslauga sėkmingai apmokėta.';
		} else {
			echo 'ERROR Nepavyko atnaujinti duomenų bazės naudotojo lentelės.';
		}
	} else {
		echo 'ERROR Nepakankamas sąskaitos likutis.';
	}
  	
} catch (Exception $e) {
	echo get_class($e).':'.$e->getMessage();
}

$mysqli_connect->close();

?>

 

db.php turėtų atrodyti panašiai

Spoiler

<?php

# Prisijungimo duomenys.
define('DATABASE', 'mysql');
define('DATABASE_SERVER', 'localhost');
define('DATABASE_USER', 'root');
define('DATABASE_PASSWORD', '');
define('DATABASE_NAME', 'database');

$mysqli_connect = new mysqli(DATABASE_SERVER, DATABASE_USER, DATABASE_PASSWORD, DATABASE_NAME);

if ($mysqli_connect->connect_errno) {
	echo 'Nepavyko prisijungti prie „'.DATABASE_SERVER.'“ duomenų bazės.';
	exit;
}

if (!$mysqli_connect->set_charset('latin1')) {
	echo 'Nepavyko nustatyti „'.mb_strtoupper(DATABASE).'“ prisijungimo koduotės.';
	exit;
}

?>

 

redirect.php

Spoiler

<?php

require 'WebToPay.php';
require 'db.php';

if (isset($_GET['user_id'])) {
	$user_id = (int) $_GET['user_id'];
} else {
	echo 'Trūksta privalomų argumentų.';
	exit;
}

$mysqli_select = $mysqli_connect->query("SELECT COUNT(`id`) FROM `users` WHERE `id` = $user_id;");

if ($mysqli_select) {
	$mysqli_count = $mysqli_select->fetch_row()[0];
  
	$mysqli_select->close();

	if ($mysqli_count > 0) {
		try {
			$request = WebToPay::redirectToPayment(array(
				'projectid' => '',
				'sign_password' => '',
				'orderid' => time(),
				'user_id' => $user_id,
				'amount' => (prekeskaina * 100),
				'currency' => 'EUR',
				'country' => 'LT',
				'accepturl' => 'https://www.tavopuslapis.lt/paysera/accept.php',
				'cancelurl' => 'https://www.tavopuslapis.lt/paysera/cancel.php',
				'callbackurl' => 'https://www.tavopuslapis.lt/paysera/callback.php',
				'test' => 1,
			));
			# Kai baigsi testuoti, pašalink 'test' => 1.
		} catch (WebToPayException $e) {
			error_log('Nepavyko prisijungti prie „Paysera“ klasės.', 0);
		}
	} else {
		header('Location: cancel.php');
		exit;
	}
} else {
	error_log('Nepavyko nuskaityti duomenų bazės lentelės.', 0);

	/*
	header('Location: cancel.php');
	exit;
	*/
}

?>

 

-------------------------

Iškvietimas paprastas

<?php

# Kur xx žinoma pakeisti + pridėti daugiau info apie apmokėjimą.
header('Location: paysera/redirect.php?user_id=xx');
exit;

?>

SMS raktažodžiai kažkas panašaus

Spoiler

<?php

require 'WebToPay.php';
require 'db.php';

# Čia raktažodžiai. Gali naudoti ir duomenų bazę jos saugoti.
$keywords = array(
	0 => array(
		'name' => 'pavyzdys',
		'price' => '1.5',
		'reward' => 100
	),
);

try {
	$response = WebToPay::checkResponse($_GET, array(
		'projectid' => '',
		'sign_password' => '',
	));

	$sms = explode(' ', $response['sms']);

	if (is_countable($sms) && count($sms, COUNT_RECURSIVE) === 2) {
		$currency = htmlspecialchars($mysqli_connect->real_escape_string($response['currency']), ENT_QUOTES, 'UTF-8');
		$amount = (int) $response['amount'] / 100;

		$sms_keyword = htmlspecialchars($mysqli_connect->real_escape_string($sms[0]), ENT_QUOTES, 'UTF-8');
		$user_id = htmlspecialchars($mysqli_connect->real_escape_string($sms[1]), ENT_QUOTES, 'UTF-8');
	} else {
		echo 'OK Neteisingai išsiųsta SMS žinutė.';
		exit;
	}

	$mysqli_select = $mysqli_connect->query("SELECT COUNT(`id`) FROM `users` WHERE `id` = $user_id;");

	if ($mysqli_select) {
		$mysqli_count = $mysqli_select->fetch_row()[0];

		$mysqli_select->close();
	} else {
		echo 'OK Kritinė klaida (duomenų bazės).';
		exit;
	}

	if ($mysqli_count > 0 && $currency === 'EUR') {
		foreach ($keywords as $keyword) {
			if ($keyword['name'] === $sms_keyword && $keyword['price'] == $amount) {
				$reward = $keyword['reward'];
			}
		}

		if (isset($reward)) {
			$mysqli_query = $mysqli_connect->query("UPDATE `users` SET `money` = `money` + $reward WHERE `id` = $user_id;");

			if ($mysqli_query) {
				echo 'OK Paslauga buvo sėkmingai suteikta.';
			} else {
				echo 'OK Nepavyko suteikti paslaugos dėl duomenų bazės problemos.';
				exit;
			}
		} else {
			echo 'OK Neegzistuojantis raktažodis.';
			exit;
		}
	} else {
		echo 'OK Toks naudotojas neegzistuoja arba neteisinga valiuta.';
		exit;
	}
} catch (Exception $e) {
	echo get_class($e).':'.$e->getMessage();
}

?>

 

 

Čia iš akies parašiau (supaprastinta versija). Gali kažkur būti pastabumo klaidos, tarkim pamiršau skliaustelį ar kt. Išbandyk ir sužinosi.

Redaguota , nario NTQ
pastabumo klaidos
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1584 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...