我们开始使用iDevAffiliate。
基于following instructions,
我们制作了PayPal的“立即购买”按钮,其中notify_url
属性指向我们的iDevAffiliate服务器(/paypal_ipn_buynow.php
)。
我不明白的是,如果所有请求都发送到iDevAffiliate服务器,现在PayPal如何通知我们的服务器购买?
如何在不破解iDevAffiliate代码的情况下将请求传递给我们的服务器?
答案 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发送数据时,将关闭圈子。
希望我帮助过。