我正试图使用沙盒实现贝宝支付,但我似乎无法理解为什么它无法调用/访问/执行我的IPN url。
我一直在论坛上阅读一个尝试过的解决方案,但似乎没有什么能帮助我解决问题。
我得到了这个简单的表单代码:
<form action=" https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" name="form2" id="form2">
<input name="first_name" required="" size="40" type="text">
<input name="last_name" required="" size="40" type="text">
<input name="email" size="40" type="email">
<input name="item_name" size="40" type="text" value="Test Item">
<input name="amount" type="hidden" value="0.01">
<input name="cmd" type="hidden" value="_xclick">
<input name="business" type="hidden" value="test-seller8@test.co.uk">
<input name="notify_url" type="hidden" value="http://myurl.com/ipn.php">
<input name="return" type="hidden" value="http://myurl.com/result.php">
<input name="currency_code" type="hidden" value="GBP">
<input name="no_shipping" type="hidden" value="1">
<input type="submit" value="Pay now!">
</form>
我想我的表格很好,我可以去贝宝支付,并使用沙盒个人账户类型进行支付,它会提供一个链接,重定向到我的返回页面,当我点击它时,它会转到正确的页面。
问题是我的IPN脚本没有执行。这是我的IPN中的代码。
if(strcmp($_REQUEST['payment_status'],'Completed') == 0)
{
$fd = fopen(dirname(__FILE__).'/results/payment-result.txt', 'wb');
//dump request to file
fwrite($fd, "### $_REQUEST = ### n");
fwrite($fd, print_r($_REQUEST, true));
}
else
{
echo 'No direct access';
}
我试着删除if语句来检查付款状态是否完成,只是检查脚本是否正在执行,但没有,它甚至没有创建.txt文件。我还试图通过直接访问来检查我的IPN代码中是否有错误,但似乎很好,它创建了文件并记录了请求变量。
我也尝试过使用IPN模拟器,但每当我发送它时,它都会像永远一样加载,然后给出错误:
IPN Delivery Failed:I/O error: Connection timed out; nested exception is java.net.ConnectException: Connection timed out
这对我来说真的没有意义。
现在我很困惑我错过了哪一部分,或者是什么导致了我的IPN被执行的问题。
您应该确保在PayPal设置中打开了IPN:
- 登录您的PayPal帐户并转到个人资料→配置文件&设置→销售偏好→即时支付通知首选项:(或者单击此处直接转到页面,确保在单击链接之前已登录PayPal帐户)
- 单击PayPal网站上的打开IPN
- 然后,系统将提示您输入通知URL,该URL应该是任何URL——无论如何,它稍后只会被
notify_url
参数替换 - 保存您的设置
如果你已经这样做了,那么你需要确保你的通知URL可以通过外部世界访问,比如https://www.hidemyass.com/proxy检查你的网站肯定是可用的。
在您的PayPal帐户上查看您的IPN历史记录,您会看到IPN发送到的确切URL和状态。