我正在使用这样的PayPal表格(付款没问题)用于订阅计划而且没有得到任何IPN通知,但是当我使用由paypal生成的标准PayPal表格时,所有IPN通知都可以。有没有办法通过这种形式获得IPN?感谢
这是我的表格。如果我从此表单中删除notify_url,我只能在notify_url或IPM上获取数据。
PS>主要问题!有没有办法同时使用ipn + notify_url?例如吗
<form action="https://www.paypal.com/a-bin/webscr" method="post" target="_top">
<!-- Identify your business so that you can collect the payments. -->
<input type="hidden" name="business" value="info@****.***">
<!-- Specify a Buy Now button. -->
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<!-- Specify details about the item that buyers will purchase. -->
<table>
<tbody><tr>
<td>
<input type="hidden" name="on1" value="Mobile/Cell Phone number:"><strong>Mobile/Cell Phone number:</strong>
</td>
<td>
<input type="text" maxlength="200" name="os1" required="">
</td>
</tr>
<tr>
<td>
<input id="item_name" type="hidden" name="item_name" value="kp4">
<input id="item_number" type="hidden" name="item_number" value="1">
<label>Subscription Plans</label>
</td>
<td>
<!-- <input type="hidden" name="a3" value="5.00"> -->
<input data-name="kp4" data-id="1" type="radio" name="a3" value="0.01" checked=""> 0,01 /month <br>
<input data-name="kp5" data-id="2" type="radio" name="a3" value="0.02"> 0,01 /month <br>
<input data-name="kp6" data-id="3" type="radio" name="a3" value="0.03">0,01 /month <br>
<input data-name="kp7" data-id="4" type="radio" name="a3" value="0.04> 0,01 /month <br>
<input data-name="kp8+" data-id="5" type="radio" name="a3" value="0.05"> 0,05 /month <br>
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="M">
<input type="hidden" name="src" value="1">
<input type="hidden" name="sra" value="1">
<input type="hidden" name="custom" value="ORG">
</td>
</tr>
</tbody></table>
<!-- Specify Currency Code -->
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="no_shipping" value="1">
<input type="hidden" name="rm" value="2">
<!-- Specify URLs -->
<input type="hidden" name="notify_url" value="***payment-success.php?site_name=ORG">
<input type="hidden" name="cancel_return" value="****payment-cancel.php">
<input type="hidden" name="return" value="***payment-success.php">
<input type="image" name="submit" border="0" src="https://www.paypalobjects.com/en_US/i/btn/btn_subscribeCC_LG.gif" alt="PayPal - The safer, easier way to pay online">
<img alt="" border="0" width="1" height="1" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif">
</form>
答案 0 :(得分:3)
PS&GT;主要问题!有没有办法同时使用ipn + notify_url? 实施例
简而言之:否
但是你能达到预期的效果吗?的是
多年来,这一直困扰着Paypal,但仍然存在。
有一种非常流行的方法(对于那些知道的人)使用php和curl解决这个问题,并由Codeseekah分发。 (不隶属)
概念
为PayPal设置单个IPN URL以通知您的应用程序 付款。 IPN处理程序代码将PayPal的有效负载广播给其他人 您可以选择性地或批量使用的IPN网址。
- 现在可以使用多个PayPal IPN网址
- 除非按IP过滤请求,否则无需更改任何IPN代码
- 可以将IP过滤集中到广播IPN中,这意味着当PayPal的IP范围发生变化时更容易维护
- 可以集中记录
- 如果无法访问卫星(所有其他IPN URL),则可以进行排队和重播
守则
此IPN广播代码使用PHP,但该概念是非语言特定的。只需移植代码,它就能做得更好甚至更好。
<?php
/*
* This is a PayPal IPN (Instant Payment Notification) broadcaster
* Since PayPal does not provide any straightforward way to add
* multiple IPN listeners we'll have to create a central IPN
* listener that will broadcast (or filter and dispatch) Instant
* Payment Notifications to different destinations (IPN listeners)
*
* Destination IPN listeners must not panic and recognize IPNs sent
* by this central broadcast as valid ones in terms of source IP
* and any other fingerprints. Any IP filtering must add this host,
* other adjustments made as necessary.
*
* IPNs are logged into files for debugging and maintenance purposes
*
* this code comes with absolutely no warranty
* https://codeseekah.com
*/
ini_set( 'max_execution_time', 0 ); /* Do not abort with timeouts */
ini_set( 'display_errors', 'Off' ); /* Do not display any errors to anyone */
$urls = array(); /* The broadcast session queue */
/* List of IPN listener points */
$ipns = array(
'mystore' => 'http://mystore.com/ipn.php',
'myotherstore' => 'http://mybigstore.com/paypal_ipn.php',
'myotherandbetterstore' => 'http://slickstore.com/paypal/ipn.php'
);
/* Fingerprints */
if ( /* My Store IPN Fingerprint */
preg_match( '#^\d+\|[a-f0-9]{32}$#', $_POST['custom'] ) /* Custom hash */
and $_POST['num_cart_items'] == 2 /* alwayst 1 item in cart */
and strpos( $_POST['item_name1'], 'MySite.com Product' ) == 0 /* First item name */
) $urls []= $ipns['mystore']; /* Choose this IPN URL if all conditions have been met */
if ( /* My Other Store IPN Fingerprint */
sizeof( explode('_', $_POST['custom']) ) == 7 /* has 7 custom pieces */
) $urls []= $ipns['myotherstore']; /* Choose this IPN URL if all conditions have been met */
/* My Other And Better Store IPN Fingerprint */
$custom = explode('|', $_POST['custom']);
if (
isset($custom[2]) and $custom[2] == 'FROM_OB_STORE' /* custom prefixes */
) $urls []= $ipns['myotherandbetterstore']; /* Choose this IPN URL if all conditions have been met */
/* ... */
/* Broadcast */
if ( !sizeof($urls) ) $urls = $ipns; /* No URLs have been matched */
$urls = array_unique( $urls ); /* Unique, just in case */
/* Broadcast (excluding IPNs from the list according to filter is possible */
foreach ( $urls as $url ) broadcast( $url );
header( 'HTTP/1.1 200 OK', true, 200 );
exit(); /* Thank you, bye */
/* Perform a simple cURL-powered proxy request to broadcast */
function broadcast( $url ) {
/* Format POST data accordingly */
$data = array();
foreach ($_POST as $key => $value) $data []= urlencode($key).'='.urlencode($value);
$data = implode('&', $data);
/* Log the broadcast */
file_put_contents('_logs/'.time().'.'.reverse_lookup( $url ).'-'.rand(1,100), $data);
$ch = curl_init(); /* Initialize */
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch); /* Execute HTTP request */
curl_close($ch); /* Close */
}
function reverse_lookup( $url ) {
global $ipns;
foreach ( $ipns as $tag => $_url ) {
if ( $url == $_url ) return $tag;
}
return 'unknown';
}
?>
完整文章位于https://codeseekah.com/2012/02/11/how-to-setup-multiple-ipn-receivers-in-paypal/
注意:作者非常积极并回答所有问题。