Class: Parsbank::TransactionVerify
- Inherits:
-
Object
- Object
- Parsbank::TransactionVerify
- Defined in:
- lib/parsbank/transaction_verify.rb
Class Method Summary collapse
- .fetch_amounts(args) ⇒ Object
- .fetch_bank(args) ⇒ Object
- .generate_callback_url(bank, _description) ⇒ Object
- .initialize_transaction(args, description, fiat_amount, crypto_amount, bank, callback_url) ⇒ Object
- .process_bscbitcoin(transaction, description, crypto_amount, args) ⇒ Object
- .process_gateway(bank, transaction, description, callback_url, crypto_amount, fiat_amount, args) ⇒ Object
- .process_mellat(transaction, description, callback_url, fiat_amount) ⇒ Object
- .process_zarinpal(transaction, description, callback_url, fiat_amount) ⇒ Object
- .process_zibal(description, callback_url, fiat_amount) ⇒ Object
- .validate_amounts(bank, crypto_amount, fiat_amount, real_amount) ⇒ Object
- .validate_bank(bank) ⇒ Object
- .validate_params(params) ⇒ Object
- .verify(args = {}) ⇒ Object
Class Method Details
.fetch_amounts(args) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/parsbank/transaction_verify.rb', line 34 def self.fetch_amounts(args) [ args.fetch(:crypto_amount, nil), args.fetch(:fiat_amount, nil), args.fetch(:real_amount, nil) ] end |
.fetch_bank(args) ⇒ Object
20 21 22 |
# File 'lib/parsbank/transaction_verify.rb', line 20 def self.fetch_bank(args) args.fetch(:bank) end |
.generate_callback_url(bank, _description) ⇒ Object
29 30 31 32 |
# File 'lib/parsbank/transaction_verify.rb', line 29 def self.generate_callback_url(bank, _description) selected_bank = Parsbank.available_gateways_list[bank] "#{selected_bank['callback_url'] || Parsbank.configuration.callback_url}&bank_name=#{bank}" end |
.initialize_transaction(args, description, fiat_amount, crypto_amount, bank, callback_url) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/parsbank/transaction_verify.rb', line 56 def self.initialize_transaction(args, description, fiat_amount, crypto_amount, bank, callback_url) model_class = Parsbank.configuration.model || 'Transaction' @transaction = Object.const_get(model_class).new( description: description, amount: fiat_amount || crypto_amount, gateway: bank, callback_url: callback_url, status: 'start', user_id: args.fetch(:user_id, nil), cart_id: args.fetch(:cart_id, nil), local_id: args.fetch(:local_id, nil), ip: args.fetch(:ip, nil) ) @transaction.save @transaction end |
.process_bscbitcoin(transaction, description, crypto_amount, args) ⇒ Object
126 127 128 129 130 131 132 133 |
# File 'lib/parsbank/transaction_verify.rb', line 126 def self.process_bscbitcoin(transaction, description, crypto_amount, args) bscbitcoin = Parsbank::BscBitcoin.new( additional_data: description ) convert_real_amount_to_assets if crypto_amount.nil? && args.key?(:real_amount) @result = bscbitcoin.generate_payment_address(amount: crypto_amount) transaction.update!(gateway_response: @result, unit: 'bitcoin') end |
.process_gateway(bank, transaction, description, callback_url, crypto_amount, fiat_amount, args) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/parsbank/transaction_verify.rb', line 74 def self.process_gateway(bank, transaction, description, callback_url, crypto_amount, fiat_amount, args) case bank when 'mellat' process_mellat(transaction, description, callback_url, fiat_amount) when 'zarinpal' process_zarinpal(transaction, description, callback_url, fiat_amount) when 'zibal' process_zibal(description, callback_url, fiat_amount) when 'bscbitcoin' process_bscbitcoin(transaction, description, crypto_amount, args) else raise "Unsupported gateway: #{bank}" end end |
.process_mellat(transaction, description, callback_url, fiat_amount) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/parsbank/transaction_verify.rb', line 89 def self.process_mellat(transaction, description, callback_url, fiat_amount) mellat = Parsbank::Mellat.new( amount: fiat_amount, additional_data: description, callback_url: callback_url, orderId: transaction.id ) mellat.call transaction.update!(gateway_response: mellat.response, unit: 'irr') @result = mellat.redirect_form end |
.process_zarinpal(transaction, description, callback_url, fiat_amount) ⇒ Object
101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/parsbank/transaction_verify.rb', line 101 def self.process_zarinpal(transaction, description, callback_url, fiat_amount) zarinpal = Parsbank::Zarinpal.new( amount: fiat_amount, additional_data: description, callback_url: callback_url ) zarinpal.call transaction.update!( gateway_response: zarinpal.response, track_id: zarinpal.ref_id, unit: 'irt' ) @result = zarinpal.redirect_form end |
.process_zibal(description, callback_url, fiat_amount) ⇒ Object
116 117 118 119 120 121 122 123 124 |
# File 'lib/parsbank/transaction_verify.rb', line 116 def self.process_zibal(description, callback_url, fiat_amount) zibal = Parsbank::Zibal.new( amount: fiat_amount, additional_data: description, callback_url: callback_url ) zibal.call @result = zibal.redirect_form end |
.validate_amounts(bank, crypto_amount, fiat_amount, real_amount) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/parsbank/transaction_verify.rb', line 42 def self.validate_amounts(bank, crypto_amount, fiat_amount, real_amount) raise 'Amount fields are empty: crypto_amount OR fiat_amount OR real_amount' if [crypto_amount, fiat_amount, real_amount].all?(&:nil?) = $SUPPORTED_PSP[bank]['tags'] if .include?('crypto') && crypto_amount.nil? && real_amount.nil? raise "#{bank} needs crypto_amount or real_amount" end return unless .include?('rial') && fiat_amount.nil? && real_amount.nil? raise "#{bank} needs fiat_amount or real_amount" end |
.validate_bank(bank) ⇒ Object
24 25 26 27 |
# File 'lib/parsbank/transaction_verify.rb', line 24 def self.validate_bank(bank) selected_bank = Parsbank.available_gateways_list[bank] raise "Bank not enabled or not exists in #{Parsbank.configuration.secrets_path}: #{bank}" unless selected_bank end |
.validate_params(params) ⇒ Object
14 15 16 17 18 |
# File 'lib/parsbank/transaction_verify.rb', line 14 def self.validate_params(params) model_class = Parsbank.configuration.model || 'Transaction' tack_transaction = Object.const_get(model_class).find(params[:transaction_id].to_i) { status: 404, message: I18n.t('model.not_found') } unless tack_transaction.present? end |
.verify(args = {}) ⇒ Object
5 6 7 8 9 10 11 12 |
# File 'lib/parsbank/transaction_verify.rb', line 5 def self.verify(args = {}) validate_params(args.params) transaction = initialize_transaction(args, description, fiat_amount, crypto_amount, bank, callback_url) process_gateway(bank, transaction, description, callback_url, crypto_amount, fiat_amount, args) { transaction: transaction, html_form: @result } end |