Платеж по адаптивным платежам завершен, хотя actionType имеет значение CREATE - PullRequest
6 голосов
/ 06 февраля 2012

Использование Адаптивного API платежей Я получил ключ оплаты с помощью метода API Pay со следующими параметрами:

actionType:                      CREATE
receiverList.receiver(0).email:  ...
receiverList.receiver(0).amount: 5
currencyCode:                    EUR
cancelUrl:                       ...
returnUrl:                       ...
requestEnvelope.errorLanguage:   en_US

Затем я запустил встроенныйпоток платежей с этим URL: https://www.sandbox.paypal.com/webapps/adaptivepayment/flow/pay?expType=light&payKey=...

После того, как лайтбокс снова закрывается, когда я вызываю метод PaymentDetails для ключа оплаты, он дает мне (среди других значений):

paymentInfoList.paymentInfo(0).transactionStatus: COMPLETED
status:                                           COMPLETED
actionType:                                       CREATE

Таким образом, очевидно, что платеж уже выполнен, хотя я еще не вызывал метод ExecutePay.

Состояние docs (в разделе «Поля PayRequest»):

actionType xs: строка

(обязательно) Платит ли запрос на оплату получателю или настроен ли запрос на оплату для создания запроса на платеж, но не для выполнения платежа, пока не будет вызван ExecutePayment.

Допустимые значения:
[...]
CREATE - используйте эту опцию, чтобы настроить платежные инструкции с помощью SetPaymentOptions, а затем выполнить платеж позднее с помощью ExecutePayment.

Что я пропустил?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2015

(я знаю, что прошло три года с тех пор, как этот вопрос был задан, но, поскольку другой пользователь ссылался на этот вопрос, я все равно отвечу на него.)

Короче говоря, если вы отправите отправителя на веб-сайт PayPal, и он одобрит платеж, платеж будет завершен немедленно, независимо от того, что вы установили для actionType.

Цель установки actionType=CREATE - дать вам немного времени, чтобы сделать дополнительные вызовы API для Paykey до завершения платежа. Это в первую очередь полезно, когда вы делаете неявные платежи - например, те платежи, в которых отправитель и вызывающий API - одна и та же сторона (и вы установили sender.useCredentials=true, задали адрес электронной почты в senderEmail или настроили безопасный Идентификатор торгового счета в sender.accountId), или те платежи, в которых вы используете предварительное одобрение, одобренное отправителем ранее. Поскольку эти типы платежей обычно выполняются сразу (если вы установили actionType=PAY), установка actionType=CREATE дает вам немного времени для выполнения других вызовов API для платежа (таких как SetPaymentOptions) до его завершения.

Если вы делаете явный платеж (когда отправитель должен перейти на веб-сайт PayPal для подтверждения платежа), вы просто сделаете эти дополнительные звонки, прежде чем отправить пользователя в PayPal.

3 голосов
/ 04 марта 2012

В итоге мы использовали API предварительной проверки и позвонили с этим через Pay. В ответ на мой e-mail мне сказали:

"PayPal does not allow you to hold any amount of money in somebody else's PayPal account     and that is why we have Preapproval API."

Я до сих пор не уверен, почему Create, кажется, производит оплату, не требуя вызова ExecutePayment, но для моего рабочего процесса (который, я надеюсь, является ценным для вас), API предварительной проверки является подходящим способом.

...