Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.50 KB | None | 0 0
  1. def perform(stripe_event, *args)
  2. if stripe_event.event_type != "transfer.paid"
  3. logger.error "Event was not of type transfer.paid!"
  4. return
  5. end
  6. if stripe_event.data['object']['reversed']
  7. logger.error "Event shows the transfer was reversed!!"
  8. return
  9. end
  10. if stripe_event.data['object']['status'] != 'paid'
  11. logger.error "Event does not have a paid status!"
  12. return
  13. end
  14.  
  15. # Figure out the seller from the event's bank account
  16. seller = Seller.where('bank_accounts ? :bank_id', { bank_id: stripe_event.data['object']['bank_account']['id'] }).first
  17.  
  18. if seller.present?
  19. seller.transaction do
  20. # Make sure recent orders have the most recent references
  21. seller.orders.where('created_at > ?', Time.zone.now - 15.days).each do |o|
  22. o.update_stripe_references
  23. end
  24.  
  25. # Grab the orders that are part of the transfer
  26. orders = []
  27. tnxs = Stripe::BalanceTransaction.all({
  28. transfer: stripe_event.stripe_object_id,
  29. limit:100
  30. },
  31. {
  32. api_key: seller.stripe_account_secret,
  33. })
  34. tnxs.data.each do |txn|
  35. Order.with_payment_id(txn.source).each do |o|
  36. if o.present?
  37. # Store the transfer id with the order
  38. o.stripe_references[:transfers] ||= []
  39. o.stripe_references[:transfers] = (o.stripe_references[:transfers] + [stripe_event.stripe_object_id]).uniq
  40. o.save!
  41. orders << o.id
  42. end
  43. end
  44. end
  45.  
  46. s = SellerTransaction.new
  47. s.seller_id = seller.id
  48. s.ref = stripe_event.stripe_object_id
  49.  
  50. #These lines are not appearing on the invoice for certain customers.
  51. s.description = "Transfer to #{stripe_event.data['object']['bank_account']['bank_name']} (***#{stripe_event.data['object']['bank_account']['last4']}) Orders #{orders}"
  52. s.debit = Money.new(stripe_event.data['object']['amount'], stripe_event.data['object']['currency'])
  53. s.save!
  54. end
  55.  
  56.  
  57. else
  58. logger.error "ERROR: Unable to find Seller!"
  59. return
  60. end
  61. end
  62.  
  63. def update_stripe_references
  64. self.payments.each do |p|
  65. if p.has_key?('charge_id')
  66. ch = Stripe::Charge.retrieve(p['charge_id'])
  67. next if ch['transfer'].nil?
  68.  
  69. tr = Stripe::Transfer.retrieve(ch.transfer)
  70. payments = self.stripe_references[:payments] || []
  71. payments.push(tr.destination_payment)
  72.  
  73. p['payment_id'] = tr.destination_payment
  74.  
  75. self.stripe_references[:payments] = payments.uniq
  76.  
  77. transfers = self.stripe_references[:transfers] || []
  78. transfers.push(tr.id)
  79. self.stripe_references[:transfers] = transfers.uniq
  80. end
  81. end
  82. self.save!
  83. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement