在php中每月在paypal中定期付款
Posted
技术标签:
【中文标题】在php中每月在paypal中定期付款【英文标题】:Recurring payment in paypal every month in php 【发布时间】:2015-12-15 04:13:42 【问题描述】:我正在为 php 中的 paypal 进行定期付款。我看过一些例子,下面是我觉得很容易理解的代码。
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<!-- Identify your business so that you can collect the payments. -->
<input type="hidden" name="business" value="info@capleswebdev.com">
<!-- Specify a Subscribe button. -->
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<!-- Identify the subscription. -->
<input type="hidden" name="item_name" value="Alice's Weekly Digest">
<input type="hidden" name="item_number" value="DIG Weekly">
<!-- Set the terms of the regular subscription. -->
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="a3" value="5.00">
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="M">
<!-- Display the payment button. -->
<input type="image" name="submit" border="0" src="https://www.paypal.com/en_US/i/btn/btn_subscribe_LG.gif" >
<img border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif" >
</form>
根据上面的代码,每月收费5美元。我真的不知道该代码是否有效。我还想知道,在上面的代码中,Paypal API 用户名、密码和密钥没有选项,只有它获得了在 paypal 注册的电子邮件 ID 的业务。我完全困惑它是否会工作或如何工作正确地做到这一点。请给我一些建议,以及在用户取消或成功将钱支付到我的贝宝帐户后,我该如何接收数据
【问题讨论】:
嗨,看这里,***.com/questions/24318396/… 【参考方案1】:为避免重复测试,您可以使用 price 进行测试,例如 0,01。要创建定期付款,请使用此 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" />
当用户取消会员资格时,贝宝将通知“notify_url” - 在您的情况下,这将是文件 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 变量“自定义”。
如果交易存在,做一些简单的检查:
if( !empty($_POST['txn_type']) && $_POST['txn_type'] == 'subscr_cancel' )
$paypalData['approved'] = 0;
【讨论】:
以上是关于在php中每月在paypal中定期付款的主要内容,如果未能解决你的问题,请参考以下文章