Code Samples: Ruby
IMPORTANT! C# is our Official client and the only code that we support. This Ruby code has been provided by another customer; and we encourage you to let us know if you find any problems, so that we can update accordingly.
Sendfax Method
Fax.rb
require './doxipher.rb'
require 'faraday'
require 'pp'
require 'time'
require 'json'
USERNAME = "" #Enter Valid Username
APIKEY = "" # Enter Valid ApiKey
VECTOR = "x49e*wJVXr8BrALE"
ENCRYPTIONKEY = ""# Enter Valid EncryptionKey
FAX_SERVER_URL = "https://api.sfaxme.com"
#FAX_SERVER_URL = "http://127.0.0.1:5000" # for testing you can use `nc -k -l 5000` on the cmd
def get_token
timestr = Time.now.utc.iso8601()
raw = "Username=#{USERNAME}&ApiKey=#{APIKEY}&GenDT=#{timestr}"
dox = Doxipher.new(ENCRYPTIONKEY, {:base64=>true})
cipher = dox.encrypt(raw)
return cipher
end
def send_fax(fax_no, filename)
tid = nil
conn = Faraday.new(:url => FAX_SERVER_URL, :ssl => { :ca_file => 'C:/Ruby200/cacert.pem' } ) do |faraday|#Certificate required
#conn = Faraday.new(:url => FAX_SERVER_URL) do |faraday|# None SSL
faraday.request :multipart # checks for files in the payload, otherwise leaves everything untouched
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
#pp conn
token = get_token()
parts = ["sendfax?",
"token=#{CGI.escape(token)}",
"ApiKey=#{CGI.escape(APIKEY)}",
"RecipientFax=#{fax_no}",
"RecipientName=Gene",
"OptionalParams=&"
]
path = "/api/" + parts.join("&")
response = conn.post path do |req|
req.body = {}
req.body['file'] = Faraday::UploadIO.new(filename, 'application/pdf', 'test2.pdf')
end
pp response
end
filename = 'C:/temp/test2.pdf'
fax_no = ""#Enter a valid 11 digit US Fax Number
send_fax(fax_no, filename)
Returned response
body="{\"SendFaxQueueId\":\"9A4CEBC407C247419DCAAB1D3BE55D6A\",\"isSuccess\":true,\"message\":\"Fax is received and being processed\"}",
SendfaxStatus Method
Faxstatus.rb
require './doxipher.rb'
require 'faraday'
require 'pp'
require 'time'
USERNAME = ""# Enter a valid Username
APIKEY = ""# Enter a valid ApiKey
VECTOR = "x49e*wJVXr8BrALE"
ENCRYPTIONKEY = ""#Enter a valid encryptionkey
FAX_SERVER_URL = "https://api.sfaxme.com"
def get_token
timestr = Time.now.utc.iso8601()
raw = "Username=#{USERNAME}&ApiKey=#{APIKEY}&GenDT=#{timestr}"
dox = Doxipher.new(ENCRYPTIONKEY, {:base64=>true})
cipher = dox.encrypt(raw)
return cipher
end
def send_fax_status(faxid)
#faxid = nil
conn = Faraday.new(:url => FAX_SERVER_URL, :ssl => { :ca_file => 'C:/Ruby200/cacert.pem' } ) do |faraday|
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
#pp conn
token = get_token()
parts = ["sendfaxstatus?",
"token=#{CGI.escape(token)}",
"ApiKey=#{CGI.escape(APIKEY)}",
"SendFaxQueueId=#{faxid}" #Third
]
path = "/api/" + parts.join("&")
response = conn.get path do |req|
req.body = {}
end
pp response
end
faxid = ''# Enter a valid FaxId from the SendFax JSON response returned in the body as SendFaxQueueId
send_fax_status(faxid)
Returned Response
body= "{\"RecipientFaxStatusItems\":[],\"isSuccess\":true,\"message\":\"Processing fax request\"}",
Check the status every 3 minutes thereafter. A successful response is shown next
body="{\"RecipientFaxStatusItems\":[{\"SendFaxQueueId\":\"CB7BE649CDB54D399F753F381F48D950\",\"IsSuccess\":true,\"ResultCode\":0,\"ErrorCode\":0,\"ResultMessage\":\"OK\",\"RecipientName\":\"Gene\",\"RecipientFax\":\"15123668506\",\"TrackingCode\":\"\",\"FaxDateUtc\":\"2013-07-29T13:19:20Z\",\"FaxId\":2130729131840997919,\"Pages\":2,\"Attempts\":1}],\"isSuccess\":true,\"message\":\"Fax request is complete\"}",
ReceiveInboundFax Method
ReceiveInboundFax.rb
require './doxipher.rb'
require 'faraday'
require 'pp'
require 'time'
USERNAME = ""#Enter a valid username
APIKEY = ""#Enter a valid ApiKey
VECTOR = "x49e*wJVXr8BrALE"
ENCRYPTIONKEY = ""#Enter a valid encryptionkey
FAX_SERVER_URL = "https://api.sfaxme.com"
def get_token
timestr = Time.now.utc.iso8601()
raw = "Username=#{USERNAME}&ApiKey=#{APIKEY}&GenDT=#{timestr}"
dox = Doxipher.new(ENCRYPTIONKEY, {:base64=>true})
cipher = dox.encrypt(raw)
return cipher
end
def receive_inbound_fax(maxitems)
conn = Faraday.new(:url => FAX_SERVER_URL, :ssl => { :ca_file => 'C:/Ruby200/cacert.pem' } ) do |faraday|
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
#pp conn
token = get_token()
parts = ["receiveinboundfax?",
"token=#{CGI.escape(token)}",
"ApiKey=#{CGI.escape(APIKEY)}",
"StartDateUTC=#{}",
"EndDateUTC=#{}",
"MaxItems=#{maxitems}",
]
path = "/api/" + parts.join("&")
response = conn.get path do |req|
req.body = {}
end
pp response
end
startdate = ''# Enter a valid Start Date in UTC time
enddate = ''# Enter a valid End Date in UTC time to complete the date range criteria
maxitems = '500'#Enter a number from 1 to 500 to retrieve that number of results
receive_inbound_fax(maxitems)
Returned Response
body="{\"InboundFaxItems\":[{\"FaxId\":\"XXXXXXXXXXXXXXXXXXX\",\"Pages\":\"2\",\"ToFaxNumber\":\"15125314406\",\"FromFaxNumber\":\"5125314401\",\"FromCSID\":\"512.531.4401\",\"FaxDateUtc\":\"10/18/2012 2:56:04 PM\"},{\"FaxId\":\" XXXXXXXXXXXXXXXXXXX \",\"Pages\":\"2\",\"ToFaxNumber\":\"15125314407\",\"FromFaxNumber\":\"5125314401\",\"FromCSID\":\"512.531.4401\",\"FaxDateUtc\":\"10/18/2012 2:56:04 PM}],\"FaxCount\":101,\"LastWatermark\":\" XXXXXXXXXXXXXXXXXXX \",\"HasMoreItems\":\"false\",\"isSuccess\":true,\"message\":\"Success\"}",
Note: If there are more items to retrieve the HasMoreItems will be set to “true”.
DownloadInboundFaxAsPdf Method
DownloadInboundFaxAsPdf.rb
require './doxipher.rb'
require 'faraday'
require 'pp'
require 'time'
USERNAME = ""#Enter a valid Username
APIKEY = ""Enter a valid Apikey
VECTOR = "x49e*wJVXr8BrALE"
ENCRYPTIONKEY = ""#Enter a valid EncryptionKey
FAX_SERVER_URL = "https://api.sfaxme.com"
def get_token
timestr = Time.now.utc.iso8601()
raw = "Username=#{USERNAME}&ApiKey=#{APIKEY}&GenDT=#{timestr}"
dox = Doxipher.new(ENCRYPTIONKEY, {:base64=>true})
cipher = dox.encrypt(raw)
return cipher
end
def download_inbound_fax_as_pdf(faxid)
conn = Faraday.new(:url => FAX_SERVER_URL, :ssl => { :ca_file => 'C:/Ruby200/cacert.pem' } ) do |faraday|
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
end
token = get_token()
parts = ["downloadinboundfaxaspdf?",
"token=#{CGI.escape(token)}",
"ApiKey=#{CGI.escape(APIKEY)}",
"FaxId=#{faxid}"
]
path = "/api/" + parts.join("&")
response = conn.get path
a = response.body
File.open('C:/temp/2121206215127980253.pdf', 'wb') do |f|
f.write (a)
f.close
end
pp response
end
faxid = '2121206215127980253'#Enter a faxid from the ReceiveInboundFax list
download_inbound_fax_as_pdf(faxid)
DownloadInboundFaxAsTif Method
DownloadInboundFaxAsTif.rb
require './doxipher.rb'
require 'faraday'
require 'pp'
require 'time'
USERNAME = ""#Enter a valid Username
APIKEY = ""#Enter a valid ApiKey
VECTOR = "x49e*wJVXr8BrALE"
ENCRYPTIONKEY = ""#Enter a valid EncryptionKey
FAX_SERVER_URL = "https://api.sfaxme.com"
def get_token
timestr = Time.now.utc.iso8601()
raw = "Username=#{USERNAME}&ApiKey=#{APIKEY}&GenDT=#{timestr}"
dox = Doxipher.new(ENCRYPTIONKEY, {:base64=>true})
cipher = dox.encrypt(raw)
return cipher
end
def download_inbound_fax_as_tif(faxid)
conn = Faraday.new(:url => FAX_SERVER_URL, :ssl => { :ca_file => 'C:/Ruby200/cacert.pem' } ) do |faraday|
#conn = Faraday.new(:url => FAX_SERVER_URL) do |faraday|
faraday.request :url_encoded # form-encode POST params
faraday.response :logger # log requests to STDOUT
faraday.adapter :net_http
end
token = get_token()
parts = ["downloadinboundfaxastif?",
"token=#{CGI.escape(token)}",
"ApiKey=#{CGI.escape(APIKEY)}",
"FaxId=#{faxid}"
]
path = "/api/" + parts.join("&")
response = conn.get path
a = response.body
File.open('C:/temp/2121206215127980253.tif', 'wb') do |f|
#a.each do | byte |
f.write (a)
f.close
end
pp response
end
faxid = '2121206215127980253'#Enter a faxid from the ReceiveInboundFax list
download_inbound_fax_as_tif(faxid)
AES Encryption
doxifer.rb
require 'openssl'
require "base64"
class Doxipher
#:iv => #Pass in a 16 byte value. Defaults to 16 0 bytes which is not good. class Doxipher
def initialize( key, options = {} )
@base64 = options[:base64] || false
@key = key.clone
#@iv = options[:iv] || "\0" * 16
@iv = 'x49e*wJVXr8BrALE'
end
def encrypt( plain = nil, &block )
if @base64
Base64.encode64( cipher( plain, false, &block ))
else
cipher( plain, false, &block )
end
end
def decrypt( cipher_text = nil, &block )
cipher(cipher_text, true, &block)
end
def <<( data)
@data << @cipher.update( decode_if_needed(data) )
end
private
def decode_if_needed(data)
@base64 && @decrypt ? Base64.decode64(data) : data
end
def cipher( data = nil, _decrypt = false, &block )
@decrypt = _decrypt
@cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc')
if _decrypt
@cipher.decrypt
else
@cipher.encrypt
end
@cipher.key = @key
@cipher.iv = @iv
if block_given?
@data = ''
block.call self
else
@data = @cipher.update decode_if_needed(data) rescue nil
@data = data if @data.nil?
end
@data << @cipher.final
@data
end
end