我在模板文件夹中创建了一个名为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文件。
你知道什么地方出了问题,邮件没有发送吗?
最合适的回答,由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 我敢打赌。。。成功。