Вы можете увидеть доступные параметры в этой таблице (применяется только средний столбец, поскольку activemerchant использует SOAP API):
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing#id086NA300I5Z__id086NAC0J0PN
Чтобы лучше понять, как работает activemerchantвероятно, чтобы посмотреть непосредственно в реализации.Вы видите, как соответствующие параметры вставляются в запрос SOAP XML (в настоящее время), начиная со строки 98, где вставляется OrderTotal
:
https://github.com/Shopify/active_merchant/blob/master/lib/active_merchant/billing/gateways/paypal_express.rb#L98
Обратите внимание, как параметры выбираются изхеш options
, чтобы вы могли видеть правильный символ для передачи каждого из них здесь.
В вашем случае, перечисляя следующие параметры, вы сделали бы это следующим образом:
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)
}
# the actual code that gets used
setup_response = gateway.setup_purchase(@payment.amount, options)
redirect_to gateway.redirect_url_for(setup_response.token)
end
Обратите внимание: поля name
, quantity
и amount
в настоящее время не поддерживаются в activemerchant.Вам придется раскошелиться на репозиторий, вставить их самостоятельно и использовать свою копию проекта.Это действительно очень просто, когда вы смотрите на код и видите, как это делается с остальными.
Например, чтобы добавить название заказа, количество товара и цену за единицу, вы бы поставили эти строки после OrderDescription
вставляется:
xml.tag! 'n2:Name', options[:name]
xml.tag! 'n2:Amount', options[:amount]
xml.tag! 'n2:Quantity', options[:quantity]
Надеюсь, это поможет!
ОБНОВЛЕНИЕ:
Хорошо, я думаю, что в соответствии со схемой XML для SOAP API это выглядит так, как будто вы должны указатьэто как в 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
И вы бы передавали все свои элементы в приложение Rails следующим образом:
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)
}
Надеюсь, что это работает лучше, удачи!