chatwoot-develop/scripts/simulate_pix_webhook.rb
2026-01-12 19:04:15 -03:00

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