贝宝梦魇

时间:2011-08-05 13:06:02

标签: php html paypal-ipn

我已经包含了一个我试图在这里测试的例子,但由于我是paypal的新手,而且我不知道如何调试paypal,沙盒也没有帮助我:(

看起来付款已被处理和接受,我现在要做的就是更新mysql表,在"if($payment_amount==10.00&&$payment_currency=='GBP'){"下方标记的行下方。我已经在phpmyadmin上测试了我的mysql,它就像一个魅力,它只是其他东西可能是错误的在这里:(

Paypal按钮

<form name="_xclick" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
    <input type="hidden" name="cmd" value="_xclick-subscriptions" />
    <input type="hidden" name="business"  value="[email]" />
    <input type="hidden" name="item_name"  value="New Subscription" />
    <input type="hidden" name="first_name"  value="<?php echo  $arr['user']['fname']; ?>" />
    <input type="hidden" name="last_name"  value="<?php echo  $arr['user']['lname']; ?>" />
    <input type="hidden" name="address1"  value="<?php echo  $arr['user']['add1']; ?>" />
    <input type="hidden" name="address2"  value="<?php echo  $arr['user']['add2']; ?>" />
    <input type="hidden" name="city"  value="<?php echo  $arr['user']['town']; ?>" />
    <input type="hidden" name="zip"  value="<?php echo  $arr['user']['postcode']; ?>" />
    <input type="hidden" name="email"  value="[client_email]" />
    <input type="hidden" name="currency_code"  value="GBP" />
    <input type="hidden" name="no_shipping" value="1" />
    <input type="image" src="http://www.paypal.com/en_US/i/btn/btn_subscribe_LG.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!" />
    <input type="hidden" name="recurring" value="1" />  
    <input type="hidden" name="a3" value="10.00" />  
    <input type="hidden" name="p3" value="1" />
    <input type="hidden" name="t3" value="Y" />
    <input type="hidden" name="src" value="1" />
    <input type="hidden" name="sra" value="1" />
    <input type="hidden" name="item_number" value="<?php echo $arr['user']['id'] ?>" />
    <input type="hidden" name="return"  value="<?php echo site_url.'account/' ?>" />
    <input type="hidden" name="cancel_return"  value="<?php echo site_url.'account/' ?>" />
    <input type="hidden" name="notify_url"  value="<?php echo site_url.'account/ipn.php' ?>" />
</form>

Paypal IPN处理程序

<?php 
// UPDATED LINE BELOW
mail("[myemail]", "PP",'initiated', "From:support@paypal.com"); 
// 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);
// $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

$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'];
$business               = $_POST['business'];
$payer_email            = $_POST['payer_email'];
// $payer_email             = $_POST['payer_email'];


if (!$fp) {
    // echo 'Error 101 23';
    // die();
} else {
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
        $res = fgets ($fp, 1024);
        if (strcmp ($res, "VERIFIED") == 0) {
            $data['paypal_receivers_email']     = '[email]';
            if($payment_status=='Completed' && $receiver_email == $data['paypal_receivers_email'] &&$receiver_email){
                if($payment_amount==10.00&&$payment_currency=='GBP'){
                    //successfully// now update db :)// <== this is where im strugling it does not seem to come down here at all.
                }
            }
        // check the payment_status is Completed
        // check that txn_id has not been previously processed
        // check that receiver_email is your Primary PayPal email
        // check that payment_amount/payment_currency are correct
        // process payment
        }
        else if (strcmp ($res, "INVALID") == 0) {
        // log for manual investigation

        }
    }
    fclose ($fp);
}

?>

2 个答案:

答案 0 :(得分:2)

尝试调试,就像我做的那样:

在每个步骤中,将电子邮件()包含来自paypal(通过邮寄)和其他人的详细信息。记录(自己邮寄)每次成功,错误,它会给你你的问题来源。例如,把

 mail("yourmail@mail.com", "PP", $res, "From:support@paypal.com"); 

宣布变量

之后

答案 1 :(得分:0)

site_url是常数吗?

<input type="hidden" name="return"  value="<?php echo site_url.'account/' ?>" />
<input type="hidden" name="cancel_return"  value="<?php echo site_url.'account/' ?>" />
<input type="hidden" name="notify_url"  value="<?php echo site_url.'account/ipn.php' ?>" />

如果不是,你会错过$或a(),如果它是一个函数。

您是否仔细检查过html源格式中是否返回了完整的网址?如果它在浏览器中工作,似乎paypal可能无法获得IPN的正确返回URL。