Project

sat_mx

0.0
A long-lived project that still receives updates
connect to SAT web services in a simple and productive way
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.9
~> 1.4
~> 0.9
~> 3.24

Runtime

~> 1.3
< 1.0
 Project Readme

SatMx

Ruby client for SAT (Mexican Tax Administration) web services to download CFDI invoices.

Installation

gem install sat_mx

Or add to your Gemfile:

gem "sat_mx"

Configuration

SatMx.configure do |config|
  config[:certificate] = "path/to/certificate.cer"
  config[:private_key] = "path/to/private.key"
  config[:password] = "key_password"
end

Usage

# 1. Authenticate
result = SatMx.authenticate
raise "Auth failed" unless result.success?

token = result.value

# 2. Request download of received CFDI
result = SatMx.download_request_received(
  start_date: Time.new(2024, 1, 1),
  end_date: Time.new(2024, 1, 31),
  request_type: :cfdi,
  recipient_rfc: "ABC010101ABC",
  requester_rfc: "ABC010101ABC",
  issuing_rfc: "XYZ020202XYZ",
  document_status: "Vigente",
  access_token: token
)
raise "Request failed" unless result.success?

request_id = result.value

# 3. Verify status (poll until ready)
loop do
  result = SatMx.verify_request(
    request_id: request_id,
    requester_rfc: "ABC010101ABC",
    access_token: token
  )

  case result.value[:request_status]
  when :finished
    break result.value[:package_ids]
  when :error, :rejected, :expired
    raise "Request failed: #{result.value}"
  end

  sleep 5
end

# 4. Download packages
package_ids.each do |package_id|
  result = SatMx.download_petition(
    package_id: package_id,
    requester_rfc: "ABC010101ABC",
    access_token: token
  )

  File.write("#{package_id}.zip", result.value) if result.success?
end

API

Method Description
SatMx.configure Configure certificate and private key
SatMx.configuration Get current configuration
SatMx.authenticate Get access token
SatMx.download_request_received Request download of received CFDI
SatMx.verify_request Check request status
SatMx.download_petition Download package

All methods return a Result object with:

  • success? - Boolean indicating success
  • value - Data on success, error hash {:cod_estatus, :mensaje} on failure
  • xml - Raw XML response

License

MIT