Hi,
I'm stucked :/
I don't know what I'm doing wrong now.
about PayPal:
I have a business account.
I set these files:
buypoints.php
and
ipn.php
When I checked my website:
http://server_name.pl/ipn.php
is blank page
When I'm trying to buy points from my website for example for 1 PLN (test value) and an account didn't get these points.
Table of premium points is in accounts, I mean accounts > premium_points, no znote_accounts > points.
I tried to change from ipn.php znote_accounts to accounts etc but always I'm getting some errors.
I fixed almost everything and changed all value of Znote from znote_accounts to accounts and from points to premium_points exclude these files.
I tried many things and always I'm not getting points on my test account ;<
and about HomePay.
how to set this shit? xD
should have I any IPN or something for this?
I need to have sms shop system ready in couple days :<
Thanks for answers and any assistance.
I added second post with smaller problem cuz of limit 25000.
I'm stucked :/
I don't know what I'm doing wrong now.
about PayPal:
I have a business account.
I set these files:
buypoints.php
Code:
<?php require_once 'engine/init.php';
protect_page();
include 'layout/overall/header.php';
// Import from config:
$pagseguro = $config['pagseguro'];
$paypal = $config['paypal'];
$prices = $config['paypal_prices'];
#################### CONFIG ####################
$config['server']['serverName'] = 'SERVER NAME';
#aktywacja homepay, wartosci: true / false
# activate homepay, values: true / false
$config['homepay'] = array();
$config['homepay_active'] = true;
$config['homepay_active_sms'] = true; #active homepay sms system?
$config['homepay_active_transfer'] = true; #active homepay transfer system?
# przykladowy konfig dla SMS
# Example configuration for SMS
$config['homepay'][9]['acc_id'] = 12312;
$config['homepay'][9]['addpoints'] = 200;
$config['homepay'][9]['sms_number'] = "NUMER";
$config['homepay'][9]['type'] = "sms";
$config['homepay'][9]['sms_text'] = "TEXT";
$config['homepay'][9]['sms_cost'] = "COST";
$config['homepay'][10]['acc_id'] = 12312;
$config['homepay'][10]['addpoints'] = 500;
$config['homepay'][10]['sms_number'] = "NUMER";
$config['homepay'][10]['type'] = "sms";
$config['homepay'][10]['sms_text'] = "TEXT";
$config['homepay'][10]['sms_cost'] = "w chuj";
# przykladowy konfig dla przelewu
# Sample configuration for transfer
$config['homepay'][1]['acc_id']=12298;
$config['homepay'][1]['addpoints']=250;
$config['homepay'][1]['link']="https://homepay.pl/wplata/12298-250";
$config['homepay'][1]['type']="przelew";
$config['homepay'][1]['przelew_text']="250";
$config['homepay'][1]['przelew_cost']="2,50 zl brutto";
$config['homepay'][2]['acc_id']=12299;
$config['homepay'][2]['addpoints']=600;
$config['homepay'][2]['link']="https://homepay.pl/wplata/12299-500";
$config['homepay'][2]['type']="przelew";
$config['homepay'][2]['przelew_text']="500";
$config['homepay'][2]['przelew_cost']="5,00 zl brutto";
$config['homepay'][3]['acc_id']=12300;
$config['homepay'][3]['addpoints']=1500;
$config['homepay'][3]['link']="https://homepay.pl/wplata/12300-1500";
$config['homepay'][3]['type']="przelew";
$config['homepay'][3]['przelew_text']="1500";
$config['homepay'][3]['przelew_cost']="11,00 zl brutto";
$config['homepay'][4]['acc_id']=12301;
$config['homepay'][4]['addpoints']=3000;
$config['homepay'][4]['link']="https://homepay.pl/wplata/12301-3000";
$config['homepay'][4]['type']="przelew";
$config['homepay'][4]['przelew_text']="3000";
$config['homepay'][4]['przelew_cost']="19,00 zl brutto";
$config['homepay'][5]['acc_id']=12302;
$config['homepay'][5]['addpoints']=4500;
$config['homepay'][5]['link']="https://homepay.pl/wplata/12302-4500";
$config['homepay'][5]['type']="przelew";
$config['homepay'][5]['przelew_text']="4500";
$config['homepay'][5]['przelew_cost']="29,00 zl brutto";
#################################################################################
# aktywacja uslugi daopay
# Enable daopay service
$config['daopay'] = array();
$config['daopay_active'] = false; #true/false
# przyklad configu dla daopay
# Example config for daopay
$config['daopay'][21]['appcode'] = 12345; #
$config['daopay'][21]['prodcode'] = 'NAZWAUSLUGI'; #
$config['daopay'][21]['addpoints'] = '100'; #
$config['daopay'][21]['cost'] = "1 euro inc. VAT"; #
#################################################################################
// This function add shop points to the znote_accounts table
function add_points($account_name, $points) {
$account_name = sanitize($account_name);
$points = (int)$points;
$accid = user_character_account_id($account_name);
$account = mysql_select_single("SELECT `points` FROM `znote_accounts` WHERE `account_id`='$accid'");
if ($account !== false) {
$tmp = $account['points'];
$tmp += $points;
mysql_update("UPDATE `znote_accounts` SET `points`='$tmp' WHERE `account_id`='$accid'");
return true;
} else return false;
}
// This file dumps transactions to the homepay.log flatfile
function save_trans($account_name, $code) {
$file = fopen('homepay.log', "a");
fwrite($file, $code.'='.$account_name.' ['.date("m.d.y g:i").']');
fclose($file);
}
// sms validation
// Does some local code string validation, returns 0 if validation fails, proceeds if validation succeed.
// Sends a request to homepay to validate the code string
// Returns the result
function check_code_homepay($code,$type) {
global $config;
if (!preg_match("/^[A-Za-z0-9]{8}$/",$code)) return 0;
$code=urlencode($code);
$handle=fopen("http://homepay.pl/sms/check_code.php?acc_id=".(int)($config['homepay'][$type]['acc_id'])."&code=".$code,'r');
$status=fgets($handle,8);
fclose($handle);
return $status;
}
// Some other API validation?
// Same as above function, but through another API
function check_tcode_homepay($code,$type) {
global $config;
if (!preg_match("/^[A-Za-z0-9]{8}$/",$code)) return 0;
$code=urlencode($code);
$handle=fopen("http://homepay.pl/API/check_tcode.php?acc_id=".(int)($config['homepay'][$type]['acc_id'])."&code=".$code,'r');
$status=fgets($handle,8);
fclose($handle);
return $status;
}
?>
<!-- Default homepay styling -->
<style>
.alert{
border: 2px solid;
font-size: 12px;
margin: 10px 0;
padding: 7px;
}
.alert-error{
border-color: red;
color: red;
}
.alert-notice{
border-color: orange;
color: orange;
}
.alert-success{
border-color: green;
color: green;
}
</style>
<div class="alert alert-notice">
<strong>UWAGA!</strong> Prosimy zapoznac sie z regulaminem swiadczonych uslug zamieszczonym na dole tej strony.
</div>
<?php
// Request submit
if (isset($_POST['submit'])) {
$sms_type = (int) $_POST['sms_type'];
$posted_code = trim($_POST['code']);
$to_user = trim($_POST['to_user']);
$errors = array();
if (!empty($to_user) && !empty($posted_code)) {
$account_name = $to_user;
if (count($errors) == 0) {
if ($config['homepay'][$sms_type]['type']=="sms") {
//////// zeby nie zuzywalo kodu gdy wpiszemy zly kod/////////////
if (user_character_exist($account_name)) {
$code_info = check_code_homepay($posted_code,$sms_type);
} else {
$code_info = 99;
}
//////// zeby nie zuzywalo kodu gdy wpiszemy zly kod/////////////
} else /*przelewy*/ {
if (user_character_exist($account_name)) {
$code_info = check_tcode_homepay($posted_code,$sms_type);
} else {
$code_info = 99;
}
}
// Status responses?
switch ($code_info) {
// Success?
case '1':
if (add_points($account_name, $config['homepay'][$sms_type]['addpoints'])) {
echo '<div class="alert alert-success"><strong>SUKCES!</strong> Dodano '.$config['homepay'][$sms_type]['addpoints'].' punktow premium do konta z postacią: '.$to_user.'!</div>';
save_trans($account_name,$posted_code);
} else {
echo '<div class="alert alert-error"><strong>ERROR!</strong> Wystapil blad podczas dodawania punktow do konta.</div>';
}
break;
// Error from homepay?
case '0':
echo '<div class="alert alert-error"><strong>ERROR!</strong> Podany kod z SMSa/przelewu jest niepoprawny lub wybrano zla opcje SMSa/przelewu!</div>';
break;
// Error by own validation?
case '99':
echo '<div class="alert alert-error"><strong>ERROR!</strong> Konto z podaną postacią nie istnieje!</div>';
break;
// Some other error from homepay?
default:
echo '<div class="alert alert-error"><strong>ERROR!</strong> Unsupported code_info: '. $code_info .'</div>';
break;
}
} else {
data_dump(false, $errors, "Error:");
}
} else {
echo '<div class="alert alert-error"><strong>ERROR!</strong> Wypełnij wszystkie pola!</div>';
}
}
// If homepay SMS service is activated
if ($config['homepay_active_sms']):
foreach ($config['homepay'] as $sms):
if ($sms['type'] == 'sms'):
?>Wyslij SMS na numer <b><?php echo $sms['sms_number']; ?></b> o tresci <b><?php echo $sms['sms_text']; ?></b> za <font color="green"><b><?php echo $sms['sms_cost']; ?></b></font>, a za kod dostaniesz <font color="green"><b><?php echo $sms['addpoints']; ?></b></font> punktow premium.<br/><?php
endif;
endforeach;
?><br /><?php
endif;
// If homepay transfer service is activated?
if ($config['homepay_active_transfer']):
?>
<table class="table table-bordered">
<tr>
<td>
<h2 align="center">Przelew</h2>
Prosimy zapoznac sie z regulaminem swiadczonych uslug zamieszczonym na dole tej strony.
<br/>
<br/>
<?php
foreach ($config['homepay'] as $przelew):
if ($przelew['type'] == 'przelew'):
?>
<b>* Adres - <a href="<?php echo $przelew['link']; ?>"><font color="green"><?php echo $przelew['link']; ?></font></a> - koszt <font color="green"><b><?php echo $przelew['przelew_cost']; ?></b></font>, a za kod dostaniesz <font color="green"><b><?php echo $przelew['addpoints']; ?></b></font> punktow premium.</b><br/>
<?php
endif;
endforeach;
?>
</td>
</tr>
</table>
<br />
<?php
endif;
?>
<!-- Homepay submit form -->
<form method="post" action="" id="enter_code">
<table>
<tr>
<td><b>Nick postaci: </b></td>
<td>
<input type="text" size="20" value="" name="to_user" />
</td>
</tr>
<tr>
<td><b>Kod z SMSa/Przelewu: </b></td>
<td>
<input type="text" id="code" size="20" value="" name="code" />
</td>
</tr>
<tr>
<td><b>Typ wyslanego SMSa/Przelewu: </b></td>
<td>
<select name="sms_type">
<?php
foreach ($config['homepay'] as $id => $sms) {
// SMS input form
if ($sms['type'] == 'sms'):
?>
<option value="<?php echo $id; ?>">numer <?php echo $sms['sms_number'].' - kod '.$sms['sms_text'].' - SMS za '.$sms['sms_cost']; ?></option>
<?php
endif;
}
foreach ($config['homepay'] as $id2 => $przelew) {
// transfer input form?
if ($przelew['type'] == 'przelew'):
?>
<option value="<?php echo $id2; ?>">przelew - kod <?php echo $przelew['przelew_text'].' - za '.$przelew['przelew_cost']; ?></option>
<?php
endif;
}
?>
</select>
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" name="submit" value="Sprawdz" />
</td>
</tr>
</table>
</form>
<br />
<table>
<tr>
<td>
<center><img border="0" src="http://homepay.pl/public/images/logo.png"></center>
<br />
<hr>
Serwis SMS obslugiwany przez <a href="http://www.homepay.pl" target="_blank">Homepay.pl</a>
<br />Regulamin: <a href="http://homepay.pl/regulamin/regulamin_sms_premium/" target="_blank">http://homepay.pl/regulamin/regulamin_sms_premium/</a>
<br />Usluga dostepna w sieciach: Era, Orange, Play, Plus GSM.
<br/>
<hr>
<b>Regulamin uslug dostepnych na stronie:</b>
<br/><b>1.a)</b> Kiedy Twój poprawnie wyslany SMS zostanie dostarczony otrzymasz SMS zwrotny z kodem.
<br/><b>1.b)</b> Kiedy Twój przelew zostanie zaksiegowany (z kart kredytowych i bankow internetowych z listy, jest to kwestia paru sekund) na e-mail który podales w formularzu otrzymasz kod.
<br/><b>2.</b> Po otrzymaniu kodu SMS/przelewu i wpisaniu go wraz z nazwa konta w powyzszym formularzu, na serwerze Dexteria RPG podane konto zostanie automatycznie doladowane o okreslona ilosc <b>punktów premium</b> które nastepnie moga byc zamienione na wirtualne przedmioty w grze Open Tibia Serwer zwana <b>Naruto History</b>.
<br/><b>3.</b> Do pelnego skozystania z uslugi wymagana jest przegladarka internetowa oraz polaczenie z siecia Internet.
<br/><b>4.</b> <b>Naruto History</b> nie odpowiada za zle wpisane tresci SMS.
<br/><b>5.</b> W razie problemów z dzialaniem uslugi nalezy kontaktowac sie z <a href="mailto:EMAIL">EMAIL</a>
</td>
</tr>
</table>
<h1>Buy Points</h1>
<h2>Buy points using Paypal:</h2>
<table id="buypointsTable" class="table table-striped table-hover">
<tr class="yellow">
<th>Price:</th>
<th>Points:</th>
<?php if ($paypal['showBonus']) { ?>
<th>Bonus:</th>
<?php } ?>
<th>Action:</th>
</tr>
<?php
foreach ($prices as $price => $points) {
echo '<tr class="special">';
echo '<td>'. $price .'('. $paypal['currency'] .')</td>';
echo '<td>'. $points .'</td>';
if ($paypal['showBonus']) echo '<td>'. calculate_discount(($paypal['points_per_currency'] * $price), $points) .' bonus</td>';
?>
<td>
<form action="https://www.paypal.com/cgi-bin/webscr" method="POST">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="<?php echo $paypal['email']; ?>">
<input type="hidden" name="item_name" value="<?php echo $points .' shop points on '. $config['site_title']; ?>">
<input type="hidden" name="item_number" value="1">
<input type="hidden" name="amount" value="<?php echo $price; ?>">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="no_note" value="1">
<input type="hidden" name="currency_code" value="<?php echo $paypal['currency']; ?>">
<input type="hidden" name="lc" value="GB">
<input type="hidden" name="bn" value="PP-BuyNowBF">
<input type="hidden" name="return" value="<?php echo $paypal['success']; ?>">
<input type="hidden" name="cancel_return" value="<?php echo $paypal['failed']; ?>">
<input type="hidden" name="rm" value="2">
<input type="hidden" name="notify_url" value="<?php echo $paypal['ipn']; ?>" />
<input type="hidden" name="custom" value="<?php echo (int)$session_user_id; ?>">
<input type="submit" value=" PURCHASE ">
</form>
</td>
<?php
echo '</tr>';
}
?>
</table>
<?php
if ($config['pagseguro']['enabled'] == true) {
?>
<h2>Buy points using Pagseguro:</h2>
<form target="pagseguro" action="https://<?=$pagseguro['urls']['www']?>/checkout/checkout.jhtml" method="post">
<input type="hidden" name="email_cobranca" value="<?=$pagseguro['email']?>">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="<?=$pagseguro['currency']?>">
<input type="hidden" name="ref_transacao" value="<?php echo (int)$session_user_id; ?>">
<input type="hidden" name="item_id_1" value="1">
<input type="hidden" name="item_descr_1" value="<?=$pagseguro['product_name']?>">
<input type="number" name="item_quant_1" min="1" step="4" value="1">
<input type="hidden" name="item_peso_1" value="0">
<input type="hidden" name="item_valor_1" value="<?=$pagseguro['price']?>">
<input type="submit" value=" PURCHASE ">
</form>
<br>
<?php } ?>
<?php
if ($config['paygol']['enabled'] == true) {
?>
<!-- PayGol Form using Post method -->
<h2>Buy points using Paygol:</h2>
<?php $paygol = $config['paygol']; ?>
<p><?php echo $paygol['price'] ." ". $paygol['currency'] ."~ for ". $paygol['points'] ." points:"; ?></p>
<form name="pg_frm" method="post" action="http://www.paygol.com/micropayment/paynow" >
<input type="hidden" name="pg_serviceid" value="<?php echo $paygol['serviceID']; ?>">
<input type="hidden" name="pg_currency" value="<?php echo $paygol['currency']; ?>">
<input type="hidden" name="pg_name" value="<?php echo $paygol['name']; ?>">
<input type="hidden" name="pg_custom" value="<?php echo $session_user_id; ?>">
<input type="hidden" name="pg_price" value="<?php echo $paygol['price']; ?>">
<input type="hidden" name="pg_return_url" value="<?php echo $paygol['returnURL']; ?>">
<input type="hidden" name="pg_cancel_url" value="<?php echo $paygol['cancelURL']; ?>">
<input type="image" name="pg_button" src="http://www.paygol.com/micropayment/img/buttons/150/black_en_pbm.png" border="0" alt="Make payments with PayGol: the easiest way!" title="Make payments with PayGol: the easiest way!">
</form>
<?php }
if (!$config['paypal']['enabled'] && !$config['paygol']['enabled'] && !$config['pagseguro']['enabled']) echo '<h1>Buy Points system disabled.</h1><p>Sorry, this functionality is disabled.</p>';
include 'layout/overall/footer.php'; ?>
and
ipn.php
Code:
<?php
if (gethostbyaddr($_SERVER['REMOTE_ADDR']) !== 'notify.paypal.com') {
exit();
}
// Require the functions to connect to database and fetch config values
require 'config.php';
require 'engine/database/connect.php';
// Fetch and sanitize POST and GET values
function getValue($value) {
return (!empty($value)) ? sanitize($value) : false;
}
function sanitize($data) {
return htmlentities(strip_tags(mysql_znote_escape_string($data)));
}
function VerifyPaypalIPN(array $IPN = null){
if(empty($IPN)){
$IPN = $_POST;
}
if(empty($IPN['verify_sign'])){
return null;
}
$IPN['cmd'] = '_notify-validate';
$PaypalHost = (empty($IPN['test_ipn']) ? 'www' : 'www.sandbox').'.paypal.com';
$cURL = curl_init();
curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($cURL, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($cURL, CURLOPT_URL, "https://{$PaypalHost}/cgi-bin/webscr");
curl_setopt($cURL, CURLOPT_ENCODING, 'gzip');
curl_setopt($cURL, CURLOPT_BINARYTRANSFER, true);
curl_setopt($cURL, CURLOPT_POST, true); // POST back
curl_setopt($cURL, CURLOPT_POSTFIELDS, $IPN); // the $IPN
curl_setopt($cURL, CURLOPT_HEADER, false);
curl_setopt($cURL, CURLOPT_RETURNTRANSFER, true);
curl_setopt($cURL, CURLOPT_FORBID_REUSE, true);
curl_setopt($cURL, CURLOPT_FRESH_CONNECT, true);
curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($cURL, CURLOPT_TIMEOUT, 60);
curl_setopt($cURL, CURLINFO_HEADER_OUT, true);
curl_setopt($cURL, CURLOPT_HTTPHEADER, array(
'Connection: close',
'Expect: ',
));
$Response = curl_exec($cURL);
$Status = (int)curl_getinfo($cURL, CURLINFO_HTTP_CODE);
curl_close($cURL);
if(empty($Response) or !preg_match('~^(VERIFIED|INVALID)$~i', $Response = trim($Response)) or !$Status){
return null;
}
if(intval($Status / 100) != 2){
return false;
}
return !strcasecmp($Response, 'VERIFIED');
}
// Fetch paypal configurations
$paypal = $config['paypal'];
$prices = $config['paypal_prices'];
// Send an empty HTTP 200 OK response to acknowledge receipt of the notification
header('HTTP/1.1 200 OK');
// Build the required acknowledgement message out of the notification just received
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
$postdata = $req;
// Assign payment notification values to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = getValue($_POST['txn_id']);
$receiver_email = getValue($_POST['receiver_email']);
$payer_email = getValue($_POST['payer_email']);
$custom = (int)$_POST['custom'];
$connectedIp = $_SERVER['REMOTE_ADDR'];
mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', 'Connection from IP: $connectedIp', '0', '0', '0')");
$status = VerifyPaypalIPN();
if ($status) {
// Check that the payment_status is Completed
if ($payment_status == 'Completed') {
// Check that txn_id has not been previously processed
$txn_id_check = mysql_select_single("SELECT `txn_id` FROM `znote_paypal` WHERE `txn_id`='$txn_id'");
if ($txn_id_check !== false) {
// Check that receiver_email is your Primary PayPal email
if ($receiver_email == $paypal['email']) {
$status = true;
$paidMoney = 0;
$paidPoints = 0;
foreach ($prices as $priceValue => $pointsValue) {
if ($priceValue == $payment_amount) {
$paidMoney = $priceValue;
$paidPoints = $pointsValue;
}
}
if ($paidMoney == 0) $status = false; // Wrong ammount of money
if ($payment_currency != $paypal['currency']) $status = false; // Wrong currency
// Verify that the user havent messed around with POST data
if ($status) {
// transaction log
mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', '$payer_email', '$custom', '".$paidMoney."', '".$paidPoints."')");
// Process payment
$data = mysql_select_single("SELECT `points` AS `old_points` FROM `znote_accounts` WHERE `account_id`='$custom';");
// Give points to user
$new_points = $data['old_points'] + $paidPoints;
mysql_update("UPDATE `znote_accounts` SET `points`='$new_points' WHERE `account_id`='$custom'");
}
} else {
$pmail = $paypal['email'];
mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', 'ERROR: Wrong mail. Received: $receiver_email, configured: $pmail', '0', '0', '0')");
}
}
}
} else {
// Something is wrong
mysql_insert("INSERT INTO `znote_paypal` VALUES ('0', '$txn_id', 'ERROR: Invalid data. $postdata', '0', '0', '0')");
}
?>
When I checked my website:
http://server_name.pl/ipn.php
is blank page
When I'm trying to buy points from my website for example for 1 PLN (test value) and an account didn't get these points.
Table of premium points is in accounts, I mean accounts > premium_points, no znote_accounts > points.
I tried to change from ipn.php znote_accounts to accounts etc but always I'm getting some errors.
I fixed almost everything and changed all value of Znote from znote_accounts to accounts and from points to premium_points exclude these files.
I tried many things and always I'm not getting points on my test account ;<
and about HomePay.
how to set this shit? xD
should have I any IPN or something for this?
I need to have sms shop system ready in couple days :<
Thanks for answers and any assistance.
I added second post with smaller problem cuz of limit 25000.