我正在开发在线商店应用程序,并且在将订单信息收到通知URL方面很难。在此文档之后,我创建了我的贝宝表格:
<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
<fieldset>
<input id="buy" name="submit" type="submit" class="btn btn-primary" value="Buy" id="">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="test-facilitator@gmail.com">
<input type="hidden" name="item_name" value="My online store">
<input type="hidden" name="currency_code" value="EUR">
<input type="hidden" name="amount" data-bind="value: amount">
<input type="hidden" name="notify_url" value="myurl/notify">
<input type="hidden" name="return" value="myurl/return">
<input type="hidden" name="cancel_return" value="myurl/cancel">
</fieldset>
</form>
其中" myurl"类似于 http://78.83.22.112
。我正在本地Apache服务器上运行我的应用程序。返回和取消URL正在按预期工作,但是PayPal似乎无法调用我的Notify URL。我正在使用Laravel 4开发我的应用程序,所以这是我在Routes.php中管理通知URL的方式:
Route::post('/notify', 'CartController@notify');
这是我的通知方法:
public function notify() {
Log::info("Notify hit");
}
在IPN模拟器中测试了我的通知URL,结果为
我们很抱歉,我们无法连接到此URL。请确保它已正确输入。
我在做什么错?为什么沙箱不能称我的通知URL?
这听起来像是防火墙问题。请记住,取消和返回URL是PayPal发送您到URL的地方。我一直定期针对内部非路由网址进行测试。PayPal只是将您的浏览器发送到您告诉它的地方,并且没有任何人可以达到的验证。
IPN是另一个故事。PayPal的服务器必须能够连接到您指定的URL。在这种情况下,您需要让端口80(HTTP)打开,以便外部用户可以连接。微软有有关如何打开防火墙端口的说明(Windows 7,但在8.1等相似)。
因此,在3天之后,战斗终于解决了这个问题。我没有在浏览器中键入" Localhost",而是输入了我的外部IP(发送给PayPal的IP)来测试我的应用程序。我的通知URL被称为成功。不知道为什么,但是这解决了问题。