3

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

1)这两行是一样的吗?

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

$data['pp_info'] = $_POST;

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

谢谢大家的帮助

4

3 回答 3

2

1) 小心 - 为了安全起见,您希望使用 CodeIgniter 的 post() 处理程序,但请注意,虽然 CI 将行返回标准化为 \n,但 PayPal 需要 \r\n。因此,如果您不小心,PayPal 会将多行输入视为 INVALID 拒绝。为了在我的PayPal IPN 库中解决这个问题,我这样做:

    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_failedsubscr_eot(期末)。您想检查这些值并在您的应用程序中处理它们。

于 2011-02-22T11:02:45.607 回答
1

1)是的,但您应该使用第一个,以防 CI 将来更改方法(安全过滤器等)。

2) PayPal 有一个 URL,你需要每隔几个小时调用一次,上面写着“这个人卡已过期”和“这个其他人的定期付款已被处理”。该 URL 将在您的 PayPal 控制面板中。

于 2010-03-26T21:21:23.943 回答
0

1)不,它们不一样。

您通常应该使用 $this->input->post(); 因为它是一种简写方式,可以帮助您检查该 POST 数组索引是否已设置。

如果没有任何内容发布到您的页面并且您调用 $_POST['mydata'] 您将收到错误消息,因为该数组索引不存在。为了克服这个问题,你会做一个“if (isset($_POST['mydata']))”检查,但 CI 已经为你做了。

就像 Coronatus 所说的那样,您可以获得额外的 CI 好东西

2)不要像亚历克斯迪恩所说的那样每隔几个小时就打电话给贝宝。使用 IPN,因此当发生任何事情时,paypal 都会向您的服务器“推送”。

于 2012-02-18T13:25:06.797 回答