Codeigniter和Paypal:它是如何工作的

时间:2010-03-26 21:09:02

标签: php codeigniter paypal paypal-subscriptions

当我尝试将Paypal IPN整合到基于Codeigniter的网络应用程序时,两个随机问题。

1)这两条线是否相同?

$data['pp_info'] = $this->input->post();

$data['pp_info'] = $_POST;

2)用户同意支付每月经常性费用以使用paypal使用您的服务 - 当您从PayPal返回数据时,您知道他们已经支付的第一笔付款。但是,如果用户在接下来的几个月内付款,您如何跟踪?你怎么知道用户没有从他们的paypal帐户取消?

感谢大家的帮助

3 个答案:

答案 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_signupsubscr_failedsubscr_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就会“推送”到您的服务器。