1

我想使用以下 PHP IPN 包:

https://github.com/mike182uk/paypal-ipn-listener

现在这里是来自 github 的示例代码:

    $request = new PayPal\Ipn\Request\Curl();

$request->secure(true); //dont need to do this as its done by default, just demonstrating configuring the request component

$listener = new PayPal\Ipn\Listener($request);

$listener->setMode('sandbox');

try {
    $status = $listener->verifyIpn();
}
catch (Exception $e) {
    $error = $e->getMessage();
    $status = false;
}

if ($status) {
    // verified...
}
else {
    // invalid...
    $report = $listener->getReport();
}

因此,既然请求和侦听器看起来是在同一个操作中执行的,那么这将如何与路由一起工作?我以为您已将帖子或数据变量 ipn_notification_url 设置为您的 ipn 所在的 url,但看起来如果我将其设置为与上述相同的路由,它会重新发送请求?

我只是看不到初始请求是如何发出的(通过表单/帖子?)我希望它可以与购物车一起使用,所以我想您会将它发送到将购物车内容数组提供给的路由用于初始化 $request 的数据字段。但是对于上面的示例,ipn 侦听器似乎与初始请求位于同一路由中?

我为新手感到抱歉,但小例子可以帮助新手

4

1 回答 1

1

以下是我如何将此包添加到我的 L4 安装:

1:将包添加到站点根目录中的 composer.json 文件中。

"require" : {
... (existing requirements),
"mike182uk/paypal-ipn-listener": "dev-master"
}

"autoload" : {
... (existing autoload stuff, certainly the classmap array),
"psr-0": {"PayPal": "src/"}

2:composer update从您的站点根目录运行并让它做它的事情。

3:为您的文件添加一个 POST 路由,routes.php以便 PayPal 使用 IPN:

Route::post('payment/ipn.php', array('as' => 'paypal.payment-ipn', 'uses' => 'PaymentsController@paypal_ipn'));

4:在您的 PaymentsController(或您用来处理付款的任何控制器名称)中添加一个名为 paypal_ipn() 的函数。这就是问题中的示例代码所在的位置:

/*
==================
    PayPal IPN Stuff
==================
*/

public function paypal_ipn(){

    $request = new PayPal\Ipn\Request\Curl();

    $listener = new PayPal\Ipn\Listener($request);

    $listener->setMode('sandbox');

    try {
        $status = $listener->verifyIpn();
    }
    catch (Exception $e) {
        $error = $e->getMessage();
        $status = false;
    }

    if ($status) {
        // verified...
        error_log('Verified');
    }
    else {
        // invalid...
        $report = $listener->getReport();
    }

}

这对我有用。请让我知道是否有任何错误的方法。

于 2013-11-21T15:44:42.133 回答