我在我的网站上使用paypal付费按钮:www.sakkadentrainer.ch/payment.html
我有一个测试网站:test.sakkadentrainer.ch/payment.html
(对不起,我甚至不确定我是否使用ipn或pdt)
无论如何,它工作正常,但是一段时间(也许1-2周)它就停止了工作。
问题是我没有从paypal获得任何$ _POST内容:
b_search
这会返回一个空结果......
array(0){} 所以表格是用php和html完成的:
if(isset($_GET['show']) && $_GET['show'] == "paypal_process" &&
isset($_POST)) {
var_dump($_POST);
die();
}
}
所以提交我已经用jquery和php保存了电子邮件地址:
<form id="paypal_form" name="_xclick" class="paypal" style="border:0px solid black" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top" onsubmit="return save_ppp();">
<input type="hidden" name="rm" value="2">
<input type="hidden" name="business" value="b.rentr....ail.com">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="item_name" id="paypal_itemname" value="1 Lizenz http://test.sakkadentrainer.ch">
<input type="hidden" name="amount" id="paypal_amount" value="">
<input type="hidden" name="item_number" id="item_number" value="2">
<input type="hidden" name="quantity" id="quantity" value="1">
<input type="hidden" name="discount_amount" id="discount_amount" value="0">
<input type="hidden" name="custom" id="pp_custom" value="">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="currency_code" id="currency_code" value="CHF">
<input type="hidden" name="cancel_return" id="cancel_return" value="http://test.sakkadentrainer.ch/payment.html?show=paypal_cancel&sih=">
<input type="hidden" name="return" id="return_url" value="http://test.sakkadentrainer.ch/payment.html?show=paypal_process">
<input class="paypal" type="hidden" name="on0" value="Name">
<input id="paypal_email" required name="os0" class="input_username big_input" type="email" placeholder="Ihre E-Mail Adresse" autocapitalize="off" autocorrect="off" value="">
<br/>
<br/>
<input id="paypal_submit" type="image" src="https://www.paypalobjects.com/de_DE/CH/i/btn/btn_buynowCC_LG.gif" type="submit" alt="Paypal" title="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal"> <img class="paypal" alt="" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1">
</form>
然后在paypal everthing工作正常,与我的沙箱(也现场(我今天收到付款)),但后来我有以下PHP代码的问题:
抱歉很长...但问题是我甚至没有从paypal获得任何数据......function save_ppp(evt) {
evt.preventDefault();
$.ajax({
url: "inc/run_sql.php",
data: {
typ: "save_ppp",
m: $('#paypal_email').val(),
p: $('#paypal_amount').val()
},
type: "GET",
context: document.body,
success: function(data) {
var ppp_error = data.substr(0, 5)
if (ppp_error != 'Error' && ppp_error > '') {
hide_popup();
$('#pp_custom').val(data);
$('#paypal_form').attr('onsubmit', '');
// set cancel return url
$('#cancel_return').val($('#cancel_return').val() + data);
// submit
$('#paypal_form').submit();
show_loading_screen();
} else {
// show paypal alert!
alert($('#save_ppp').text());
}
},
error: function(jqXHR, textStatus, errorThrown) {
//if fails
console.log('Error: ' + jqXHR.responseText);
alert('Error (update_train)');
}
});
return false;
}
**这里的脚本已经来了**
if(isset($_GET['show']) && $_GET['show'] == "paypal_process" && isset($_POST)) {
所以任何人都可以帮助或解释我为什么&#34;突然&#34;该脚本不再起作用了......
if(isset($_POST['custom'])
&& isset($_POST['item_number'])
&& isset($_POST['mc_gross'])
&& isset($_POST['quantity'])
&& isset($_POST['option_selection1'])
&& isset($_POST['payment_date'])
&& isset($_POST['payment_status'])) {
// get post paypal data
$pp_sale_id = decrypt($_POST['custom'], md5($salt));
$pp_final_price = $_POST['mc_gross'];
$pp_num = $_POST['quantity'];
$pp_buyer_mail = $_POST['option_selection1'];
$pp_date = $_POST['payment_date'];
$pp_status = $_POST['payment_status'];
$abo_id = $_POST['item_number'];
$item_name = $_POST['item_name'];
if($pp_sale_id > 0) {
// get data from tbl_sales
$sql = "SELECT *, AES_DECRYPT(sal_email, UNHEX(SHA2('".$crypt_key."',512))) as sal_email FROM tbl_sales WHERE sal_id = ?";
$sales_data = $udb->fetch_all($sql, $pp_sale_id);
if($sales_data) {
if(filter_var($pp_buyer_mail, FILTER_VALIDATE_EMAIL) &&
$sales_data['sal_email'] == $pp_buyer_mail &&
$sales_data['sal_ip'] == $ip) {
// check if users exists
$users_exits = exist_duplicate_email("tbl_users", "AES_DECRYPT(usr_username, UNHEX(SHA2('".$crypt_key."',512)))", $pp_buyer_mail);
// user exists, so use his lang
if($users_exits !== false) {
// set new user lang to send mail in his language
$sql = "SELECT usr_lang as '0' FROM tbl_users WHERE AES_DECRYPT(usr_username, UNHEX(SHA2('".$crypt_key."',512))) = ?";
$usr_lang = $udb->fetch_single($sql, $pp_buyer_mail);
if(strpos($item_name , 'Upgrade') !== false) {
// upgrade, so dont update paydate, only abo
$sql = "UPDATE tbl_users SET usr_testversionaktiv = 0, usr_payed = 1, usr_abo_id = ? WHERE AES_DECRYPT(usr_username, UNHEX(SHA2('".$crypt_key."',512))) = ?;";
} else {
$sql = "SELECT usr_id as '0' FROM tbl_users WHERE AES_DECRYPT(usr_username, UNHEX(SHA2('".$crypt_key."',512))) = ?";
$usr_id = $udb->fetch_single($sql, $pp_buyer_mail);
$days_left_abo = calc_daysleft_abo($usr_id);
$days_left_abo = $days_left_abo[0];
// update payed, payed date and testversion
$sql = "UPDATE tbl_users SET usr_testversionaktiv = 0, usr_payed = 1, usr_paydate = NOW(), usr_abo_id = ? WHERE AES_DECRYPT(usr_username, UNHEX(SHA2('".$crypt_key."',512))) = ?;";
}
$arr = array($abo_id, $pp_buyer_mail);
$udb->alter($sql, $arr);
}
$tr = new Translator($usr_lang);
// get days valid
// update tbl_sales
$sql = "UPDATE tbl_sales SET sal_date = NOW(), sal_status = 'success', sal_num = ?, sal_abo_id = ? WHERE sal_id = ?";
$arr = array($pp_num, $abo_id, $pp_sale_id);
$db->alter($sql, $arr);
// generate email for admin
$subject = "Paypay success for ".$pp_buyer_mail;
$text = $happy_smiley.'<br/><br/>Paypay success for '.$pp_buyer_mail.'
Amount: '.$pp_final_price;
send_phpmail($GLOBALS['superuser_email'], $GLOBALS['founder_name'], '', '', $GLOBALS['notify_email'], '', $subject, $text, $usr_lang, '', 'email_signature_short');
// user does not exsit, try to make registration
if($users_exits === false) {
if(isset($pp_buyer_mail) && $pp_buyer_mail > '' && filter_var($pp_buyer_mail, FILTER_VALIDATE_EMAIL)) {
$pp_buyer_mail = filter_var($pp_buyer_mail, FILTER_VALIDATE_EMAIL);
$post_password = giveMeRandNumber(6);
// hash pw
$pw_hash = password_hash($post_password, PASSWORD_DEFAULT);
$post_impaired_side = '';
$reg_check = reg_check($pp_buyer_mail);
if($reg_check === true) {
// short reg
$sql = "INSERT INTO tbl_users
(usr_username, usr_impaired_side, usr_regdate, usr_lastlogin, usr_logincounter, usr_pw, usr_pw_hash, usr_generated_pw, usr_lang, usr_testversionaktiv, usr_activated, usr_ip, usr_lastip, usr_browser, usr_fontsize, usr_kontrast, usr_payed, usr_paydate, usr_abo_id, usr_abo_per_year)
VALUES
(AES_ENCRYPT(?, UNHEX(SHA2('".$crypt_key."',512))), AES_ENCRYPT(?, UNHEX(SHA2('".$crypt_key."',512))), NOW(), NOW(), 1, AES_ENCRYPT(?, UNHEX(SHA2('".$crypt_key."',512))), AES_ENCRYPT(?, UNHEX(SHA2('".$crypt_key."',512))), 1, ?, ?, NULL, ?, ?, ?, ?, ?, 1, NOW(), ?, ?);";
$arr = array($pp_buyer_mail, $post_impaired_side, $post_password, $pw_hash, $usr_lang, $GLOBALS['testversionaktiv'], $ip, $ip, $browser, $GLOBALS['default_zoom'], $usr_kontrast, $abo_id, $GLOBALS['abo_per_year']);
$result = $udb->alter($sql, $arr);
//die($sql);
$last_id = $udb->lastInsertId();
$days_left_abo = calc_daysleft_abo($last_id);
$days_left_abo = $days_left_abo[0];
$pay_date = $udb->getUserRow('usr_paydate', $last_id);
$use_until_date = date($GLOBALS['date_format'],strtotime('+'.$days_left_abo.' day',strtotime($pay_date)));
// generate email for user
$subject = $tr->me('Sakkadentrainer').' | '.html_entity_decode($tr->me('Vollversion freigeschaltet'));
$message = $tr->me('Guten Tag').",
";
$message .= $tr->me('die Überweisung ist eingegangen. Besten Dank').'!
';
if($GLOBALS['abo_per_year'] == 1) {
$message .= $tr->me('Sie können nun den Sakkadentrainer vollständig bis am').' <b>'.$use_until_date.'</b> '.$tr->me('nutzen:');
} else {
$message .= $tr->me('Sie können nun den Sakkadentrainer vollständig und unbegrenzt nutzen').':';
}
$message .= '
<a href="http'.$GLOBALS['https_mode'].'://'.$base_url_short.'">'.$base_url_short.'</a>';
// email senden an user
send_phpmail($GLOBALS['superuser_email'], $GLOBALS['founder_name'], '', '', $pp_buyer_mail, '', $subject, $message, $usr_lang, '', 'email_signature');
if($result == 1) {
// reg: ok, login
$reg_success = reg_success($last_id, $pp_buyer_mail);
} else {
// show any reg error
$error = reg_problem($pp_buyer_mail, $result);
$reg_failed = true;
}
} else {
// show pre reg error (e.g. blocked ip, attack or duplicate user)
$error = $reg_check;
$reg_failed = true;
}
} else {
$error = $tr->me("Die Email Adresse fehlt. Bitte wiederholen Sie den Vorgang oder kontaktieren Sie uns").':
<a href="javascript: void(0);" onclick="show_contact_form(0, \''.$tr->me('PaypalLogin').' PRO\');">'.$tr->me('Kontakt').'</a>';
}
} else {
$sql = "SELECT usr_paydate as '0' FROM tbl_users WHERE AES_DECRYPT(usr_username, UNHEX(SHA2('".$crypt_key."',512))) = ?";
$pay_date = $udb->fetch_single($sql, $pp_buyer_mail);
$use_until_date = date($GLOBALS['date_format'],strtotime('+'.$usr_abo_duration+$days_left_abo.' day',strtotime($pay_date)));
// generate email for user
$subject = $tr->me('Sakkadentrainer').' | '.html_entity_decode($tr->me('Vollversion freigeschaltet'));
$message = $tr->me('Guten Tag').",
";
$message .= $tr->me('die Überweisung ist eingegangen. Besten Dank').'!
';
if($GLOBALS['abo_per_year'] == 1) {
$message .= $tr->me('Sie können nun den Sakkadentrainer vollständig bis am').' <b>'.$use_until_date.'</b> '.$tr->me('nutzen:');
} else {
$message .= $tr->me('Sie können nun den Sakkadentrainer vollständig und unbegrenzt nutzen').':';
}
$message .= '
<a href="http'.$GLOBALS['https_mode'].'://'.$base_url_short.'">'.$base_url_short.'</a>';
// email senden an user
send_phpmail($GLOBALS['superuser_email'], $GLOBALS['founder_name'], '', '', $pp_buyer_mail, '', $subject, $message, $usr_lang, '', 'email_signature');
// go to payment site
header("Location: ".$href_url."/payment.html?show=paypal_success&h=".$_POST['custom']);
die();
}
} else {
// not valid email, or ip adress or email does not coresspond with data in table tbl_sales
$pp_error = 1;
}
} else {
// sales id does not exist
$pp_error = 2;
}
} else {
// wrong id
$pp_error = 3;
}
}
}
if(isset($pp_error) && $pp_error > 0) {
$error = "Paypal Err: ".$pp_error;
}
但是我收到了这个错误:
由于卖家网站存在问题,PayPal无法处理此交易。请直接与卖家联系以解决此问题。