【问题标题】:Codeigniter and Paypal: How it worksCodeigniter 和 Paypal:它是如何工作的
【发布时间】:2011-02-01 09:01:54
【问题描述】:

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

1) 这两行是一样的吗?

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

$data['pp_info'] = $_POST;

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

感谢大家的帮助

【问题讨论】:

    标签: php codeigniter paypal paypal-subscriptions


    【解决方案1】:

    1) 不,它们不一样。

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

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

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

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

    【讨论】:

      【解决方案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(期末)。您想检查这些值并在您的应用中处理它们。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • @Coronaus 谢谢你的回答。对于 (2),您是否有机会知道 URL 的格式?我的意思是检查人员,我是否只需将他们的 ID 附加到 URL 并提出请求?
        • 对不起,我不记得了。我已经有一段时间没有这样做了。
        猜你喜欢
        • 2012-09-01
        • 2013-01-14
        • 2011-09-08
        • 2012-12-06
        • 1970-01-01
        • 2013-07-20
        • 2016-01-10
        • 2011-03-05
        • 1970-01-01
        相关资源
        最近更新 更多