63 lines
1.8 KiB
Ruby
63 lines
1.8 KiB
Ruby
# scripts/simulate_pix_webhook.rb
|
|
require 'net/http'
|
|
require 'json'
|
|
require 'uri'
|
|
|
|
# 1. Find the most recent pending Pix Charge
|
|
puts '🔍 Searching for the latest pending Pix Charge...'
|
|
latest_charge = Captain::PixCharge.where(status: 'active').order(created_at: :desc).first
|
|
|
|
unless latest_charge
|
|
puts '❌ No pending Pix Charge found.'
|
|
puts ' Please create a reservation/booking first in the app.'
|
|
exit
|
|
end
|
|
|
|
puts '✅ Found Charge!'
|
|
puts " ID: #{latest_charge.id}"
|
|
puts " TxID: #{latest_charge.txid}"
|
|
puts " Reservation ID: #{latest_charge.reservation_id}"
|
|
puts " Amount: #{latest_charge.original_value}"
|
|
|
|
puts "\n--------------------------------------------------"
|
|
puts '⚠️ Simulating Payment from Banco Inter...'
|
|
puts '--------------------------------------------------'
|
|
|
|
# 2. Construct the Webhook Payload
|
|
# Matches structure expected by WebhooksController#inter_pix
|
|
payload = {
|
|
pix: [
|
|
{
|
|
txid: latest_charge.txid,
|
|
e2eId: "E2E#{SecureRandom.hex(16)}",
|
|
valor: latest_charge.original_value.to_s,
|
|
horario: Time.now.iso8601,
|
|
infoPagador: 'Simulated Payer'
|
|
}
|
|
]
|
|
}
|
|
|
|
# 3. Send POST request to local endpoint
|
|
uri = URI.parse('http://localhost:3000/api/v1/captain/webhooks/inter_pix')
|
|
header = { 'Content-Type': 'application/json' }
|
|
|
|
# Create the HTTP object
|
|
http = Net::HTTP.new(uri.host, uri.port)
|
|
request = Net::HTTP::Post.new(uri.request_uri, header)
|
|
request.body = payload.to_json
|
|
|
|
begin
|
|
response = http.request(request)
|
|
|
|
if response.code == '200'
|
|
puts '🚀 Webhook sent successfully! (Status: 200)'
|
|
puts "✅ App should now update the UI to 'Confirmed' and show confetti."
|
|
else
|
|
puts "❌ Webhook failed. Status: #{response.code}"
|
|
puts " Body: #{response.body}"
|
|
end
|
|
rescue Errno::ECONNREFUSED
|
|
puts '❌ Could not connect to localhost:3000.'
|
|
puts ' Is the Rails server running?'
|
|
end
|