class Gemgento::API::SOAP::Authnetcim::Payment
Public Class Methods
create(saved_credit_card)
click to toggle source
Create a new saved payment method for a customer
@param saved_credit_card [Gemgento::SavedCreditCard] @return [Gemgento::MagentoResponse]
# File lib/gemgento/api/soap/authnetcim/payment.rb, line 32 def self.create(saved_credit_card) message = { customer_id: saved_credit_card.user.magento_id, payment: { firstname: saved_credit_card.address.first_name, lastname: saved_credit_card.address.last_name, address1: saved_credit_card.address.street, city: saved_credit_card.address.city, state: saved_credit_card.address.region.magento_id, zip: saved_credit_card.address.postcode, country: saved_credit_card.address.country.iso2_code, 'cc_type' => saved_credit_card.cc_type, 'cc_number' => saved_credit_card.cc_number, 'cc_exp_month' => saved_credit_card.exp_month, 'cc_exp_year' => saved_credit_card.exp_year } } MagentoApi.create_call(:authnetcim_payment_create, message) end
destroy(customer_id, payment_profile_id)
click to toggle source
Destroy a saved payment method for a customer.
@param customer_id [Integer] Magento customer id. @param payment_profile_id [String] @return [Gemgento::MagentoResponse]
# File lib/gemgento/api/soap/authnetcim/payment.rb, line 58 def self.destroy(customer_id, payment_profile_id) message = { customer_id: customer_id, payment_profile_id: payment_profile_id } MagentoApi.create_call(:authnetcim_payment_destroy, message) end
fetch(user)
click to toggle source
Fetch and sync all user saved credit cards.
@param user [Gemgento::User] @return [Void]
# File lib/gemgento/api/soap/authnetcim/payment.rb, line 70 def self.fetch(user) saved_cards = [] response = list(user.magento_id) if response.success? response.body[:response][:item].each do |saved_card| saved_cards << sync_magento_to_local(user, saved_card) end end SavedCreditCard.skip_callback(:destroy, :before, :magento_destroy) user.saved_credit_cards.reload user.saved_credit_cards.where.not(id: saved_cards.map(&:id)).destroy_all SavedCreditCard.set_callback(:destroy, :before, :magento_destroy) end
list(customer_id)
click to toggle source
Get a list of saved payment methods for customer.
@param customer_id [Integer] Magento customer id. @return [Gemgento::MagentoResponse]
# File lib/gemgento/api/soap/authnetcim/payment.rb, line 11 def self.list(customer_id) response = MagentoApi.create_call(:authnetcim_payment_list, { customer_id: customer_id }) # filter and enforce the array of cards on success if response.success? if response.body[:response].nil? response.body[:response] = {item: []} elsif response.body[:response][:item].nil? response.body[:response][:item] = [] elsif !response.body[:response][:item].is_a? Array response.body[:response][:item] = [response.body[:response][:item]] end end return response end
Private Class Methods
sync_magento_to_local(user, saved_card_params)
click to toggle source
Sync a Magento saved credit card with a local one.
@param user [Gemgento::User] @param saved_card_params [Hash] @return [Gemgento::SavedCreditCard]
# File lib/gemgento/api/soap/authnetcim/payment.rb, line 93 def self.sync_magento_to_local(user, saved_card_params) SavedCreditCard.skip_callback(:create, :before, :magento_create) saved_credit_card = SavedCreditCard.find_or_initialize_by( user: user, token: saved_card_params[:customer_payment_profile_id] ) saved_credit_card.cc_number = saved_card_params[:payment][:credit_card][:card_number] saved_credit_card saved_credit_card.save SavedCreditCard.set_callback(:create, :before, :magento_create) # address / bill_to data address = ::Gemgento::Address.find_or_initialize_by(addressable: saved_credit_card) address.first_name = saved_card_params[:bill_to][:first_name] address.last_name = saved_card_params[:bill_to][:last_name] address.street = saved_card_params[:bill_to][:address] address.city = saved_card_params[:bill_to][:city] address.country = ::Gemgento::Country.find_by(iso2_code: saved_card_params[:bill_to][:country]) address.postcode = saved_card_params[:bill_to][:zip] if address.country.regions.any? address.region = address.country.regions.find_by(name: saved_card_params[:bill_to][:state]) end address.save validate: false return saved_credit_card end