如何将PayPal IPN回调抛出idevaffiliate传递给框架?

时间:2015-07-27 14:52:27

标签: php paypal paypal-ipn

我们开始使用iDevAffiliate

基于following instructions, 我们制作了PayPal的“立即购买”按钮,其中notify_url属性指向我们的iDevAffiliate服务器(/paypal_ipn_buynow.php)。

我不明白的是,如果所有请求都发送到iDevAffiliate服务器,现在PayPal如何通知我们的服务器购买?

如何在不破解iDevAffiliate代码的情况下将请求传递给我们的服务器?

2 个答案:

答案 0 :(得分:1)

您可以先重定向到服务器,然后从服务器重定向到联盟网址。如果这是不可能的,也许您的联盟会员提供了一些API,您可以使用它来检查状态

干杯

答案 1 :(得分:0)

你做错了。

PayPal会将您的IPN请求发送到您在notify_url字段中指定的网站。在这里,您要指定域中脚本的名称,该脚本将侦听来自PayPal的IPN请求。例如:http://yourwebsite.com/listen_ipn.php其中listen_ipn.php是您的PHP脚本。

请注意,如果您使用框架,那么您可以在控制器的操作中实现您的IPN侦听器。那么您的网址可能是这样的:http://yourdomain.com/controllerID/actionID

要实现IPN侦听器,请使用以下库https://github.com/Quixotix/PHP-PayPal-IPN。这个库非常有用且易于使用。

以下是示例代码:

<?php

include('ipnlistener.php');

$listener = new IpnListener();
$listener->use_sandbox = true;

try {
    $verified = $listener->processIpn();
} catch (Exception $e) {
    // fatal error trying to process IPN.
    exit(0);
}

if ($verified) {
    // IPN response was "VERIFIED"
} else {
    // IPN response was "INVALID"
}

?>

当您收到并解析IPN请求时,您可能希望更新数据库中的某些数据,例如,允许您的用户访问某些用户付费的数据。

当您这样做时,您必须通知iDevAffiliate已付款。您拥有PHP $_POST数组中PayPal的所有数据。因此,为了通知iDevAffiliate,只需发出包含PayPal发送给您的所有数据的POST请求(同样,您可以从$_POST数组中检索此数据)到您网站的iDevAffiliate监听器。

要发送POST请求,您可以使用cURL libraray。这是一个例子:

$url = 'http://server.com/path';
$data = array('key1' => 'value1', 'key2' => 'value2');

// use key 'http' even if you send the request to https://...
$options = array(
    'http' => array(
        'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        'method'  => 'POST',
        'content' => http_build_query($data),
    ),
);
$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

var_dump($result);

更新:PayPal可能会向您发送同一交易的多个IPN请求,因此请确保您的数据库中有一些标志列告诉您IPN已经处理。

当您向iDevAffiliate发送数据时,将关闭圈子。

希望我帮助过。