如何在用户购买会员资格,取消会员资格等时创建更新数据库的IPN。
还要确保我将需要的信息安全地传递到我的数据库并进行相应更新。
答案 0 :(得分:1)
要创建定期付款,请使用此html表单:
<form method="post" name="formName" id="submitThisForm" action="https://www.paypal.com/cgi-bin/webscr" >
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<input type="hidden" name="business" value="your@papypamail.com" />
<input type="hidden" name="item_name" value="Your Membership" />
<input type="hidden" name="a3" value="0.01">
<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="item_number" value="2" />
<input type="hidden" name="custom" value="SECURITYCODE" />
<input type="hidden" name="currency_code" value="USD" />
<input type="hidden" name="quantity" value="1" />
<input type="hidden" name="no_shipping" value="1" />
<input type="hidden" name="return" value="page going after payment" />
<input type="hidden" name="cancel_return" value="" />
<input type="hidden" name="cbt" value="ITEM DESCRIPTION" />
<input type="hidden" name="rm" value="2" />
<input type="hidden" name="notify_url" value="your_listener_file.php" />
当用户取消会员资格时,您必须使用paypal POST变量'txn_type'='subscr_cancel'。有几个要点:
您必须验证ipn事务:
$post = array( 'cmd' => '_notify-validate' );
foreach($_POST as $key=>$value){
$post[$key] = $value;
}
$c = curl_init();
curl_setopt_array($c, array(
CURLOPT_FOLLOWLOCATION => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_CONNECTTIMEOUT => 15,
CURLOPT_MAXREDIRS => 15,
CURLOPT_TIMEOUT => 15,
CURLOPT_URL => 'https://www.paypal.com/cgi-bin/webscr',
CURLOPT_POST => TRUE,
CURLOPT_POSTFIELDS => $post,
));
$res = curl_exec($c);
curl_close($c);
$res = trim($res);
if( $res != 'VERIFIED' ) {
exit();
}
第二 - 检查是使用唯一键在数据库中存在的事务。您必须使用Paypal POST变量'custom'。
如果交易存在,只需进行一些简单的检查:
if( !empty($_POST['txn_type']) && $_POST['txn_type'] == 'subscr_cancel' )
$paypalData['approved'] = 0;