我正在尝试构建一个非常简单的PayPal支持的购物车,以便用户可以购买多件商品。我希望paypal能够处理所有付款细节。我甚至不想要订单确认。我将在paypal上手动检查订单确认。
起初我想使用“网站付款标准”,因为创建一个可以发布到PayPal的表单并让paypal从那里处理它似乎很容易。但不,这不起作用,因为“网站付款标准”按钮/表单不支持提交多个项目。我在我的表单中尝试了各种键/值,但从未奏效。
然后我使用找到here的说明尝试了Express Checkout。它在很大程度上有效,但据我了解,在发送SetExpressCheckout后,您必须收听来自paypal的请求并执行DoExpressCheckoutPayment来完成交易。 SO reference
我发现这有点麻烦,因为如果我的服务器无法收到来自PayPal的请求并且我从未发送过DoExpressCheckoutPayment怎么办?所以客户认为他们已完成提交订单,但订单从未收到过。
有没有人知道跳过这个“确认”步骤的方法?我发现这是不必要的,并且不确定为什么paypal需要它。
答案 0 :(得分:42)
这是因为快速结账和网站付款标准是根本不同的产品。
要使用Express Checkout,您可以调用SetExpressCheckout API。在API调用中,您可以指定产品,金额和RETURNURL的详细信息 将此数据发布到PayPal的API端点后,您将收到一个令牌作为回报。 然后,您将重定向买方,并将令牌附加到以下网址:https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX
一旦买家同意您的购买,他将被重定向回您在RETURNURL中指定的URL。
您现在应该显示订单确认,并调用GetExpressCheckoutDetails API **
调用GetExpressCheckoutDetails时,请提供令牌。在GetExpressCheckoutDetails API响应中,您将找到PayerID。
现在您已准备好致电DoExpressCheckoutPayment,并向买家收费。请记住在调用DoExpressCheckoutPayment时同时包含令牌和payerID。
注意:如果您想立即通过致电GetExpressCheckoutDetails和DoExpressCheckoutPayment立即向买家收费,请将买家重定向到https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-XXXXXXX&useraction=commit。
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="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也附加在RETURNURL的GET中。因此,如果您愿意,可以跳过调用GetExpressCheckoutDetails。
答案 1 :(得分:3)
就本网站而言,PayPal Express Checkout API只需 DoExpressCheckoutPayment
操作。
您是正确的,PayPal不需要处理付款,但有些情况 需要第二次操作。这种情况的一个示例是用户(您的网站的客户)在PayPal付款确认期间选择送货地址的情况。 用户在PayPal确认页面上选择了送货地址后,您可能需要计算的实际送货金额,具体取决于您的送货商。