Почему DoExpressCheckoutPayment требуется для Paypal? - PullRequest
12 голосов
/ 02 ноября 2011

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

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

Затем я попробовал Express Checkout, используя найденные инструкции здесь .Во многом это сработало, но, насколько я понимаю, после отправки SetExpressCheckout вы должны прослушать запрос от PayPal и выполнить DoExpressCheckoutPayment для завершения транзакции. SO reference .

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

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

Ответы [ 2 ]

42 голосов
/ 02 ноября 2011

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

Чтобы использовать Express Checkout, вы должны вызвать SetExpressCheckout API.В вызове 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 и списать средства с покупателя.Не забудьте указать токен и идентификатор PayerID при вызове DoExpressCheckoutPayment.

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

-

Причиной столь значительной разницы между Express Checkout и Standard Payments Standard является то, что платежи через веб-сайтСтандарт предназначен для использования в качестве рабочего решения, в котором 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="seller@designerfotos.com">
<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, если хотите.

3 голосов
/ 19 июля 2012

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

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

...