当我尝试将Paypal IPN整合到基于Codeigniter的网络应用程序时,两个随机问题。
1)这两条线是否相同?
$data['pp_info'] = $this->input->post();
$data['pp_info'] = $_POST;
2)用户同意支付每月经常性费用以使用paypal使用您的服务 - 当您从PayPal返回数据时,您知道他们已经支付的第一笔付款。但是,如果用户在接下来的几个月内付款,您如何跟踪?你怎么知道用户没有从他们的paypal帐户取消?
感谢大家的帮助
答案 0 :(得分:2)
1)注意 - 为了安全起见,你想使用CodeIgniter的post()处理程序,但请注意,当CI将行返回标准化为\ n时,PayPal需要\ r \ n。因此,如果您不小心,PayPal将拒绝多行输入为INVALID。要在我的PayPal IPN library中解决这个问题,我会这样做:
foreach (array_keys($_POST) as $field)
{
$value = $this->input->post($field);
$ipnData[$field] = str_replace("\n", "\r\n", $value);
}
2)如果您使用IPN进行定期付款,那么PayPal会将用户订阅级别的更新通知发送到您的IPN URL。您想要查看txn_type变量 - 有效值包括subscr_signup
,subscr_failed
和subscr_eot
(期末)。您想检查这些值并在应用中处理它们。
答案 1 :(得分:1)
1)是的,但你应该使用第一个,incase CI将来对方法进行更改(安全过滤器等)。
2)PayPal有一个网址,你需要每隔几个小时打电话说“这个家伙卡已过期”和“其他人经常付款已经处理”。该URL将位于您的PayPal控制面板中。
答案 2 :(得分:0)
1)不,他们不一样。
您通常应使用$ this-> input-> post();因为它是一个简短的手,可以帮助您检查是否设置了POST数组索引。
如果没有任何内容发布到您的页面并且您调用$ _POST ['mydata'],您将收到错误,因为该数组索引不存在。为了克服这一点,你会做一个“if(isset($ _ POST ['mydata']))”检查,但CI已经为你做了。
并且像Coronatus所说的那样你得到了额外的CI好东西
2)不要每隔几个小时打电话给paypal,就像alex dean所说的那样。使用IPN,因此只要发生某些事情,paypal就会“推送”到您的服务器。