Paypal IPN脚本无法正常工作

时间:2011-06-27 19:43:27

标签: php sql paypal paypal-ipn

由于某些原因,我的脚本连接到数据库并且没有错误,但数据库中似乎没有任何更新。我发现它没有任何问题。这是我的代码:

    // read the post from PayPal system and add 'cmd'
    $req = 'cmd=_notify-validate';

    foreach ($_POST as $key => $value) {
          $value = urlencode(stripslashes($value));
          $req .= "&$key=$value";
        }

    // post back to PayPal system to validate
    $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

    // assign posted variables 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 = $_POST['txn_id'];
    $receiver_email = $_POST['receiver_email'];
    $payer_email = $_POST['payer_email'];
    $user_id = mysql_real_escape_string($_POST['custom']);
    $today = date("F j, Y, g:i a"); 

    echo "hi";

    if (!$fp) {
       // HTTP ERROR
    } else {
      fputs ($fp, $header . $req);
      while (!feof($fp)) {
        $res = fgets ($fp, 1024);
        if (strcmp ($res, "VERIFIED") == 0) {
            if ($payment_status=='Completed') {
                $txn_id_check = mysql_query("SELECT 'txn_id' FROM 'log' WHERE 'txn_id' ='".$txn_id."'");
                if (mysql_num_rows($txn_id_check) !=1) {
                    if ($receiver_email=='HiddenForStackQuestion') {
                        if ($payment_amount=='29.95' && $payment_currency=='USD') {
                        $log_query = mysql_query("INSERT INTO 'log' VALUES ('','".$txn_id."','".$payer_email."')");
                        $update_premium = mysql_query("UPDATE 'users' SET authLevel='1', startDate='".$today."'  WHERE 'fbID'='".$user_id."'");

                        }

                        }

                    }
            }


        }
        else if (strcmp ($res, "INVALID") == 0) {
             // log for manual investigation
        }
      }
      fclose ($fp);
    }
    ?>

这是我的按钮。

    <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick-subscriptions">
    <input type="hidden" name="business" value="hiddenForStackQuestion">
    <input type="hidden" name="lc" value="US">
    <input type="hidden" name="item_name" value="hiddenForStackQuestion">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="no_shipping" value="2">
    <input type="hidden" name="rm" value="1">
    <input type="hidden" name="return" value="hiddenForStackQuestion">
    <input type="hidden" name="cancel_return" value="hiddenForStackQuestion">
    <input type="hidden" name="src" value="1">
    <input type="hidden" name="a3" value="29.95">
    <input type="hidden" name="p3" value="1">
    <input type="hidden" name="t3" value="Y">
    <input type="hidden" name="notify_url" value="hiddenForStackQuestion" />
          <input type="hidden" name="custom" value="<?php echo $userId ?>" />
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="bn" value="PP-SubscriptionsBF:btn_subscribeCC_LG.gif:NonHosted">
    <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" style="border:none;">
    </form>

我已经有一段时间了,但我没有运气。有谁看到了什么问题?

1 个答案:

答案 0 :(得分:1)

<input type="hidden" name="notify_url" value="hiddenForStackQuestion" />

我希望不会在localhost上托管吗? IPN POST由PayPal的服务器启动,因此必须是FQDN。 localhost不起作用。