Я вырываю с помощью 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 не возвращает строку? Любые свежие идеи?
Я думаю, вы должны попытаться более четко объяснить свою проблему. –
Можете ли вы попробовать вставить хэш внутри 'receiverList' в консоль рельсов и посмотреть, что получилось в результате? Я думаю, что ваша проблема лежит там ;-) –
Спасибо. Я добавил хэш. Похоже, что что-то не в порядке :-) – Corstiaan