gpt4 book ai didi

php - Paypal IPN - 检查付款状态是否完成?

转载 作者:可可西里 更新时间:2023-11-01 00:09:18 25 4
gpt4 key购买 nike

我有一个电子书销售网站,用户可以在购买后下载一本书。我从 Paypal 收到一个 IPN,据我所知,如果用户选择信用卡作为付款方式,有时付款状态会显示为“进行中”或“处理中”。由于 Paypal 会在付款完成后重新发送 IPN,因此检查付款状态是否已完成以避免数据库中出现重复的最佳方法是什么?

最佳答案

这些是 Paypal 返回给您的 IPN 监听器的可能状态

Canceled_Reversal
Completed
Denied
Failed
Refunded
Reversed
Voided
In-Progress
Pending
Processed

您应该检查Completed 状态以确保付款已完成。以下是检查不同状态的 IPN Listener 示例

<?php
//Build the data to post back to Paypal
$postback = 'cmd=_notify-validate';

// go through each of the posted vars and add them to the postback variable
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$postback .= "&$key=$value";
}


// build the header string to 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($postback) . "\r\n\r\n";

// Send to paypal or the sandbox depending on whether you're live or developing
// comment out one of the following lines
//$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);//open the connection
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
// or use port 443 for an SSL connection
//$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

if (!$fp)
{
// HTTP ERROR Failed to connect
//error handling or email here
}
else // if we've connected OK
{
fputs ($fp, $header . $postback);//post the data back
while (!feof($fp))
{
$response = fgets ($fp, 1024);

if (strcmp ($response, "VERIFIED") == 0) //It's verified
{
// assign posted variables to local variables, apply urldecode to them all at this point as well, makes things simpler later
$payment_status = $_POST['payment_status'];//read the payment details and the account holder

if($payment_status == 'Completed')
{
//Do something
}
else if($payment_status == 'Denied' || $payment_status == 'Failed' || $payment_status == 'Refunded' || $payment_status == 'Reversed' || $payment_status == 'Voided')
{
//Do something
}
else if($payment_status == 'In-Progress' || $payment_status == 'Pending' || $payment_status == 'Processed')
{
//Do something
}
else if($payment_status == 'Canceled_Reversal')
{
//Do something
}
}
else if (strcmp ($response, "INVALID") == 0)
{
//the Paypal response is INVALID, not VERIFIED
}
} //end of while
fclose ($fp);
}
?>

关于php - Paypal IPN - 检查付款状态是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com