我试图建立一个非常简单的贝宝支持的购物车,让用户可以购买多个项目。我想贝宝处理所有的付款细节。我连订单确认都不要。我将在paypal上手动检查订单确认。
起初我想使用"网站支付标准",因为它似乎很容易创建一个表单,将发布到贝宝,让贝宝处理它从那里。但是,不,这不起作用,因为"网站支付标准"按钮/表单不支持提交多个项目。我尝试了各种各样的键/值在我的形式,它从来没有工作。
然后我尝试使用这里找到的说明快速结账。它在很大程度上是有效的,但据我所知,在发送SetExpressCheckout之后,您必须听取来自paypal的请求并执行DoExpressCheckoutPayment以完成交易。所以参考。
我发现这有点麻烦,因为如果我的服务器没有收到paypal的请求,我从来没有发送一个DoExpressCheckoutPayment怎么办?因此,客户认为他们已经完成了提交订单,但订单从未收到。
有谁知道跳过这个"确认"步骤的方法吗?我觉得没有必要,也不知道为什么paypal需要它。
这是因为Express Checkout和Website Payments Standard是根本不同的产品。
要使用ExpressCheckout,您需要调用SetExpressCheckout API。在API调用中,指定产品、金额和RETURNURL的详细信息。
一旦你将这些数据发布到PayPal的API端点,你就会收到一个令牌作为回报。然后您将重定向买方,并将令牌附加到以下URL: 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"查看您的付款"页面上的"继续"按钮更改为"立即付款"按钮。
,
快速结帐和网站支付标准之间存在如此显著差异的原因是,网站支付标准旨在成为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
对于本网站而言,DoExpressCheckoutPayment
操作简单地是PayPal Express Checkout API所要求的。
您是正确的,PayPal不需要处理付款,但在某些情况下将需要第二次操作。这种场景的一个例子是用户(您站点的客户)在PayPal支付确认期间选择送货地址。根据您的运输提供商,您可能需要在用户在PayPal确认页面上选择送货地址后计算实际运费。