2014-09-16 2 views
8

Как я могу сразу начать взимать плату с пользователя, который должен получить оплату по PayPal?Соглашения о выставлении счетов PayPal REST API - как начать немедленно

Вот что у меня есть.

  1. Создание плана счетов (POST .../платежи/выставления счетов-планы /)
  2. сделать его активным (PATCH .../платежи/выставления счетов-планы /)
  3. Создать биллинг Aggreement (POST .../платежи/биллинг-соглашение /)
  4. Отправить пользователь approval_url, пользователь утверждает, перенаправляется возвратным URL
  5. выполнения соглашения (POST .../платежей/биллинг-соглашения // соглашения, выполнение)

Все это работает, но я хочу зарядить пользователя прямо сейчас и каждый месяц в будущем. Если я установил start_date, чтобы перейти к шагу 3, я получаю сообщение об ошибке, оно должно быть в будущем. Если я его установлю в будущем, пользователь не будет платить.

Нужно ли «Установить суммы непогашенных соглашений», а затем «Сумма непогашенных соглашений» для первоначального платежа?

Кроме того, что касается ежемесячных платежей, требуется ли им какое-то действие или они просто происходят, как указано в Плане фактурирования?


Update

Я проверяю это около 2014-09-16T20:06:30+0000

Если я пошлю start_date как текущее время UTC это получить ошибку на шаге 2, говорит мне, что должно быть в будущем.

Если я отправить текущую дату +30 секунд или +2 часа я получаю через к шагу 5, который возвращает 400 ответ: UNKNOWN_ERROR «Неизвестная ошибка произошла»

Если я отправить текущую дату +4 часа все работает. Текущее время UTC составляет 8 вечера, поэтому добавление 4 часов означает, что завтра будет start_date.

Означает ли это, что я не могу заряжать пользователя сегодня? Должны ли start_date быть на следующий день или даже на следующий бизнес день?

ответ

6

Я говорил с репутацией PayPal и обнаружили, что start_date должна быть завтра или позже. Они собираются добавить это в документы.

Если вы хотите немедленно начать ежемесячную оплату, вы можете сделать это, установив дату начала в течение одного месяца и взимая плату за установку, чтобы покрыть первый месяц. Я не тестировал это, потому что это не то, что я хочу.

+1

Теперь я проверил настройку платы за установку - он не заряжает пользователя сразу! Кажется, нет никакого способа сделать это вообще. – Jake

+0

Они такие беспорядки. Я также получил официальный ответ, они сказали 5 минут в PST (вопреки тому, что они сказали вам). Они дали мне смешанную информацию, охватывающую несколько вызовов по любой теме, с которой я их ударил. – lefnire

+1

Я вижу, что из Калифорнии он взимает сразу же, если я передаю обвинение до 16:00 (зима), что означает, что UTC остается в тот же день. После 16:00, UTC на следующий день, и заряд не проходит сразу. Я предполагаю, что в течение 8 часов (PST - UTC - 8). Таким образом, PayPal имеет огромные временные проблемы с их планами. –

2

Первый платеж по соглашениям будет выставлен счет на указанную дату start_date. Последующие суммы также автоматически принимаются ПП. Вам нужно работать с вызовами BillOutstandingAmount, только если PP не смог выбрать платеж в дату продления.

Проблема, с которой я столкнулся при разработке с помощью RestAPI, указывала неправильный часовой пояс. Возможно, для вас это тоже самое. Убедитесь, что правильный часовой пояс указан в вашем датой_начала (все даты даны ПП на самом деле)

Даты должны быть в следующем формате: YYYY-MM-DDThh: мм: сульфасалазина

отл.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); 
} 
+1

Он работает, если я добавлю 1 день в 'start_date'. Несколько секунд не работают, даже несколько часов не работают. Нельзя ли сразу выставить счет? – Jake

+0

Вы уверены, что используете правильный часовой пояс? Я сомневаюсь, что это сработает для меня, а не для вас. Если вы укажете текущее время и время, к моменту, когда ваш пользователь примет соглашение, он сразу выставляет счет, когда вы его выполняете. – Ethorsen

+0

Странно, я провел еще несколько тестов. См. Обновление в вопросе. – Jake

0

Я не могу воспроизвести, фактически. Я наткнулся на эту нить при получении ошибки из-за установки ее на moment.now(). Но установка в течение 5 секунд в будущем работает a-ok. Я использую JavaScript, "start_date": moment().add({seconds:5}).format() и это отлично проверяет. Moment.js установит TZ на UTC при форматировании как таковой, так что это должно быть часовым поясом на вашем конце?

+0

Я тоже борюсь с этим. Когда я закрою его на несколько секунд вперед, он пройдет, и он отобразится как «Актив» в учетной записи, но на самом деле он ничего не взимает ...В качестве альтернативы, если я устанавливаю начальную стоимость, она проходит, но устанавливает статус «Ожидание». Я на 100% уверен, что мой часовой пояс установлен правильно. – Guy

+0

Я получил официальный ответ: «Лучшим обходным решением для немедленного повторного платежа является добавление на 5 минут раньше текущего времени. Если вы используете несколько секунд, это может быть проблемой позже, если какая-либо сеть разбивается на стороне сервера или клиента . Также убедитесь, что вы используете PST как время, потому что система PayPal сохраняет любую попытку в часовом поясе PST ». – lefnire

+0

Нужно ли использовать PST или GMT? Потому что paypal говорит использовать формат ISO 8601. – viper

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, и вы не можете указать ничего, кроме даты.

Смежные вопросы