class NFGClient::Client

Public Class Methods

new(partner_id, partner_password, partner_source, partner_campaign, use_sandbox) click to toggle source
# File lib/nfg-client/client.rb, line 10
def initialize(partner_id, partner_password, partner_source, partner_campaign, use_sandbox)
  @partner_id = partner_id
  @partner_password = partner_password
  @partner_source = partner_source
  @partner_campaign = partner_campaign
  @use_sandbox = use_sandbox
end

Public Instance Methods

create_cof(params) click to toggle source

Creates a card on file for the given donor token

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 22
def create_cof(params)
  requires!(params, :DonorToken, :DonorFirstName, :DonorLastName, :DonorEmail, :DonorAddress1, :DonorAddress2, :DonorCity, :DonorState, :DonorZip, :DonorCountry, :DonorPhone, :CardType, :NameOnCard, :CardNumber, :ExpMonth, :ExpYear, :CSC)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('CreateCOF', call_params)
  if response.is_a? REXML::Element
    {
      'StatusCode' => response.elements['StatusCode'].get_text.to_s,
      'Message' => response.elements['Message'].get_text.to_s,
      'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
      'CallDuration' => response.elements['CallDuration'].get_text.to_s,
      'DonorToken' => response.elements['DonorToken'].get_text.to_s,
      'COFId' => response.elements['CofId'].get_text.to_s
    }
  else
    response
  end
end
delete_donor_cof(params) click to toggle source

Deletes a card on file for the given donor token

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 44
def delete_donor_cof(params)
  requires!(params, :DonorToken, :COFId)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('DeleteDonorCOF', call_params)
  if response.is_a? REXML::Element
    if response.elements['StatusCode'].get_text.to_s == 'Success'
      {
        'StatusCode' => response.elements['StatusCode'].get_text.to_s,
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
        'CallDuration' => response.elements['CallDuration'].get_text.to_s
      }
    else
      {
        'StatusCode' => response.elements['StatusCode'].get_text.to_s,
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => {
          'ErrorInfo' => {
            'ErrCode' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrCode'].andand.get_text.andand.to_s,
            'ErrData' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrData'].andand.get_text.andand.to_s
          }
        },
        'CallDuration' => response.elements['CallDuration'].get_text.to_s
      }
    end
  else
    response
  end
end
get_donation_report(params) click to toggle source

Retrieves the donation history by date

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 264
def get_donation_report(params)
  requires!(params, :StartDate, :EndDate, :DonationReportType)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('GetDonationReport', call_params)
  if response.is_a? REXML::Element
    response_hash = {
      'StatusCode' => response.elements['StatusCode'].get_text.to_s,
      'Message' => response.elements['Message'].get_text.to_s,
      'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
      'CallDuration' => response.elements['CallDuration'].get_text.to_s,
      'ReturnCount' => response.elements['ReturnCount'].get_text.to_s
    }
    response_hash['ReportResults'] = Array.new
    response.elements.each('ReportResults/DonationReportResult') do |donation|
      response_hash['ReportResults'] << {
        'Source' => donation.elements['Source'].get_text.to_s,
        'Campaign' => donation.elements['Campaign'].get_text.to_s,
        'ChargeId' => donation.elements['ChargeId'].get_text.to_s,
        'ShareWithCharity' => donation.elements['ShareWithCharity'].get_text.to_s,
        'DonorEmail' => donation.elements['DonorEmail'].get_text.to_s,
        'DonorFirstName' => donation.elements['DonorFirstName'].get_text.to_s,
        'DonorLastName' => donation.elements['DonorLastName'].get_text.to_s,
        'DonorAddress1' => donation.elements['DonorAddress1'].get_text.to_s,
        'DonorAddress2' => donation.elements['DonorAddress2'].get_text.to_s,
        'DonorCity' => donation.elements['DonorCity'].get_text.to_s,
        'DonorState' => donation.elements['DonorState'].get_text.to_s,
        'DonorZip' => donation.elements['DonorZip'].get_text.to_s,
        'DonorCountry' => donation.elements['DonorCountry'].get_text.to_s,
        'DonorPhone' => donation.elements['DonorPhone'].get_text.to_s,
        'Designation' => donation.elements['Designation'].get_text.to_s,
        'DonateInName' => donation.elements['DonateInName'].get_text.to_s,
        'RecurringPeriod' => donation.elements['RecurringPeriod'].get_text.to_s,
        'EventDate' => donation.elements['EventDate'].get_text.to_s,
        'NpoEIN' => donation.elements['NpoEIN'].get_text.to_s,
        'NpoName' => donation.elements['NpoName'].get_text.to_s,
        'ChargeStatus' => donation.elements['ChargeStatus'].get_text.to_s,
        'ChargeAmount' => donation.elements['ChargeAmount'].get_text.to_s,
        'NpoTPC' => donation.elements['NpoTPC'].get_text.to_s,
        'DonationItemAmount' => donation.elements['DonationItemAmount'].get_text.to_s,
        'TotalDonationAmount' => donation.elements['TotalDonationAmount'].get_text.to_s,
        'HistoryRecordId' => donation.elements['HistoryRecordId'].get_text.to_s
      }
    end
    response_hash
  else
    response
  end
end
get_donor_cofs(params) click to toggle source

Gets a list of the given donor token’s cards on file

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 78
def get_donor_cofs(params)
  requires!(params, :DonorToken)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('GetDonorCOFs', call_params)
  if response.is_a? REXML::Element
    response_hash = {
      'StatusCode' => response.elements['StatusCode'].get_text.to_s,
      'Message' => response.elements['Message'].get_text.to_s,
      'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
      'CallDuration' => response.elements['CallDuration'].get_text.to_s,
      'DonorToken' => response.elements['DonorToken'].get_text.to_s
    }
    response_hash['Cards'] = Array.new
    response.elements.each('Cards/COFRecord') do |card|
      response_hash['Cards'] << {
        'COFId' => card.elements['COFId'].get_text.to_s,
        'CardType' => card.elements['CardType'].get_text.to_s,
        'CCSuffix' => card.elements['CCSuffix'].get_text.to_s,
        'CCExpMonth' => card.elements['CCExpMonth'].get_text.to_s,
        'CCExpYear' => card.elements['CCExpYear'].get_text.to_s,
        'bInUseByLiveRD' => card.elements['bInUseByLiveRD'].get_text.to_s,
        'COFEmailAddress' => card.elements['COFEmailAddress'].get_text.to_s
      }
    end
    response_hash
  else
    response
  end
end
get_donor_donation_history(params) click to toggle source

Retrieves the donation history for a specified donor token

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 229
def get_donor_donation_history(params)
  requires!(params, :DonorToken)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('GetDonorDonationHistory', call_params)
  if response.is_a? REXML::Element
    response_hash = {
      'StatusCode' => response.elements['StatusCode'].get_text.to_s,
      'Message' => response.elements['Message'].get_text.to_s,
      'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
      'CallDuration' => response.elements['CallDuration'].get_text.to_s,
      'DonorToken' => response.elements['DonorToken'].get_text.to_s
    }
    response_hash['Donations'] = Array.new
    response.elements.each('Donations/DonationItemData') do |donation|
      response_hash['Donations'] << {
        'DonationDate' => donation.elements['DonationDate'].get_text.to_s,
        'RecurType' => donation.elements['RecurType'].get_text.to_s,
        'IsTpcAddOnFee' => donation.elements['IsTpcAddOnFee'].get_text.to_s,
        'NpoName' => donation.elements['NpoName'].get_text.to_s,
        'Designation' => donation.elements['Designation'].get_text.to_s,
        'Dedication' => donation.elements['Dedication'].get_text.to_s,
        'Amount' => donation.elements['Amount'].get_text.to_s,
        'ChargeId' => donation.elements['ChargeId'].get_text.to_s,
      }
    end
    response_hash
  else
    response
  end
end
get_fee(params) click to toggle source

Calculates fee tied to transaction

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 112
def get_fee(params)
  requires!(params, :DonationLineItems, :TipAmount, :CardType)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('GetFee', call_params)
  if response.is_a? REXML::Element
    if response.elements['ErrorDetails'].elements['ErrorInfo'].nil?
      {
        'StatusCode' => 'Success',
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
        'CallDuration' => response.elements['CallDuration'].get_text.to_s,
        'TotalChargeAmount' => response.elements['TotalChargeAmount'].get_text.to_s,
        'TotalAddFee' => response.elements['TotalAddFee'].get_text.to_s,
        'TotalDeductFee' => response.elements['TotalDeductFee'].get_text.to_s,
        'TipAmount' => response.elements['TipAmount'].get_text.to_s
      }
    else
      {
        'StatusCode' => 'ValidationFailed',
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => {
          'ErrorInfo' => {
            'ErrCode' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrCode'].andand.get_text.andand.to_s,
            'ErrData' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrData'].andand.get_text.andand.to_s
          }
        },
        'CallDuration' => response.elements['CallDuration'].get_text.to_s,
        'TotalChargeAmount' => response.elements['TotalChargeAmount'].get_text.to_s,
        'TotalAddFee' => response.elements['TotalAddFee'].get_text.to_s,
        'TotalDeductFee' => response.elements['TotalDeductFee'].get_text.to_s,
        'TipAmount' => response.elements['TipAmount'].get_text.to_s
      }
    end
  else
    response
  end
end
make_cof_donation(params) click to toggle source

Makes a donation using the given COF

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 153
def make_cof_donation(params)
  requires!(params, :DonationLineItems, :TotalAmount, :TipAmount, :DonorIpAddress, :DonorToken, :COFId)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('MakeCOFDonation', call_params)
  if response.is_a? REXML::Element
    if response.elements['StatusCode'].get_text.to_s == 'Success'
      {
        'StatusCode' => response.elements['StatusCode'].get_text.to_s,
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
        'CallDuration' => response.elements['CallDuration'].get_text.to_s,
        'ChargeId' => response.elements['ChargeId'].get_text.to_s,
        'COFId' => response.elements['CofId'].get_text.to_s
      }
    else
      {
        'StatusCode' => response.elements['StatusCode'].get_text.to_s,
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => {
          'ErrorInfo' => {
            'ErrCode' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrCode'].andand.get_text.andand.to_s,
            'ErrData' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrData'].andand.get_text.andand.to_s
          }
        },
        'CallDuration' => response.elements['CallDuration'].get_text.to_s,
        'ChargeId' => response.elements['ChargeId'].get_text.to_s,
        'COFId' => response.elements['CofId'].get_text.to_s
      }
    end
  else
    response
  end
end
make_donation_add_cof(params) click to toggle source

Makes a donation and stores a COF for the given donor token

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 191
def make_donation_add_cof(params)
  requires!(params, :DonationLineItems, :TotalAmount, :TipAmount, :DonorIpAddress, :DonorToken, :DonorFirstName, :DonorLastName, :DonorEmail, :DonorAddress1, :DonorAddress2, :DonorCity, :DonorState, :DonorZip, :DonorCountry, :DonorPhone, :CardType, :NameOnCard, :CardNumber, :ExpMonth, :ExpYear, :CSC)
  call_params = add_credentials_to_params(params)
  response = nfg_soap_request('MakeDonationAddCOF', call_params)
  if response.is_a? REXML::Element
    if (response.elements['StatusCode'].get_text.to_s == 'Success') || ((response.elements['StatusCode'].get_text.to_s != 'Success') && response.elements['ErrorDetails'].elements['ErrorInfo'].nil?)
      {
        'StatusCode' => response.elements['StatusCode'].get_text.to_s,
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => response.elements['ErrorDetails'].get_text.to_s,
        'CallDuration' => response.elements['CallDuration'].get_text.to_s,
        'ChargeId' => response.elements['ChargeId'].get_text.to_s,
        'COFId' => response.elements['CofId'].get_text.to_s
      }
    else
      {
        'StatusCode' => response.elements['StatusCode'].get_text.to_s,
        'Message' => response.elements['Message'].get_text.to_s,
        'ErrorDetails' => {
          'ErrorInfo' => {
            'ErrCode' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrCode'].andand.get_text.andand.to_s,
            'ErrData' => response.elements['ErrorDetails'].andand.elements.andand['ErrorInfo'].andand.elements.andand['ErrData'].andand.get_text.andand.to_s
          }
        },
        'CallDuration' => response.elements['CallDuration'].get_text.to_s,
        'ChargeId' => response.elements['ChargeId'].get_text.to_s,
        'COFId' => response.elements['CofId'].get_text.to_s
      }
    end
  else
    response
  end
end

Private Instance Methods

add_credentials_to_params(params) click to toggle source

Adds client credentials to hash of parameters

Arguments:

params: (Hash)
# File lib/nfg-client/client.rb, line 319
def add_credentials_to_params(params)
  return params unless params.is_a? Hash
  credentials = {
    'PartnerID' => @partner_id,
    'PartnerPW' => @partner_password,
    'PartnerSource' => @partner_source,
    'PartnerCampaign' => @partner_campaign
  }
  credentials.merge(params)
end