我如何通过PayPal IPN回调抛出idevaffiliate到一个框架


How can I pass PayPal IPN callback throw idevaffiliate to a framework?

我们开始使用iDevAffiliate

根据以下说明,我们制作了一个PayPal的Buy Now按钮,其notify_url属性指向我们的iDevAffiliate服务器(/paypal_ipn_buynow.php)。

我不明白的是,如果所有的请求都要去iDevAffiliate服务器,现在PayPal怎么能通知我们的服务器购买?

我怎样才能传递一个请求到我们的服务器,而不黑客iDevAffiliate的代码?

您可以先重定向到您的服务器,然后从您的服务器重定向到会员url。如果这是不可能的,也许你的附属机构提供了一些国王的API,你可以使用它来检查状态

欢呼

你做错了。

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

请注意,如果你正在使用框架,那么你可以在控制器的动作中实现你的IPN监听器。那么你的URL可能是这样的:http://yourdomain.com/controllerID/actionID

使用以下库https://github.com/Quixotix/PHP-PayPal-IPN实现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数组。因此,为了通知iDevAffiliate,只需POST请求包含PayPal发送给您的所有数据(再次,您可以从您的$_POST数组检索此数据)到iDevAffiliate侦听器从您的网站。

发送POST请求,可以使用cURL库。下面是示例:

$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);

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

当你发送数据到iDevAffiliate,那么圈子就关闭了。

希望我帮到你。