【问题标题】:PayPal billing agreements REST API - how to start immediatelyPayPal 计费协议 REST API - 如何立即开始
【发布时间】:2014-11-09 14:46:09
【问题描述】:

我如何才能立即开始向用户收取 PayPal 计费协议的费用?

这是我到目前为止所得到的。

  1. 创建结算计划(POST .../payments/billing-plans/)
  2. 使其处于活动状态(PATCH .../payments/billing-plans/)
  3. 创建结算协议(POST .../payments/billing-agreements/)
  4. 将用户发送到approval_url,用户批准,重定向到返回url
  5. 执行协议(POST .../payments/billing-agreements//agreement-execute)

这一切似乎都行得通,但我想现在和将来每个月向用户收费。如果我在步骤 3 中将 start_date 设置为现在,我会收到错误,它一定是在将来。如果我将来设置它,则不会向用户收费。

对于首期付款,我是否需要先“设置未结协议金额”,然后再“结算未结协议金额”?

另外,按月付款呢,它们需要采取一些措施还是只是按照结算计划中的规定进行?


更新

我正在围绕 2014-09-16T20:06:30+0000 进行测试

如果我发送 start_date 作为当前 UTC 时间,它会在第 2 步得到一个错误,告诉我它必须在未来。

如果我发送当前日期 +30 秒或 +2 小时,我将进入第 5 步,返回 400 响应:UNKNOWN_ERROR “发生未知错误”

如果我发送当前日期 +4 小时,则一切正常。当前的 UTC 时间是晚上 8 点,因此增加 4 小时意味着 start_date 是明天。

这是否意味着我今天无法向用户收费? start_date 是否必须在第二天甚至下一个工作日

【问题讨论】:

    标签: paypal


    【解决方案1】:

    我已与 PayPal 代表交谈,发现 start_date 必须是明天或更晚。他们将把它添加到文档中。

    如果您想立即开始按月计费,您可以通过将开始日期设置为一个月时间并收取第一个月的安装费来实现。我没有对此进行测试,因为这不是我想要的。

    【讨论】:

    • 我现在已经测试了设置费用选项 - 它也不会立即向用户收费!看来根本没有办法。
    • 他们真是一团糟。我也得到了官方回复,他们在 PST 中说 5 分钟(与他们告诉你的相反)。他们向我提供了跨越多个电话的混合信息,几乎涵盖了我遇到的每个主题。
    • 我从加利福尼亚看到,如果我在 16:00(冬季)之前通过收费,它会立即收费,这意味着 UTC 仍然是同一天。 16:00 后,UTC 为次日,不会立即扣费。我假设它将在 8 小时内完成(PST 是 UTC - 8)。所以 PayPal 的计划存在巨大的时间问题。
    • paypal 沙箱存在关于初始付款金额不起作用的问题。但是,这似乎在实时环境中按预期工作。
    • 每当我创建协议时,它都会将协议开始日期设置为 7 小时后,我无法检查付款。
    【解决方案2】:

    协议的第一笔付款将在指定的 start_date 结算。随后的金额也由 PP 自动提取。仅当 PP 未能在续订日期选择付款时,您才需要使用 BillOutstandingAmount 调用。

    我在使用他们的 RestAPI 开发时遇到的问题是指定了错误的时区。也许这对你来说也是一样的。确保在您的 start_date 中指定了正确的时区(实际上所有日期都给了 PP)

    日期应采用以下格式:yyyy-MM-ddTHH:mm:ssZ

    例如。开始日期 = 2014-09-16T09:20:00-0400

    如果您想确保 Paypal 接受有效日期,只需添加几秒钟即可。

    假设您使用 Java,您可以执行以下操作:

    private String getPaypalDate()
    {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    
        // Add 30 seconds to make sure Paypal accept the agreement date
        Date rightNow = new Date(new Date().getTime() + 30000);
    
        return df.format(rightNow);
    }
    

    【讨论】:

    • 如果我将 1 天添加到 start_date,它会起作用。几秒钟不起作用,甚至几个小时也不起作用。有没有办法立即结算?
    • 您确定您使用的时区正确吗?我怀疑它对我有用,对你没用。如果您指定当前日期时间,当您的用户接受协议时,它将在您执行协议时立即计费。
    • 奇怪,我又做了一些测试。请查看问题中的更新。
    • @Ethorsen 交易是否向账户收费?我的通过,并显示“活动”,但不收费。
    【解决方案3】:

    我使用这种日期格式工作。

      $time = time();
      $startDate = date('Y-m-d\\TH:i:s\\Z', $time);
    

    【讨论】:

      【解决方案4】:

      实际上,我无法复制。由于将其设置为moment.now(),我在收到错误时偶然发现了这个线程。但是将来将其设置为 5 秒也可以。我正在使用 JavaScript,"start_date": moment().add({seconds:5}).format(),结果很好。 Moment.js 会在格式化时将 TZ 设置为 UTC,所以它一定是你的时区吗?

      【讨论】:

      • 我也一直在努力解决这个问题。当我提前几秒钟设置它时,它会通过并在帐户中显示为“活动”,但它实际上并没有收取任何费用......或者,如果我设置了初始费用,它会通过但设置状态到“待定”。我 100% 确定我的时区设置正确。
      • 我收到了官方回复:“立即进行定期付款的最佳解决方法是从当前时间提前 5 分钟。如果使用几秒钟,则可能会在以后出现问题服务器或客户端的网络中断。另外请确保您使用 PST 作为时间,因为 PayPal 系统正在保存 PST 时区的任何尝试。"
      • 我们必须使用 PST 还是 GMT?因为 paypal 说要使用 ISO 8601 格式。
      【解决方案5】:

      看起来付款只是根据当前日期 07:00 UTC 之前或之后的日期处理的。

      例如。当前日期时间是 2017-05-04T04:50:00.00Z 我将开始日期设置为当前 UTC 日期时间加上 30 秒。因为协议日期设置为大于当前日期时间的值,所以 API 不会引发错误,但不会将您的时间设置为您指定的时间。相反,它将其设置为 2017-05-04T07:00:00Z。

      现在,如果您有相同的日期时间 2017-05-04T04:50:00.00Z 而不是添加 30 秒,而是添加 24 小时,您会认为您的时间将设置为 2017-05-05T04 :50:00.00Z。但是不,时间将设置为 2017-05-05T07:00:00Z。

      所以看起来这些只是在每天 07:00 UTC 处理,除了日期之外你不能指定任何东西。

      【讨论】:

        猜你喜欢
        • 2015-11-01
        • 2014-12-08
        • 2018-12-01
        • 2014-10-28
        • 2017-06-21
        • 1970-01-01
        • 2017-07-06
        • 2020-04-06
        • 2015-03-07
        相关资源
        最近更新 更多