WordPress and IPN problem

时间:2013-09-07 作者:Derfder

我在模板文件夹中创建了一个名为ipn.php:

<?php

$req = \'cmd=_notify-validate\';
foreach($_POST as $key => $value) :
  $value = urlencode(stripslashes($value));
  $req .= "&$key=$value";
endforeach;

$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.sandbox.paypal.com\', 443, $errno, $errstr, 30);

if(!$fp) :
// HTTP ERROR
else :
    fputs ($fp, $header . $req);
    while(!feof($fp)) :

        $res = fgets ($fp, 1024);

        $fh = fopen(\'result.txt\', \'w\');
            fwrite($fh, $res);
            fclose($fh);

        if (strcmp ($res, "VERIFIED") == 0) :

            include_once($_SERVER[\'DOCUMENT_ROOT\'].\'/wp-load.php\');

            $headers = \'From: Tester 1 <[email protected]>\' . "\\r\\n";
            $subject = \'Subject test\' . "\\r\\n";
            $message = \'Just a test stuff.\';
            wp_mail(\'[email protected]\', $subject, $message, $headers );

        elseif(strcmp ($res, "INVALID") == 0) :

            // error

        endif;

    endwhile;
fclose ($fp);
endif;
和notify\\u url我已设置为:

<input type="hidden" name="notify_url" value="<?php bloginfo(\'stylesheet_directory\'); ?>/ipn.php">
但在我支付了费用,PyaPal页面上的流程完成后,我将被重定向回我的感谢页面(这部分工作正常),出于某种原因,ipn。php没有给我发邮件。为什么会这样?

代码中有错误吗?我已删除txn\\U id和电子邮件等的所有if条件,以消除错误。

如果我在开发者paypal网站中使用IPN模拟器,并将notify\\u url地址放在那里,然后选择Web Accept,则结果是:IPN sent successfully 所以,我想我的主机并没有阻止贝宝交易。或

我甚至尝试将电子邮件代码放在ipn的顶部。php脚本:

 <?php

    include_once($_SERVER[\'DOCUMENT_ROOT\'].\'/wp-load.php\');

                $headers = \'From: Tester 1 <[email protected]>\' . "\\r\\n";
                $subject = \'Subject test\' . "\\r\\n";
                $message = \'Just a test stuff.\';
                wp_mail(\'[email protected]\', $subject, $message, $headers );

    $req = \'cmd=_notify-validate\';
    foreach($_POST as $key => $value) :
      $value = urlencode(stripslashes($value));
      $req .= "&$key=$value";
    endforeach;

    $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.sandbox.paypal.com\', 443, $errno, $errstr, 30);

    if(!$fp) :
    // HTTP ERROR
    else :
        fputs ($fp, $header . $req);
        while(!feof($fp)) :

            $res = fgets ($fp, 1024);

            $fh = fopen(\'result.txt\', \'w\');
                fwrite($fh, $res);
                fclose($fh);

            if (strcmp ($res, "VERIFIED") == 0) :



            elseif(strcmp ($res, "INVALID") == 0) :

                // error

            endif;

        endwhile;
    fclose ($fp);
    endif;
但它似乎根本没有被触发;((未发送电子邮件)。

可能是Wordpress阻止了这个地址还是什么?我不知道可能是mod\\u重写阻止了它还是什么?

我使用了很好的url,所以mod\\u rewrite可以正常工作,但可能还有其他一些问题。

知道有什么问题吗?

我已经检查了电子邮件,甚至垃圾邮件文件夹,但什么都没有找到。如果我使用wp\\u mail-in功能。php它按预期工作,但不在ipn中。php文件。

你知道什么地方出了问题,邮件没有发送吗?

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

首先,是更好的使用get_template_directory_uri() 而不是bloginfo(...

<input type="hidden" name="notify_url" value="<?php echo get_template_directory_uri(); ?>/ipn.php">
但如果你认为问题不在于此,那你是对的。

我不能肯定,但我敢打赌你的问题在这里:

include_once( $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-load.php\' );
这是一种有问题的方法wp-load.php, 但是

Why load the entire wordpress environment for just sending an email?

请注意,加载wp-load.php 加载所有WP核心文件,从数据库获取选项,加载所有活动插件,加载活动主题functions.php 和父主题functions.php 如果您使用的是子主题。您还可以触发一些操作和筛选器。。。很多不必要的东西。

您根本不需要它们:只需使用php发送电子邮件即可mail() 函数,(或至少包括一个类,如this).

您的流程将是a lot faster 我敢打赌。。。成功。

结束

相关推荐

Wordpress SMTP EMail

我在wordpress上有一个已经配置好的类phpmailer的插件。php通过SMTP发送电子邮件。我的主机只接受SMTP电子邮件。当我在wordpress中注册时,我会收到一封电子邮件,当我联系另一个用户时,他会收到电子邮件。这没关系。但当我尝试使用这个插件时,他没有发送任何电子邮件。你能帮帮我吗?提前谢谢你 <?php ini_set(\'display_errors\',true); ini_set(\'memory_limit\', \'128M\');