1
我总是收到错误#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
这需要我paypal,验证用户,然后返回到预期的确认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.
错误失败。它看起来像我指定上面的订单总额,并且当我被带到paypal时显示总额。我错过了什么?
看起来像'USESESSIONPAYMENTDETAILS'不工作。你确认吗? – Vimalnath
你说得对。我认为,通过在订单中传递订单总额,它记得我实际尝试“付款”时的所有事情。 (这也是他们的指南如何显现)。无论如何,它现在起作用。谢谢! – drewwyatt
'USESESSIONPAYMENTDETAILS'可以工作,但是您仍然必须通过'PAYMENTREQUEST_0_AMT' - 因为DoECP调用仍然会在查看'USESESSIONPAYMENTDETAILS'之前检查是否传递了所需的参数。 –