You can see the available options in this table (only the middle column applies since activemerchant uses the SOAP API):
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing#id086NA300I5Z__id086NAC0J0PN
To better understand how activemerchant works, perhaps he looks directly at the implementation. You can see the relevant parameters inserted into the SOAP XML request (currently), starting at line 98 where OrderTotal inserted:
https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal_express.rb#L98
Notice how the parameters are extracted from the options hash so that you can see the correct character for each of them here.
In your case, when you specified the following parameters, you would do it as follows:
def paypal options = { :name => "Tickets", :quantity => @payment.quantity, :description => "Tickets for #{@payment.event_name}", :amount => @payment.unit_price :ip => request.remote_ip, :return_url => url_for(:action=>:confirm, :id=>@payment.id, :only_path=>false), :cancel_return_url => url_for(:action=>:show, :id=>@payment.id, :only_path=>false) }
Please note: The fields name , quantity and amount are not currently supported in activemerchant. You will have to shell out the repository and paste them yourself and use your copy of the project. It is very simple when you look at the code and see how it is done with others.
For example, to add the order name, number of elements and unit price, you must put these lines after the OrderDescription is inserted:
xml.tag! 'n2:Name', options[:name] xml.tag! 'n2:Amount', options[:amount] xml.tag! 'n2:Quantity', options[:quantity]
Hope this helps!
UPDATE:
Well, I think, according to the XML schema for the SOAP API, it looks like you should specify it like it does in activemerchant:
xml.tag! 'n2:PaymentDetails' do items = options[:items] || [] items.each do |item| xml.tag! 'n2:PaymentDetailsItem' do xml.tag! 'n2:Name', item[:name] xml.tag! 'n2:Description', item[:desc] xml.tag! 'n2:Amount', item[:amount] xml.tag! 'n2:Quantity', item[:quantity] end end end
And you will pass all your elements in your Rails application as follows:
options = { :items => [ { :name => "Tickets", :quantity => @payment.quantity, :description => "Tickets for #{@payment.event_name}", :amount => @payment.unit_price }, { :name => "Other product", :quantity => @other_payment.quantity, :description => "Something else for #{@other_payment.event_name}", :amount => @other_payment.unit_price } ] :ip => request.remote_ip, :return_url => url_for(:action=>:confirm, :id=>@payment.id, :only_path=>false), :cancel_return_url => url_for(:action=>:show, :id=>@payment.id, :only_path=>false) }
Hope everything will be better, good luck!