Почему для PayPal требуется DoExpressCheckoutPayment?

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

Сначала я хотел использовать «Стандарт платежей на веб-сайте», потому что казалось простым создать форму, которая будет публиковаться в PayPal и позволять PayPal обрабатывать ее оттуда. Но нет, это не сработало, потому что кнопки/форма «Стандартные платежи на веб-сайте» не поддерживают отправку нескольких элементов. Я пробовал все виды ключей/значений в своей форме, и это никогда не работало.

Затем я попробовал экспресс-оплату, используя инструкции, найденные здесь< /а>. Это в основном сработало, но, насколько я понимаю, после отправки SetExpressCheckout вам нужно прослушать запрос от PayPal и сделать DoExpressCheckoutPayment для завершения транзакции. ссылка на SO.

Я нахожу это немного хлопотным, потому что что, если мой сервер не получит запрос от PayPal, и я никогда не отправлю DoExpressCheckoutPayment? Таким образом, клиент ДУМАЕТ, что он завершил отправку заказа, но заказ так и не был получен.

Кто-нибудь знает способ пропустить этот шаг «подтверждения»? Я считаю это ненужным и не уверен, почему PayPal требует этого.


person vinhboy    schedule 02.11.2011    source источник
comment
Технически DoExpressCheckoutPayment требуется (или даже доступен) только для API Express Checkout и Website Payments Pro.   -  person Kenny Evitt    schedule 19.07.2012


Ответы (2)


Это связано с тем, что Express Checkout и Standard Payments Standard — принципиально разные продукты.

Чтобы использовать Express Checkout, вы должны вызвать API SetExpressCheckout. В вызове API вы указываете сведения о продуктах, суммах и RETURNURL.
После публикации этих данных в конечной точке API PayPal вы получаете взамен токен. Затем вы должны перенаправить покупателя и добавить токен к следующему URL-адресу: https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX

После того как покупатель согласился с вашей покупкой, он перенаправляется обратно на URL-адрес, указанный вами в RETURNURL.
Теперь вы должны отобразить подтверждение заказа и вызвать API GetExpressCheckoutDetails**.
При вызове GetExpressCheckoutDetails укажите токен. В ответе API GetExpressCheckoutDetails вы найдете PayerID.

Теперь вы готовы вызвать DoExpressCheckoutPayment и выставить счет покупателю. Не забудьте включить токен и идентификатор плательщика при вызове DoExpressCheckoutPayment.

Примечание. Если вы хотите немедленно выставить счет покупателю, вызвав GetExpressCheckoutDetails и DoExpressCheckoutPayment, перенаправьте покупателя на https://www.paypal.com/cgi-bin/webscr?cmd. useraction=commit заменит кнопку «Продолжить» на странице «Просмотр платежа» PayPal на кнопку «Оплатить сейчас».

--

Причина такой существенной разницы между Express Checkout и Стандартом платежей через веб-сайт заключается в том, что Стандарт платежей через веб-сайт предназначен для использования в качестве рабочего решения, в котором PayPal обрабатывает весь поток транзакций. Express Checkout — это более гибкое решение, которое позволяет глубоко интегрировать его с существующим потоком оформления заказа на веб-сайте или в корзине покупок.

Для вашего варианта использования; посмотрите с помощью кнопок PayPal «загрузить корзину». См. пример https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_cart_upload

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_cart">
<input type="hidden" name="upload" value="1">
<input type="hidden" name="business" value="[email protected]">
<input type="hidden" name="item_name_1" value="Item Name 1">
<input type="hidden" name="amount_1" value="1.00">
<input type="hidden" name="item_name_2" value="Item Name 2">
<input type="hidden" name="amount_2" value="2.00">
<input type="submit" value="PayPal">
</form> 

Однако обратите внимание, что по умолчанию это небезопасно, так как суммы, которые вы собираетесь взимать, будут четко видны в HTML.

** PayerID также добавляется в GET вашего RETURNURL. Таким образом, вы можете пропустить вызов GetExpressCheckoutDetails, если хотите.

person Robert    schedule 02.11.2011
comment
Спасибо за подробный ответ. Однако я никогда не приравнивал стандартные платежи через веб-сайт к экспресс-оплате. Если бы я это сделал, это было бы ошибкой. Мой главный вопрос: почему PayPal требует DoExpressCheckoutPayment, это кажется ненужным и вводящим в заблуждение, поскольку пользователь уже совершил платеж. Тем не менее, ваш пример стандартной формы платежей через веб-сайт для нескольких элементов работал, и это все, с чего я действительно хотел начать (однако он все еще не отвечает на этот вопрос). Снова. Спасибо! - person vinhboy; 03.11.2011
comment
Я знаю, что ты этого не сделал; но это отвечает на ваш вопрос, почему требуется DoExpressCheckoutPayment. :-) Это природа зверя. Express Checkout задуман как промежуточное платежное решение, расположенное между вашей корзиной и страницей подтверждения заказа. Следовательно, для завершения платежа требуется DoExpressCheckoutPayment; это дает продавцу большую гибкость в отношении того, когда, как и где взимать плату с покупателя, а не с покупателя, который взимает плату немедленно на самом веб-сайте PayPal. Фактическая оплата не завершена после того, как покупатель согласился на оплату. Он завершается только после вызова DoEC. - person Robert; 03.11.2011
comment
Есть ли официальная документация по useraction=commit? - person panzi; 17.10.2013
comment
Понятно: cms.paypal.com/ uk/cgi-bin/ - person panzi; 17.10.2013
comment
@panzi интересно, ты там был? Я ищу часы... Спасибо! - person user492238; 25.07.2014
comment
@user492238 user492238 Я больше не знаю, как я нашел это еще в октябре. (Это то, что вы спросили, или это было так?) - person panzi; 25.07.2014
comment
@panzi да, скорее риторический вопрос. Я считаю, что документы pp как-то трудно получить обзор. еще раз спасибо - person user492238; 26.07.2014

Для целей этого сайта операция DoExpressCheckoutPayment просто требуется для API PayPal Express Checkout.

Вы правы в том, что PayPal не обязан обрабатывать платеж, но есть сценарии, которые потребуют повторной операции. Примером такого сценария может быть случай, когда пользователь (клиент вашего сайта) выбирает адрес доставки во время подтверждения платежа PayPal. В зависимости от поставщика(ов) доставки вам может потребоваться рассчитать фактические суммы доставки после того, как пользователь выбрал адрес доставки на страницах подтверждения PayPal.

person Kenny Evitt    schedule 19.07.2012