#ruby-on-rails #ruby #paypal #paypal-sandbox #paypal-rest-sdk
#ruby-on-rails #ruby #paypal #paypal-песочница #paypal-rest-sdk
Вопрос:
Я использую: Ruby 2.4, Rails 5.2.1, Paypal в режиме изолированной среды:
gem 'paypal-sdk-rest', '~> 1.7.3'
Оплата Paypal как:
items << {
:name => title,
:price => unit_price,
:currency => "USD",
:quantity => quantity,
:description => short_description
}
amount = {
:total => subtotal,
:currency => "USD",
:details => {"subtotal": subtotal, "shipping": "0", "tax": "0"}
}
invoice_number = "invoice-#{rand(1111..9999)}"
@payment = Payment.new({
:intent => "sale",
:payer => {
:payment_method => "paypal"},
:redirect_urls => {
:return_url => "http://localhost:3000/payments/#{order.id}/make_payment",
:cancel_url => "http://localhost:3000/"},
:transactions => [{
:item_list => {
:items => items,
},
:amount => amount,
:description => "Transaction description.",
:invoice_number => invoice_number
}]
})
Платеж создать как :
if @payment.create
render json: {success: true, paymentID: @payment.id}
else
@payment.error # Error Hash
render json: {success: false}
end
Захват платежей:
if payment.execute(payer_id: params[:payerID])
render json: {msg: 'payment_completed', result: 'completed', }
else
render json: {msg: payment.error, result: 'failed'}
end
Ответ №1:
Возврат: шаг 1: найдите объект оплаты PayPal в PayPal:
payment = PayPal::SDK::REST::Payment.find(order.paypal_id)
шаг 2: найдите транзакцию для этого платежа:
transaction = payment.transactions.last
Шаг 2: найдите ресурсы, связанные с этим платежом:
related_resource = transaction.related_resources.last
шаг 3: найдите форму объекта продажи paypal sdk:
sale = related_resource.sale
sale = Sale.find(sale.id)
Теперь приступайте к возврату:
refund = sale.refund({
:amount => {
:total => "1.31",
:currency => "USD"
}
})
if refund.success?
logger.info "Refund[#{refund.id}] Success"
render json: { result: 'success '}
else
logger.error refund.error.inspect
render json: { result: 'fail'}
end