缺少快速结帐订单总数

Posted

技术标签:

【中文标题】缺少快速结帐订单总数【英文标题】:Express Checkout Order Total is Missing 【发布时间】:2014-05-27 04:51:01 【问题描述】:

我不断收到错误 #10400(订单总数丢失),但不确定我遗漏了什么。一切似乎都在正确处理。这是设置付款的地方:

def setcheckout
    api = PayPal::SDK::Merchant::API.new


    @set_express_checkout = api.build_set_express_checkout(params[:SetExpressCheckoutRequestType])

    # Find Item Total and Order Total
    details = @set_express_checkout.SetExpressCheckoutRequestDetails
    pay = details.PaymentDetails[0]

    pay.PaymentDetailsItem[0].Name = 'Item'
    pay.PaymentDetailsItem[0].Amount = 1
    pay.PaymentDetailsItem[0].Quantity = 1

    pay.ItemTotal  = pay.PaymentDetailsItem[0].Amount
    pay.OrderTotal.currencyID = pay.ItemTotal.currencyID
    pay.OrderTotal.value = pay.ItemTotal.value.to_f

    # Notify url
    #pay.NotifyURL ||= ipn_notify_url

    # Return and cancel url
    details.ReturnURL ||= 'http://localhost:3000/confirm'
    details.CancelURL ||= 'http://localhost:3000/failed'

    @set_express_checkout_response = api.set_express_checkout(@set_express_checkout)


    if @set_express_checkout_response.success?
      redirect_to "https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=#@set_express_checkout_response.Token"
    end
end

这会将我带到贝宝,对用户进行身份验证,然后按预期返回确认 URL。看起来像这样:

def confirm
    session[:token]   = params[:token]    if params[:token]
    session[:PayerID] = params[:PayerID]  if params[:PayerID]

    api = PayPal::SDK::Merchant::API.new
    @do_express_checkout_payment = api.build_do_express_checkout_payment(params[:DoExpressCheckoutPaymentRequestType])
    details = @do_express_checkout_payment.DoExpressCheckoutPaymentRequestDetails
    details.Token   = session[:token]
    details.PayerID = session[:PayerID]
    #details.PaymentDetails[0].NotifyURL ||= ipn_notify_url
    @do_express_checkout_payment_response = api.do_express_checkout_payment(@do_express_checkout_payment) if request.post?
end

单击“确认并付款”按钮并将上述内容发布到后,交易将失败并出现10400 Order total is missing. 错误。在我看来,我在上面指定了订单总额,当我被带到贝宝时会显示总额。我错过了什么?

【问题讨论】:

【参考方案1】:

我没有看到您的 DoExpressCheckoutPayment 请求中发送的总数..??您需要在 DECP 中包含与在 SEC 中相同的详细信息。

从 112.0 版开始,他们引入了 USESESSIONPAYMENTDETAILS 参数,如果您将其设置为 true 或 1,该参数应该允许告诉 DECP 仅使用您在 SEC 中发送的内容。关于它是否有效似乎存在一些差异, 尽管。我还没有自己测试。

【讨论】:

看起来 USESESSIONPAYMENTDETAILS 不起作用。您能确认一下吗? 你是对的。我认为通过在设置中传递订单总计,当我实际尝试“do”付款时,它会记住所有内容。 (这也是他们的指南使它出现的方式)。无论如何,它现在有效。谢谢! USESESSIONPAYMENTDETAILS 有效,但您仍然必须传递 PAYMENTREQUEST_0_AMT -- 因为 DoECP 调用仍然会在查看 USESESSIONPAYMENTDETAILS 之前检查您是否传递了所需的参数。

以上是关于缺少快速结帐订单总数的主要内容,如果未能解决你的问题,请参考以下文章

结帐页面上的 Woocommerce 更改结帐总数

.NET 中的 Paypal v2 快速结帐集成

使用贝宝快速结帐完成付款后如何获取授权ID

从结帐页面中删除贝宝快速结帐单选按钮

Paypal 快速结帐的结帐屏幕不一致

在WooCommerce的“快速查看”窗口中显示自定义表单