PayPal账单协议REST API-如何立即启动



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

以下是我迄今为止的收获。

  1. 创建计费计划(POST…/付款/计费计划/)
  2. 激活(PATCH…/付款/计费计划/)
  3. 创建账单金额(POST…/付款/账单协议/)
  4. 将用户发送到approvel_url,用户批准,重定向到返回url
  5. 执行协议(POST…/付款/计费协议//执行协议)

这一切似乎都有效,但我想现在和未来每个月都向用户收费。如果我在步骤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的一位代表谈过,发现start_date必须在明天或更晚。他们将把这个添加到文档中。

如果你想立即开始每月计费,你可以将开始日期设置为一个月后,并收取第一个月的安装费。我还没有测试过,因为这不是我想要的。

协议的第一笔付款将在指定的开始日期开具账单。后续金额也由PP自动提取。只有当PP未能在续订日期提取付款时,您才需要使用BillOutstandingAmount调用。

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

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

前任。开始日期=2014-09-16T09:20:00-0400

如果你想确保贝宝接受日期是有效的,只需添加几秒钟。

假设你在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);
}

我使用了这种日期格式。

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

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

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

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

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

因此,这些似乎每天都在07:00 UTC处理,除了日期之外,你什么都不能指定。

最新更新