2015-11-09 2 views
0

Я вырываю с помощью paypal api и дается всем, что было написано об этом. Я не единственный :-). Однако я не смог найти ответ на свой вопрос.Настройка адаптивного платежного потока PayPal

Я пытаюсь настроить прикован платеж в Ruby, например, так:

amount = (self.price * 0.95).round(2) #amount to payout to seller 
fee = (self.price * 0.05).round(2) #5% fee for my platform 
api = PayPal::SDK::AdaptivePayments.new 
pay = api.build_pay({ 
    :actionType => "PAY", 
    :cancelUrl => "https://my-url/paypal_cancel?purchase_guid=" + self.guid, 
    :currencyCode => self.currency, 
    :feesPayer => "EACHRECEIVER", 
    :ipnNotificationUrl => "http://my-url/paypal_ipn_notify?purchase_guid=" + self.guid, 
    :receiverList => { 
     :receiver => [{ 
      :amount => amount, 
      :email => '[email protected]', #this must be the party that receives the full amount initially 
      :primary => true 
     }], 
     :receiver => [{ 
      :amount => fee, 
      :email => '[email protected]' #this will be the account of my platform that is a secondary receiver and receives the fee 
     }]}, 
    :returnUrl => "https://some-url/paypal_success?purchase_guid=" + self.guid + "&verification_key=" + paypal_verification_key }) 
pay_response = api.pay(pay) 

Это завершается без ошибок, но плательщик только будет предложено оплатить сумму/плату, указанную на вторичном приемнике. Сумма, указанная в основном получателе, игнорируется и нигде не может быть найдена в процессе оплаты.

Все это, вероятно, связано с недостатком знаний, но весь api очень непрозрачен.

Любые идеи? :-) Благодаря!

------ EDIT ------

Вот хэш/YAML объекта receiversList:

--- !ruby/object:PayPal::SDK::AdaptivePayments::DataTypes::ReceiverList 
receiver: !ruby/array:PayPal::SDK::Core::API::DataTypes::ArrayWithBlock 
internal: 
- !ruby/object:PayPal::SDK::AdaptivePayments::DataTypes::Receiver 
amount: 7.15 
email: !ruby/string:PayPal::SDK::Core::API::DataTypes::SimpleTypes::String [email protected] 
ivars: 
:@block: !ruby/object:Proc {} 
"https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=AP-8VD6912739718553G" 

Я вижу только один приемник там, так что я думаю, вы Право, проблема где-то там. Любая идея, какая часть моего кода испортила это?

----- EDIT 2 -----

Хорошо, я clearup хэш вопрос следующим образом:

:receiverList => { 
    :receiver => [{ 
     :amount => amount, 
     :email => '[email protected], 
     :primary => true 
     }, 
     { 
     :amount => fee, 
     :email => '[email protected]' 
    }], 
} 

Это приводит к следующему:

--- !ruby/object:PayPal::SDK::AdaptivePayments::DataTypes::ReceiverList 
receiver: !ruby/array:PayPal::SDK::Core::API::DataTypes::ArrayWithBlock 
internal: 
- !ruby/object:PayPal::SDK::AdaptivePayments::DataTypes::Receiver 
amount: 135.78 
email: !ruby/string:PayPal::SDK::Core::API::DataTypes::SimpleTypes::String [email protected] 
primary: true 
- !ruby/object:PayPal::SDK::AdaptivePayments::DataTypes::Receiver 
amount: 7.15 
email: !ruby/string:PayPal::SDK::Core::API::DataTypes::SimpleTypes::String [email protected] 
ivars: 
:@block: !ruby/object:Proc {} 

Однако теперь я получаю следующую ошибку:

undefined method `to_model' for true:TrueClass 

при вызове

redirect_to api.payment_url(pay_response) 

Похоже метод api.payment_url не возвращает строку? Любые свежие идеи?

+0

Я думаю, вы должны попытаться более четко объяснить свою проблему. –

+1

Можете ли вы попробовать вставить хэш внутри 'receiverList' в консоль рельсов и посмотреть, что получилось в результате? Я думаю, что ваша проблема лежит там ;-) –

+0

Спасибо. Я добавил хэш. Похоже, что что-то не в порядке :-) – Corstiaan

ответ

2

У вас есть два элемента: :receiver в хеше :receiverList. Хэш может иметь только один элемент для каждого уникального имени, поэтому последнее определение перезаписывает первое, таким образом, первый приемник теряется.

Вместо этого добавьте оба приемника в один массив внутри :receiver, так что у вас будет :receiverList => {:receiver => [{...}, {...}]}.

+1

Можете ли вы привести правильный документ PayPal, чтобы подтвердить это? Мне трудно найти его. –

+0

Я обновил исходный вопрос с новым положением дел. – Corstiaan

+0

Глядя на документы сейчас ... Не могу найти ничего ... – Corstiaan

Смежные вопросы