使用 Laravel 5 的 Paypal 的 IPN 模拟器
Paypal's IPN Simulator using Laravel 5
我正要解决这个问题,我正在我的应用程序中实施 IPN 系统,现在开始使用 Paypal 的 IPN 模拟器进行测试。
当我尝试发送 IPN 模拟时,它只给出以下错误:
We're sorry, but there's an HTTP error. Please try again.
第一个想法 - Paypal 的服务已关闭 - 测试错误,因为如果我创建一个空白页面并将 IPN 消息发送到 http://myDNS.com/blankpage.php
它能够发送它。
再三考虑 - 路线问题 - 我认为这也不是问题:
这是我在 PurchaseController.php
的 IPN 侦听器:
public function completed()
{
//FAHIM's Paypal IPN Listener
$ipn = new PaypalIPNListener();
$ipn->use_sandbox = true;
$verified = $ipn->processIpn();
$report = $ipn->getTextReport();
Log::info("-----new payment-----");
Log::info($report);
if ($verified) {
if($_POST['address_status'] == 'confirmed'){
//sucess
}
}
}
在routes.php
中:
Route::post('purchase/completed/', array('as' => 'purchase.completed', 'uses' => 'PurchaseController@completed'));
IPN 模拟器和 Laravel 是否存在任何已知问题?
提前致谢。
看来我找到了答案!
问题是每当 Paypal 尝试发送 POST 信息时都会抛出 tokenMismatchException。
对于遇到同样问题的人,这里是解决方案:
在VerifyCsrfToken.php
中间件中添加异常,使异常URI不需要CsrfToken验证:
就我而言,它看起来像这样:
protected $except = [
'purchase/completed'
];
我正在使用 Laravel 5,所以请记住它在较低版本中可能会略有不同。
我正要解决这个问题,我正在我的应用程序中实施 IPN 系统,现在开始使用 Paypal 的 IPN 模拟器进行测试。
当我尝试发送 IPN 模拟时,它只给出以下错误:
We're sorry, but there's an HTTP error. Please try again.
第一个想法 - Paypal 的服务已关闭 - 测试错误,因为如果我创建一个空白页面并将 IPN 消息发送到 http://myDNS.com/blankpage.php
它能够发送它。
再三考虑 - 路线问题 - 我认为这也不是问题:
这是我在 PurchaseController.php
的 IPN 侦听器:
public function completed()
{
//FAHIM's Paypal IPN Listener
$ipn = new PaypalIPNListener();
$ipn->use_sandbox = true;
$verified = $ipn->processIpn();
$report = $ipn->getTextReport();
Log::info("-----new payment-----");
Log::info($report);
if ($verified) {
if($_POST['address_status'] == 'confirmed'){
//sucess
}
}
}
在routes.php
中:
Route::post('purchase/completed/', array('as' => 'purchase.completed', 'uses' => 'PurchaseController@completed'));
IPN 模拟器和 Laravel 是否存在任何已知问题?
提前致谢。
看来我找到了答案! 问题是每当 Paypal 尝试发送 POST 信息时都会抛出 tokenMismatchException。
对于遇到同样问题的人,这里是解决方案:
在VerifyCsrfToken.php
中间件中添加异常,使异常URI不需要CsrfToken验证:
就我而言,它看起来像这样:
protected $except = [
'purchase/completed'
];
我正在使用 Laravel 5,所以请记住它在较低版本中可能会略有不同。