2014-04-13 111 views
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時顯示總額。我錯過了什麼?

回答

2

我沒有看到您的DoExpressCheckoutPayment請求中發送的總數。您需要在DECP中包含您在SEC中完成的相同詳細信息。

從版本112.0開始,他們引入了USESESSIONPAYMENTDETAILS參數,它應該允許告訴DECP只使用您在SEC中發送的信息(如果將其設置爲true或1),似乎與它是否存在差異作品,雖然。我還沒有自己測試。

+0

看起來像'USESESSIONPAYMENTDETAILS'不工作。你確認嗎? – Vimalnath

+0

你說得對。我認爲,通過在訂單中傳遞訂單總額,它記得我實際嘗試「付款」時的所有事情。 (這也是他們的指南如何顯現)。無論如何,它現在起作用。謝謝! – drewwyatt

+0

'USESESSIONPAYMENTDETAILS'可以工作,但是您仍然必須通過'PAYMENTREQUEST_0_AMT' - 因爲DoECP調用仍然會在查看'USESESSIONPAYMENTDETAILS'之前檢查是否傳遞了所需的參數。 –