来自网站的付款不再有效(无代码更改)

时间:2017-09-07 05:48:04

标签: php jquery html post paypal

我在我的网站上使用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">&nbsp;<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&colon; 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无法处理此交易。请直接与卖家联系以解决此问题。

0 个答案:

没有答案