PayPal结算协议REST API - 如何立即启动

时间:2014-09-16 00:12:58

标签: paypal

如何立即开始向用户收取PayPal结算协议的费用?

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

  1. 创建结算方案(POST ... / payments / billing-plans /)
  2. 将其设为有效(PATCH ... / payments / billing-plans /)
  3. 创建结算协议(POST ... / payments / billing-agreements /)
  4. 将用户发送至approval_url,用户批准,重定向以返回网址
  5. 执行协议(POST ... / payments / billing-agreements / agreement-execution)
  6. 这一切似乎都有效,但我希望现在和将来的每个月向用户收费。如果我在步骤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是否必须在第二天甚至是下一个业务日?

5 个答案:

答案 0 :(得分:7)

我和PayPal代表谈过,发现start_date必须是明天或更晚。他们将把这个添加到文档中。

如果您想立即开始每月结算,您可以通过将开始日期设置为一个月的时间并收取设置费用来支付第一个月来完成。我没有测试过这个,因为它不是我想要的。

答案 1 :(得分:2)

协议的第一笔付款将在指定的start_date上开具。随后的金额也由PP自动获取。只有在PP未能在续订日期选择付款时,您才需要使用BillOutstandingAmount调用。

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

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

离。 start_date = 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);
}

答案 2 :(得分:0)

实际上,我无法复制。由于将错误设置为moment.now(),我在收到错误时偶然发现了这个问题。但是将来设置为5秒甚至可以正常工作。我正在使用JavaScript,"start_date": moment().add({seconds:5}).format()并且检查结果很好。当格式化时,Moment.js会将TZ设置为UTC,所以它必须是你时区的事情吗?

答案 3 :(得分:0)

看起来付款只是根据当前日期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处理,除了日期之外你不能指定任何东西。

答案 4 :(得分:0)

我使用了这种日期格式。

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