PayPal IPN 交付状态设置为“重试”,HTTP 响应代码为 404

     2023-02-22     75

关键词:

【中文标题】PayPal IPN 交付状态设置为“重试”,HTTP 响应代码为 404【英文标题】:PayPal IPN Delivery status set to "Retrying" with HTTP response code 404 【发布时间】:2012-07-31 08:06:48 【问题描述】:

我正在使用 Wordpress 插件 Donate Plus,它已经有一段时间没有更新了,并且对于大多数用户来说都无法正常工作。因此,我对代码进行了一些更改,试图让它再次工作。除了在我的 PayPal 帐户的 IPN 历史记录中所有交易的交付状态为“正在重试”,HTTP 响应代码为 404 之外,我一切正常。

脚本中有一个 IPN 调试功能,它返回“Verified IPN Transaction [Completed]”,表明一切正常。但是,我收到了多条调试消息、多条发送的感谢消息,以及我的 MySQL 数据库中的多个条目,我认为所有这些都与“重试”问题有关。

我已经在 PayPal 中手动设置了通知 URL,因为我听说这可以解决一些问题。但是我仍然遇到同样的问题。

我了解脚本需要将完整的未更改的 IPN 消息发送回 PayPal;即消息必须以相同的顺序包含相同的字段,并以与原始消息相同的方式进行编码。但是,我不确定如何检查 $postipn 返回的内容,以检查这是否是问题所在。

我在下面包含完整的 paypal.php 脚本,以防任何人发现问题所在:

<?php
    /*
    //************************************************************
    //************************************************************
    //**  Bugs fixed by...                                      **
    //**                                                        **
    //**  Copyright Encentra 2011                               **
    //**  www.encentra.se                                       **
    //**  consultant: Johan Rufus Lagerström                    **
    //************************************************************
    //************************************************************
    */

#########################################################
#                                                       #
#  File            : PayPal.php                         #
#  Version         : 1.9                                #
#  Last Modified   : 12/15/2005                         #
#  Copyright       : This program is free software; you #
# can redistribute it and/or #modify it under the terms #
# of the GNU General Public License as published by the #
# Free Software Foundation                              #
# See the #GNU General Public License for more details. #
#               DO NOT REMOVE LINK                      #
# Visit: http://www.belahost.com for updates/scripts    #
#########################################################
#    THIS SCRIPT IS FREEWARE AND IS NOT FOR RE-SALE     #
#########################################################

require("../../../wp-blog-header.php");
global $wpdb;
$dplus = get_option('DonatePlus');
$email_IPN_results = $dplus['IPN_email'];
$tmp_nl = "\r\n";

if(class_exists('DonatePlus'))$donateplus = new DonatePlus();

#1 = Live on PayPal Network 
#2 = Testing with www.BelaHost.com/pp
#3 = Testing with the PayPal Sandbox
$verifymode     = $dplus['testing_mode']; # be sure to change value for testing/live!
# Send notifications to here
$send_mail_to   = $dplus['paypal_email'];
# subject of messages
$sysname        = "Donate Plus - Paypal IPN Transaction";
# Your primary PayPal e-mail address
//$paypal_email     = $dplus['paypal_email'];
# Your sendmail path
//$mailpath         = "/usr/sbin/sendmail -t";
#the name you wish to see the messages from
//$from_name        = $dplus['ty_name'];
#the emails will be coming from
//$from_email   = $dplus['ty_email'];


# Convert Super globals For backward compatibility
if(phpversion() <= "4.0.6") $_POST=($HTTP_POST_VARS);

# Check for IPN post if none then return 404 error.
if (!$_POST['txn_type'])
    if( $email_IPN_results ) send_mail($send_mail_to,$sysname." [ERROR - 404]","IPN Fail: 404 error!","",__LINE__);
    header("Status: 404 Not Found");
    die();
else
    header("Status: 200 OK");


# Now we Read the Posted IPN
$postvars = array();

//print_r($_POST);
foreach ($_POST as $ipnvars => $ipnvalue)
    $postvars[] = $ipnvars; $postvals[] = $ipnvalue;

# Now we ADD "cmd=_notify-validate" for Post back Validation
$postipn    = 'cmd=_notify-validate'; 
$orgipn     = '<b>Posted IPN variables in order received:</b><br><br>';
# Prepare for validation
for($x=0; $x < count($postvars); $x++) 
    $y          = $x+1; 
    $postkey    = $postvars[$x]; 
    $postval    = $postvals[$x]; 
    $postipn    .= "&".$postkey."=".urlencode($postval);  
    $orgipn     .= "<b>#".$y."</b> Key: ".$postkey." <b>=</b> ".$postval."<br>";



if($verifymode == 1)       //1 = Live on PayPal Network
    ## Verify Mode 1: This will post the IPN variables to the Paypal Network for Validation
    $port = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
    //$port = fsockopen ("paypal.com", 80, $errno, $errstr, 30);
    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n".
    "Host: www.paypal.com\r\n".
    "Content-Type: application/x-www-form-urlencoded\r\n".
    "Content-Length: ".strlen($postipn)."\r\n\r\n";
elseif ($verifymode == 2) //2 = Testing with www.BelaHost.com/pp
    ## Verify Mode 2: This will post the IPN variables to Belahost Test Script for validation
    ## Located at www.belahost.com/pp/index.php
    $port = fsockopen ("www.belahost.com", 80, $errno, $errstr, 30);
    $header = "POST /pp/ HTTP/1.0\r\n".
    "Host: www.belahost.com\r\n".
    "Content-Type: application/x-www-form-urlencoded\r\n".
    "Content-Length: ".strlen($postipn)."\r\n\r\n";        
elseif ($verifymode == 3) //3 = Testing with the PayPal Sandbox
    $port = fsockopen ("ssl://www.sandbox.paypal.com", 443, $errno, $errstr, 30);
    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n".
    "Host: www.sandbox.paypal.com\r\n".
    "Content-Type: application/x-www-form-urlencoded\r\n".
    "Content-Length: ".strlen($postipn)."\r\n\r\n";
else 
    $error=1; 
    //echo "CheckMode: ".$verifymode." is invalid!";
    if( $email_IPN_results ) send_mail($send_mail_to,$sysname." [ERROR - Misc]","Fail: CheckMode: ".$verifymode." is invalid!","",__LINE__);
    die(); 



# Error at this point: If at this point you need to check your Firewall or your Port restrictions?
if (!$port && !$error)
    //echo "Problem: Error Number: ".$errno." Error String: ".$errstr;
    #Here is a small email notification so you know if your system ever fails           
    if( $email_IPN_results ) send_mail($send_mail_to,$sysname." [ERROR - Misc]","Your Paypal System failed due to $errno and string $errstr","",__LINE__);          
    die();
else
    # If No Errors to this point then we proceed with the processing.
    # Open port to paypal or test site and post Varibles.
    fputs ($port, $header.$postipn);
    while (!feof($port))
        $reply = fgets ($port, 1024);
        $reply = trim ($reply); 
    

    # Prepare a Debug Report
    $ipnreport = $orgipn."<br><b>"."IPN Reply: ".$reply."</b>";

    # Buyer Information
    $address_city           = $_POST['address_city'];
    $address_country        = $_POST['address_country'];
    $address_country_code   = $_POST['address_country_code'];
    $address_name           = $_POST ['address_name'];
    $address_state          = $_POST['address_state'];
    $address_status         = $_POST['address_status'];
    $address_street         = $_POST['address_street'];
    $address_zip            = $_POST['address_zip'];
    $first_name             = $_POST['first_name'];
    $last_name              = $_POST['last_name'];
    $payer_business_name    = $_POST['payer_business_name'];
    $payer_email            = $_POST['payer_email'];
    $payer_id               = $_POST['payer_id'];
    $payer_status           = $_POST['payer_status'];
    $residence_country      = $_POST['residence_country'];
    # Below Instant BASIC Payment Notifiction Variables
    $business               = $_POST['business'];
    $item_name              = $_POST['item_name'];
    $item_number            = $_POST['item_number'];
    $quantity               = $_POST['quantity'];
    $receiver_email         = $_POST['receiver_email'];
    $receiver_id            = $_POST['receiver_id'];
    #Advanced and Customer information
    $custom                 = $_POST['custom'];
    $invoice                = $_POST['invoice'];
    $memo                   = $_POST['memo'];
    $option_name1           = $_POST['option_name1'];       //name
    $option_name2           = $_POST['option_name2'];
    $option_selection1      = $_POST['option_selection1'];  //email
    $option_selection2      = $_POST['option_selection2'];  //comment
    $tax                    = $_POST['tax'];
    #Website Payment Pro and Other IPN Variables
    $auth_id                = $_POST['auth_id'];
    $auth_exp               = $_POST['auth_exp'];
    $auth_amount            = $_POST['auth_amount'];
    $auth_status            = $_POST['auth_status'];
    # Shopping Cart Information
    $mc_gross               = $_POST['mc_gross'];
    $mc_handling            = $_POST['mc_handling'];
    $mc_shipping            = $_POST['mc_shipping'];
    $num_cart_items         = $_POST['num_cart_items'];
    # Other Transaction Information
    $parent_txn_id          = $_POST['parent_txn_id'];
    $payment_date           = $_POST['payment_date'];
    $payment_status         = $_POST['payment_status'];
    $payment_type           = $_POST['payment_type'];
    $pending_reason         = $_POST['pending_reason'];
    $reason_code            = $_POST['reason_code'];
    $remaining_settle       = $_POST['remaining_settle'];
    $transaction_entity     = $_POST['transaction_entity'];
    $txn_id                 = $_POST['txn_id'];
    $txn_type               = $_POST['txn_type'];
    # Currency and Exchange Information
    $exchange_rate          = $_POST['exchange_rate'];
    $mc_currency            = $_POST['mc_currency'];
    $mc_fee                 = $_POST['mc_fee'];
    $payment_fee            = $_POST['payment_fee'];
    $payment_gross          = $_POST['payment_gross'];
    $settle_amount          = $_POST['settle_amount'];
    $settle_currency        = $_POST['settle_currency'];
    # Auction Information 
    $for_auction            = $_POST['for_auction'];
    $auction_buyer_id       = $_POST['auction_buyer_id'];
    $auction_closing_date   = $_POST['auction_closing_date'];
    $auction_multi_item     = $_POST['auction_multi_item'];
    # Below are Subscription - Instant Payment Notifiction Variables
    $subscr_date            = $_POST['subscr_date'];
    $subscr_effective       = $_POST['subscr_effective'];
    $period1                = $_POST['period1'];
    $period2                = $_POST['period2'];
    $period3                = $_POST['period3'];
    $amount1                = $_POST['amount1'];
    $amount2                = $_POST['amount2'];
    $amount3                = $_POST['amount3'];
    $mc_amount1             = $_POST['mc_amount1'];
    $mc_amount2             = $_POST['mc_amount2'];
    $mc_amount3             = $_POST['mc_amount3'];
    $recurring              = $_POST['recurring'];
    $reattempt              = $_POST['reattempt'];
    $retry_at               = $_POST['retry_at'];
    $recur_times            = $_POST['recur_times'];
    $username               = $_POST['username'];
    $password               = $_POST['password'];
    $subscr_id              = $_POST['subscr_id'];
    # Complaint Variables Used when paypal logs a complaint
    $case_id                = $_POST['case_id'];
    $case_type              = $_POST['case_type'];
    $case_creation_date     = $_POST['case_creation_date'];
    #Last but not least
    $notify_version         = $_POST['notify_version'];
    $verify_sign            = $_POST['verify_sign'];

    #There are certain variables that we will not store for cart since they are dynamic                    
    #such as mc_gross_x as they will be forever changing/increasing your script must check these

    #IPN was Confirmed as both Genuine and VERIFIED
    if(!strcmp($reply, "VERIFIED"))
        /* Now that IPN was VERIFIED below are a few things which you may want to do at this point.
         1. Check that the "payment_status" variable is: "Completed"
         2. If it is Pending you may want to wait or inform your customer?
         3. You should Check your datebase to ensure this "txn_id" or "subscr_id" is not a duplicate. txn_id is not sent with subscriptions!
         4. Check "payment_gross" or "mc_gross" matches match your prices!
         5. You definately want to check the "receiver_email" or "business" is yours. 
         6. We have included an insert to database for table paypal_ipn
         */
        $split = explode(':', $item_number);
        $display = $split[0];
        $uID = $split[1];
        $url = 'http://'.str_replace('http://','',$option_name2);

        if(!$mc_gross)$mc_gross = $payment_gross;
        $table_name = $wpdb->prefix."donations";

        //kontrollera om transaktionen redan finns sparad
        $tmp_txn_id     = $wpdb->escape($txn_id);
        $tmp_count      = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $table_name WHERE txn_id='$tmp_txn_id';")); 


        //if($payment_status    == 'Completed')
        if($tmp_count == 0)
            //all pin:s som kommer in tolkar vi som complete
            $tmp_payment_status = "Completed";
            $mc_net = $mc_gross - $mc_fee;
            //USE SECURE INSERT!
            $wpdb->query(
                $wpdb->prepare("INSERT INTO $table_name
                ( name, email, url, comment, display, amount, charge, net, currency, date, user_id, status, txn_id )
                VALUES ( %s, %s, %s, %s, %d, %s, %s, %s, %s, %s, %d, %s, %s )", 
                $option_name1, $option_selection1, $url, strip_tags($option_selection2), $display, $mc_gross, $mc_fee, $mc_net, $mc_currency, date('Y-m-d H:i:s'), $uID, $tmp_payment_status, $txn_id )
            );
            //send payer thank you email about where to download
            global $currency;
            $subject    = stripslashes($dplus['ty_subject']);
            $prefix     = $currency[$mc_currency]['symbol'];
            $amount     = $prefix.$mc_gross.' '.$mc_currency;
            $payer_msg  = nl2br($donateplus->TagReplace(stripslashes($dplus['ty_emailmsg']), $option_name1, $amount));
            //$payer_msg = utf8_encode($payer_msg);
            //echo '<br />'.$payer_msg;
            $headers  = 'MIME-Version: 1.0'."\r\n";
            //$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";
            $headers .= 'Content-type: text/html; charset=utf-8'."\r\n";
            $headers .= 'From: '.$dplus['ty_name'].' <'.$dplus['ty_email'].'>'."\r\n";
            wp_mail($option_selection1, $subject, $payer_msg, $headers);
            //wp_mail($notify_email, 'New Donation Recieved!', "Donation from $option_name1 for $payment_amount");
            //echo $postquery;
            if( $email_IPN_results ) send_mail($send_mail_to,$sysname." [PIN - Completed]","\n Verified IPN Transaction [Completed] \n \n$ipnreport\n","",__LINE__);
        else
            //not "Completed"
            //tar bort nedan, annars trilalr det in 10 mail per donation
            //send_mail($send_mail_to,$sysname." [PIN - $payment_status]","\n Verified IPN Transaction [$payment_status] \n \n$ipnreport\n","",__LINE__);
        


    elseif(!strcmp($reply, "INVALID"))    # IPN was Not Validated as Genuine and is INVALID
        /* Now that IPN was INVALID below are a few things which you may want to do at this point.
         1. Check your code for any post back Validation problems!
         2. Investigate the Fact that this Could be an attack on your script IPN!
         3. If updating your DB, Ensure this "txn_id" is Not a Duplicate!
        */

        # Remove Echo line below when live
        //echo $ipnreport;
        if( $email_IPN_results ) send_mail($send_mail_to,$sysname." [ERROR - Invalid]","Invalid IPN Transaction".$tmp_nl.$tmp_nl.$ipnreport,"",__LINE__);

    else  #ERROR
        # If your script reaches this point there is a problem. Communication from your script to test/paypal pages could be 1 reason.
        echo $ipnreport;
        if( $email_IPN_results ) send_mail($send_mail_to,$sysname." [ERROR - Misc]","FATAL ERROR No Reply at all".$tmp_nl.$tmp_nl.$ipnreport,"",__LINE__);
    


    #Terminate the Socket connection and Exit
    fclose ($port); 
    die();








/* =================================
         Below are functions
   ================================= */

# Email function
function send_mail($to, $subj, $body, $headers="",$tmp_line=0)
    //global
    global $tmp_nl; 

    //var_dump till en sträng
    $posts = var_export($_POST, true);

    //body
    $tmp_body   = "===================================".$tmp_nl.
                $subj." [line: $tmp_line]".$tmp_nl.
                "===================================".$tmp_nl.
                $body.$tmp_nl.
                $tmp_nl.
                "===================================".$tmp_nl.
                $posts;

    //skickar mail
    wp_mail($to, $subj, $tmp_body, $headers);

    /*
    global $from_name, $from_email, $mailpath;

# E-mail Configuration
    $announce_subject = "$subj";
    $announce_from_email = "$from_email";
    $announce_from_name = "$from_name";
    $announce_to_email = "$to";
    $MP = "$mailpath"; 
    $spec_envelope = 1;
    # End email config
# Access Sendmail
# Conditionally match envelope address
    if(isset($spec_envelope))
    
    $MP .= " -f $announce_from_email";
    
    $fd = popen($MP,"w"); 
    fputs($fd, "To: $announce_to_email\n"); 
    fputs($fd, "From: $announce_from_name <$announce_from_email>\n");
    fputs($fd, "Subject: $announce_subject\n"); 
    fputs($fd, "X-Mailer: MyPayPal_Mailer\n");
    fputs($fd, "Content-Type: text/html\n");
    fputs($fd, $body); # $body will be sent when the function is used
    pclose($fd);
    */


?>

.htaccess 文件

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

<Files wp-cron.php>
allow from all
Satisfy Any
</Files>

AddType text/x-component .htc

【问题讨论】:

【参考方案1】:

对我来说,似乎只有几种可能性。

代码

if (!$_POST['txn_type'])
    if( $email_IPN_results ) send_mail($send_mail_to,$sysname." [ERROR - 404]","IPN Fail: 404 error!","",__LINE__);
    header("Status: 404 Not Found");
    die();
else
    header("Status: 200 OK");

显然是一个值得研究的部分,因为它输出 404。在我的 IPN 处理程序中,我使用 empty($_POST),而你使用了 !$_POST['txn_type']。你也可以试试!isset($_POST['txn_type'])!$_POST['txn_type'] 实际上是在评估 txn_type 是否等于 false,这不如专门检查该值是否普遍存在那样可靠。我怀疑这是真正的问题,但值得一看。

404 的其他一些可能原因可能是:

在您的 paypal 按钮代码的某处,它设置了一个不存在的 IPN URL。 您手动输入的 IPN URL 有错字。 您的 htaccess 阻止了对 IPN URL 的直接访问。如果 htaccess 进行任何重定向(例如从 domain.com 到 www.domain.com)并且您使用 domain.com 作为您的 IPN 域,则重定向将导致所有帖子数据被丢弃,然后您的代码将准确输出404 错误。

我的钱将用于 htaccess 重定向问题。我对破坏我的表单发布的重定向非常熟悉。

编辑

您可以尝试制作一个完全跳过 paypal 的简单测试表单来测试 IPN。像

这样简单的东西
<form method="post" action="IPN_URL">
<input type='hidden' name='txn_type' value='subscr_payment'>
<input type='submit' value='Test IPN'></form>

显然,将 IPN_URL 替换为适当的 url。如果提交这不是 404,那么脚本设置 IPN URL 的方式可能有问题。

您还可以检查服务器日志中是否存在 404 错误,并将日志中缺少的 URL 与您希望看到的 URL 进行比较。

编辑 2

仅供参考,我对这个插件进行了测试,与您使用的版本相同,它立即完美运行。我没有在paypal中设置IPN URL。我将“测试模式”设置为“与贝宝一起生活”并填写了贝宝电子邮件地址字段,并将其他所有内容设置为默认值。我付款了,IPN 和其他一切正常。我正在使用 3.4.1 版的普通 WP 设置(不是多站点)。

您在使用 WP 多站点吗?我知道在这些情况下,设置页面中显示的 URL 可能是错误的。

看了http://wordpress.org/support/topic/plugin-donate-plus-ipn-not-working之后,貌似这个插件确实有一些问题。我快速浏览了一下,http://wordpress.org/extend/plugins/paypal-donations/ 似乎最近更新了一点,而且它似乎没有与另一个相同的怪癖。你可以阅读它here。最坏的情况,你可以切换到那个。

【讨论】:

感谢您的回答。就您上面提到的代码而言,我已经对此进行了注释,并将两个标题都设置为“状态:200 OK”,但我仍然收到 404 错误。脚本也没有死,我收到了状态为“已验证”的 IPN 调试电子邮件,所以我很确定这不是问题。至于其他可能性,我确信 IPN URL 是正确的(第 2 点)。我会检查其他两个问题并尽快回复您。 关于重定向问题(第 3 点),我已将通知 URL 设置为 http://www.[URL...],而之前它是 http://[URL...],但我仍然收到 404 错误。这是否意味着该问题与重定向无关? 关于第 1 点,处理 PayPal 付款提交的脚本仅在一处设置了 IPN URL,这是正确的 URL。 我在上面的原始问题中包含了来自我网站根目录的 .htaccess 文件。当然,在某处可能有另一个 .htaccess 文件处理重定向(虽然我在共享服务器上,可能无权访问它)。 我根据您的 cmets 在答案中添加了一些其他想法。它仍然可能是一个重定向问题,并且浏览器刚刚缓存了 htaccess。现在,如果是这种情况,只需清除缓存即可解决问题。【参考方案2】:

今天我遇到了这个问题......即使我指定的notify_url 有效,paypal IPN 历史记录仍将通知显示为retrying

问题是 PayPal 将数据发送到该 URL 的 https://(安全)版本; 如果您将https:// 网址粘贴到浏览器中,您可能会看到您的主机没有在https:// 上显示网站,这也是Paypal 看到的,通常是404 错误页面。

【讨论】:

PayPal IPN:交付状态已禁用

】PayPalIPN:交付状态已禁用【英文标题】:PayPalIPN:DeliverystatusDisabled【发布时间】:2014-09-0900:52:48【问题描述】:为什么没有发送IPN?在我的IPN历史记录中,它说我的最后一次IPN尝试是N/A并且每个IPN的交付状态都是:已禁用。在P... 查看详情

为啥Paypal在使用django-paypal时会重试IPN

】为啥Paypal在使用django-paypal时会重试IPN【英文标题】:WhydoesPaypalretryIPNwhenusingdjango-paypal为什么Paypal在使用django-paypal时会重试IPN【发布时间】:2013-01-1715:47:50【问题描述】:我一直在尝试让django-paypal应用程序在我的Django项目中... 查看详情

Paypal IPN 已验证,但 Paypal 不断重试

】PaypalIPN已验证,但Paypal不断重试【英文标题】:PypalIPNVERIFIEDbutPaypalkeepretrying【发布时间】:2012-05-1609:11:21【问题描述】:我正在沙盒中测试IPN。在我的网站上,我记录了Paypal和我的网站之间的通信Startvalidations:_notify-validate,16.9... 查看详情

PayPal 付款状态“待处理” - 清算时没有 IPN

】PayPal付款状态“待处理”-清算时没有IPN【英文标题】:PayPalPaymentstatus"Pending"-noIPNonclearing【发布时间】:2017-02-1113:54:21【问题描述】:在过去的几个月里,客户的电子商务网站上似乎发生了一些奇怪的事情。当买家使... 查看详情

为 PayPal 创建 IPN URL

】为PayPal创建IPNURL【英文标题】:CreatingIPNURLforPayPal【发布时间】:2014-07-1723:18:39【问题描述】:我使用paypalrecurringgem设置了PayPal。我需要帮助了解如何实施PayPalIPN。任何帮助将不胜感激,因为这是我项目的最后一步。我需要设... 查看详情

在哪里使用新的 Paypal UI 为 Paypal 定期付款设置 IPN URL?

】在哪里使用新的PaypalUI为Paypal定期付款设置IPNURL?【英文标题】:WheretosetIPNURLforPypalRecurringpaymentsusingnewPaypalUI?【发布时间】:2018-09-1614:14:31【问题描述】:我发现应该在Paypal帐户设置中设置定期付款的IPNURL。我找到了旧的Paypal... 查看详情

Paypal IPN - 检查付款状态是不是已完成?

】PaypalIPN-检查付款状态是不是已完成?【英文标题】:PaypalIPN-Checkifpaymentstatusiscompleted?PaypalIPN-检查付款状态是否已完成?【发布时间】:2014-01-1810:17:18【问题描述】:我有一个电子书销售网站,用户可以在购买后下载一本书。... 查看详情

Paypal 多个 IPN 设置

】Paypal多个IPN设置【英文标题】:PaypalmultipleIPNsetup【发布时间】:2012-12-0917:27:01【问题描述】:在使用IPN来假设3个网站时,我并不是100%清楚这一点,如果有知识的人可以根据我的情况向我解释这一点,我将不胜感激。我已设置... 查看详情

PayPal IPN - 排队

】PayPalIPN-排队【英文标题】:PayPalIPN-Queued【发布时间】:2016-07-3019:28:32【问题描述】:我正在使用paypal沙盒进行一些测试付款,直到今天它们都很好。我没有收到来自paypal的IPN,当我查看IPN通知历史记录时,所有消息都显示为Q... 查看详情

PayPal IPN 验证和变音符号

】PayPalIPN验证和变音符号【英文标题】:PayPalIPNVerificationandUmlaut【发布时间】:2016-04-2623:41:59【问题描述】:我有一个关于PayPalIPN验证的问题。情况如下:我使用PayPalDevelopers的IPN模拟器来测试我的IPNPHP脚本。这很完美,IPN验证... 查看详情

WooCommerce Paypal 标准网关 - 已收到 IPN,但订单状态停留在“处理中”

】WooCommercePaypal标准网关-已收到IPN,但订单状态停留在“处理中”【英文标题】:WooCommercePaypalStandardGateway-IPNReceivedbutorderstatusstuckon\'processing\'【发布时间】:2017-02-1212:57:58【问题描述】:我使用标准的Paypal网关在WooCommerce上设置... 查看详情

确定谁购买了 PayPal - IPN

】确定谁购买了PayPal-IPN【英文标题】:IdentifywhomadethepurchasePayPal-IPN【发布时间】:2015-03-1017:07:03【问题描述】:我正在开发一个Twitter网络应用程序,用户可以在其中购买硬币包。一旦他们点击了paypal按钮并想要结帐,他们就会... 查看详情

PayPal IPN 突然停止流入

】PayPalIPN突然停止流入【英文标题】:PayPalIPNssuddenlystopflowingin【发布时间】:2021-06-2116:40:22【问题描述】:我有以下问题:自定义网店,用C#编写,托管在带有WindowsServer2019Datacenter的Azure服务器上,定期更新。与PayPal集成,工作... 查看详情

paypal 按钮/IPN 发票名称

】paypal按钮/IPN发票名称【英文标题】:paypalbutton/IPNinvoicename【发布时间】:2015-03-2103:23:04【问题描述】:我目前接受付款的设置如下:我使用自定义paypal按钮代码,在其中设置我的通知url(IPN)并返回带有我想要传递的参数的url(... 查看详情

PayPal IPN 始终获得状态 - 已排队

】PayPalIPN始终获得状态-已排队【英文标题】:PayPalIPNalwaysgetsstatus-Queued【发布时间】:2016-08-0710:48:28【问题描述】:我真的很难使用PayPalIPN。我用IPN模拟器测试了我的IPN监听器,一切似乎都很好。但是当我使用Sandbox时,每个IPN... 查看详情

Paypal 通知网址无法显示 1985 年的最新交货日期?

】Paypal通知网址无法显示1985年的最新交货日期?【英文标题】:Paypalnotifyurlnotworkingshowinglatestdeliverydatein1985?【发布时间】:2013-04-1616:13:27【问题描述】:我们在使用paypal时遇到了一些问题:通知url和状态在消息详细信息页面中... 查看详情

设置 PayPal 即时付款通知后,我可以追溯重新发送历史交易的 IPN 吗?

】设置PayPal即时付款通知后,我可以追溯重新发送历史交易的IPN吗?【英文标题】:AftersettingupPayPalInstantPaymentNotification,canIresendtheIPNforhistorictransactionsretroactively?【发布时间】:2015-01-0510:39:39【问题描述】:我刚刚为我的网站设... 查看详情

错误设置证书验证位置 - PayPal IPN 侦听器

】错误设置证书验证位置-PayPalIPN侦听器【英文标题】:errorsettingcertificateverifylocations-PayPalIPNListener【发布时间】:2015-12-0212:43:07【问题描述】:您好,我对编码很陌生,我正在努力摆脱我的菜鸟状态我开始在Windows7上使用apache2.4... 查看详情