class GmoPayment::Client::Request
Attributes
called_method[R]
@!attribute [r] called_method
Public Class Methods
new(called_method, args)
click to toggle source
@param [Symbol] called_method
@param [Hash] args
# File lib/gmo_payment/client/request.rb, line 9 def initialize(called_method, args) @called_method = called_method input = args.each_with_object({}) do |(k, v), hash| key = k.to_s.downcase.to_sym value = case key when :job_cd v.to_s.upcase when :amount, :card_seq, :default_flag, :method, :pay_times, :seq_mode, :tax, :td_flag, :timeout v.to_i.to_s else v.to_s end hash[key] = value end [:site_id, :site_pass, :shop_id, :shop_pass].each do |key| if all_items.include?(key) input[key] ||= GmoPayment::Configure.__send__(key) || ENV[GmoPayment::GLOSSARY[key]] end end @input = input.reject { |_, v| v.nil? } @missing_items = self.missing_items @invalid_items = self.invalid_items end
Public Instance Methods
body()
click to toggle source
Request
body.
@return [String, nil]
# File lib/gmo_payment/client/request.rb, line 101 def body body_hash = @input.each_with_object({}) do |(k, v), hash| next unless (key = GmoPayment::GLOSSARY[k]) && all_items.include?(k) hash[key] = k == :td_tenant_name ? encode_euc_base64(v) : encode_sjis(v) end body = ::URI.encode_www_form(body_hash) body.empty? ? nil : body end
invalid?()
click to toggle source
Whether to have invalid items or not.
@return [Bloolean]
# File lib/gmo_payment/client/request.rb, line 94 def invalid? !invalid_items.empty? end
invalid_items()
click to toggle source
Validate to have invalid items.
@return [Hash]
# File lib/gmo_payment/client/request.rb, line 72 def invalid_items return @invalid_items if @invalid_items items = @input.select { |k, v| validate_invalid?(k, v) if all_items.include?(k) } case @called_method when :entry_tran, :re_exec_tran, :change_tran unless (1..9_999_999).include?(@input[:amount].to_i + @input[:tax].to_i) items[:amount] = @input[:amount] if @input[:amount] items[:tax] = @input[:tax] if @input[:tax] end when :entry_tran_btc unless (1..300_000).include?(@input[:amount].to_i + @input[:tax].to_i) items[:amount] = @input[:amount] if @input[:amount] items[:tax] = @input[:tax] if @input[:tax] end end @invalid_items = items end
missing?()
click to toggle source
Whether to have missing items or not.
@return [Boolean]
# File lib/gmo_payment/client/request.rb, line 65 def missing? !missing_items.empty? end
missing_items()
click to toggle source
Check missing items.
@return [Array]
# File lib/gmo_payment/client/request.rb, line 40 def missing_items return @missing_items if @missing_items array = case @called_method when :entry_tran if @input[:job_cd] && ['CAPTURE', 'AUTH', 'SAUTH'].include?(@input[:job_cd]) required_items << :amount else required_items end when :exec_tran, :exec_tran_3d, :exec_tran_member, :exec_tran_member_3d, :re_exec_tran if @input[:method] && ['2', '4'].include?(@input[:method]) required_items << :pay_times else required_items end else required_items end @missing_items = array.select { |item| @input[item].nil? } end
Private Instance Methods
all_items()
click to toggle source
@return [Array]
# File lib/gmo_payment/client/request.rb, line 126 def all_items required_items + optional_items end
encode_euc_base64(str)
click to toggle source
@param [String] str @return [String] String of encoding to Base64 encoded in EUC-JP.
# File lib/gmo_payment/client/request.rb, line 115 def encode_euc_base64(str) ::Base64.strict_encode64(str.encode('EUC-JP', :invalid => :replace, :undef => :replace)) end
encode_sjis(str)
click to toggle source
@param [String] str @return [String] String encoded in Shif_JIS.
# File lib/gmo_payment/client/request.rb, line 121 def encode_sjis(str) str.encode('Shift_JIS', :invalid => :replace, :undef => :replace) end
optional_items()
click to toggle source
@return [Array]
# File lib/gmo_payment/client/request.rb, line 179 def optional_items case @called_method when :entry_tran [:item_code, :amount, :tax, :td_flag, :td_tenant_name] when :exec_tran [:method, :pay_times, :security_code, :pin, :client_field_1, :client_field_2, :client_field_3, :client_field_flag] when :exec_tran_3d [:method, :pay_times, :security_code, :client_field_1, :client_field_2, :client_field_3, :client_field_flag] when :save_member, :update_member [:member_name] when :save_card, :update_card [:seq_mode, :default_flag, :card_name, :card_pass, :holder_name] when :delete_card [:seq_mode] when :search_card [:card_seq] when :exec_tran_member, :exec_tran_member_3d [:method, :pay_times, :seq_mode, :card_pass, :security_code, :client_field_1, :client_field_2, :client_field_3, :client_field_flag] when :re_exec_tran [:tax, :pay_times] when :change_tran, :entry_tran_btc [:tax] when :save_traded_card [:seq_mode, :default_flag, :holder_name] when :exec_tran_btc [:client_field_1, :client_field_2, :client_field_3] else [] end end
required_items()
click to toggle source
@return [Array]
# File lib/gmo_payment/client/request.rb, line 131 def required_items case @called_method when :entry_tran [:shop_id, :shop_pass, :order_id, :job_cd] when :exec_tran [:access_id, :access_pass, :order_id, :card_no, :expire] when :exec_tran_3d [:access_id, :access_pass, :order_id, :card_no, :expire, :http_accept, :http_user_agent, :device_category] when :secure_tran [:pa_res, :md] when :save_member, :update_member, :delete_member, :search_member [:site_id, :site_pass, :member_id] when :save_card [:site_id, :site_pass, :member_id, :card_no, :expire] when :update_card [:site_id, :site_pass, :member_id, :card_seq, :card_no, :expire] when :delete_card [:site_id, :site_pass, :member_id, :card_seq] when :search_card [:site_id, :site_pass, :member_id, :seq_mode] when :exec_tran_member [:access_id, :access_pass, :order_id, :site_id, :site_pass, :member_id, :card_seq] when :exec_tran_member_3d [:access_id, :access_pass, :order_id, :site_id, :site_pass, :member_id, :card_seq, :http_accept, :http_user_agent, :device_category] when :delete_tran [:shop_id, :shop_pass, :access_id, :access_pass, :job_cd] when :re_exec_tran [:shop_id, :shop_pass, :access_id, :access_pass, :job_cd, :amount, :method] when :auth_to_sales, :change_tran [:shop_id, :shop_pass, :access_id, :access_pass, :job_cd, :amount] when :search_trade [:shop_id, :shop_pass, :order_id] when :save_traded_card [:shop_id, :shop_pass, :order_id, :site_id, :site_pass, :member_id] when :entry_tran_btc [:shop_id, :shop_pass, :order_id, :amount] when :exec_tran_btc [:shop_id, :access_id, :access_pass, :order_id, :ret_url, :item_name, :timeout, :item_memo] when :get_rate_btc [:shop_id, :shop_pass] when :search_trade_btc [:shop_id, :shop_pass, :order_id, :pay_type] else [] end end
validate_invalid?(key, value)
click to toggle source
@param [Symbol] key @param [String] value @return [Boolean]
# File lib/gmo_payment/client/request.rb, line 213 def validate_invalid?(key, value) !validate_valid?(key, value) end
validate_valid?(key, value)
click to toggle source
@param [Symbol] key @param [String] value @return [Boolean]
# File lib/gmo_payment/client/request.rb, line 220 def validate_valid?(key, value) case key when :access_id, :access_pass value.length <= 32 when :amount, :tax (value =~ /\D/).nil? && value.length <= 7 when :card_name value.length <= 10 when :card_no (value =~ /\D/).nil? && (10..16).include?(value.length) when :card_pass (value =~ /[^a-zA-Z0-9]/).nil? && value.length <= 20 when :card_seq (value =~ /\D/).nil? && value.length <= 4 when :client_field_1, :client_field_2, :client_field_3 (value =~ /[\{\}\|^`~&<>"']/).nil? && value.length <= 100 when :client_field_flag, :default_flag, :device_category, :seq_mode, :td_flag ['0', '1'].include?(value) when :expire (value =~ /\D/).nil? && value.length == 4 when :holder_name (value =~ /[^a-zA-Z0-9\s]/).nil? && value.length <= 50 when :item_code (value =~ /\D/).nil? && value.length == 7 when :item_memo value.length <= 128 when :item_name value.length <= 64 when :job_cd case @called_method when :entry_tran ['CHECK', 'CAPTURE', 'AUTH', 'SAUTH'].include?(value) when :delete_tran ['VOID', 'RETURN', 'RETURNX'].include?(value) when :re_exec_tran ['CAPTURE', 'AUTH'].include?(value) when :change_tran ['CAPTURE', 'AUTH', 'SAUTH'].include?(value) else true end when :member_id (value =~ /[^\w\-\.@]/).nil? && value.length <= 60 when :member_name (value =~ /[\{\}\|^`~&<>"']/).nil? && value.length <= 255 when :method ['1', '2', '3', '4', '5'].include?(value) when :order_id (value =~ /[^a-zA-Z0-9\-]/).nil? && value.length <= 27 when :pay_times (value =~ /\D/).nil? && value.length <= 2 when :pin value.length <= 4 when :ret_url value.length <= 256 when :security_code (value =~ /\D/).nil? && (3..4).include?(value.length) when :shop_id, :site_id value.length <= 13 when :shop_pass value.length <= 10 when :site_pass value.length <= 20 when :td_tenant_name encode_euc_base64(value).bytesize <= 25 when :timeout value.to_i <= 86400 else true end end