orbital-gateway 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4c422cda63223d8359fb32ac9252c6f72335d9b
4
- data.tar.gz: 3a5846aa5a00d3dcc1ec92d1425242f541ca0357
3
+ metadata.gz: ac2cb3f28720897ce47beb78db5ff493e1bcc336
4
+ data.tar.gz: 9637ff2b94dd73ef1f01c4b9cadbdac1980ad117
5
5
  SHA512:
6
- metadata.gz: aa17ce7ae27f189e45dff2bc46ca0d3ab6cab9263672ea51192aa88f02496abf2a82a5d321357aa910adc4801d6e7d1d86347053853b61419fe7d96b868df89b
7
- data.tar.gz: dfd78dc59945ef3d1e8df8b9326b33f6c2a9e8ffd0ebe5bae7768bb70a98f51cef96244b933812b1b41be144d9c983de4dd950b6240838808e742522b0663a39
6
+ metadata.gz: df75c8f8fff39ebc4f302a3a89b06a36c3bf16840b0269495aaa4402fe35fc0ab8cd01d2f7bac7dfb95541b2f089dd0c269d9eb676c3794e10fff9fa286221b0
7
+ data.tar.gz: 65f6eabf3d8a1ef2f23d9fb42db64e7d8d3de5e6514bd29e4b89263dda7955d0a0c032b8cc8791a230a6effa9f05d0f0f155467857393659a340ca8d0de1f2d4
@@ -1 +1,3 @@
1
- CREDENTIALS: 'asdf'
1
+ ORBITAL_VIRTUAL_TERMINAL: 'sample'
2
+ ORBITAL_CONNECTION_ID: 'sample'
3
+ ORBITAL_CONNECTION_PASSWORD: 'sample'
@@ -8,8 +8,8 @@ require "orbital/gateway"
8
8
  # with your gem easier. You can also use a different console, if you like.
9
9
 
10
10
  # (If you use this, don't forget to add pry to your Gemfile!)
11
- # require "pry"
12
- # Pry.start
11
+ require "pry"
12
+ Pry.start
13
13
 
14
- require "irb"
15
- IRB.start(__FILE__)
14
+ # require "irb"
15
+ # IRB.start(__FILE__)
@@ -1,4 +1,18 @@
1
+ require "active_support/all"
2
+ require "nokogiri"
3
+ require "builder"
4
+ require "httparty"
5
+ require "ostruct"
6
+
1
7
  require "orbital/gateway/version"
8
+ require "orbital/gateway/api"
9
+ require "orbital/gateway/api/customer"
10
+ require "orbital/gateway/api/authorization"
11
+ require "orbital/gateway/api/inquiry"
12
+ require "orbital/gateway/orbital_response"
13
+ require "orbital/gateway/orbital_response/profile_response"
14
+ require "orbital/gateway/orbital_response/authorization_response"
15
+ require "orbital/gateway/orbital_response/inquiry_response"
2
16
 
3
17
  module Orbital
4
18
  module Gateway
@@ -0,0 +1,136 @@
1
+ module Orbital
2
+ module Gateway
3
+ class Api
4
+ def url_endpoint
5
+ ENV.fetch("ORBITAL_GATEWAY_BASE_URL", "https://orbitalvar1.chasepaymentech.com/authorize")
6
+ end
7
+
8
+ def api_version
9
+ ENV.fetch("ORBITAL_GATEWAY_API_VERSION", "7.4")
10
+ end
11
+
12
+ def orbital_merchant_id
13
+ ENV.fetch("ORBITAL_MERCHANT_ID", "not-configured")
14
+ end
15
+
16
+ def orbital_connection_id
17
+ ENV.fetch("ORBITAL_CONNECTION_ID", "not-configured")
18
+ end
19
+
20
+ def orbital_connection_password
21
+ ENV.fetch("ORBITAL_CONNECTION_PASSWORD", "not-configured")
22
+ end
23
+
24
+ def set_bin
25
+ ENV.fetch("ORBITAL_BIN", "stratus")
26
+ end
27
+
28
+ include HTTParty
29
+
30
+ def initialize(options = {})
31
+ end
32
+
33
+ def post(body, trace_number=nil)
34
+ response = self.class.post(url_endpoint, body: body, timeout: 30, headers: modify_headers(body.size.to_s, trace_number))
35
+ end
36
+
37
+ private
38
+
39
+ def modify_headers(size, trace_number=nil)
40
+ head = headers
41
+ head.merge!('Trace-Number' => trace_number.to_s,
42
+ 'Merchant-Id' => orbital_merchant_id) if trace_number
43
+ head
44
+ end
45
+
46
+ def headers
47
+ {
48
+ 'MIME-Version' => '1.1',
49
+ 'Content-Type' => "application/PTI#{api_version.gsub(/\./, '')}",
50
+ 'Content-Transfer-Encoding' => 'text',
51
+ 'Request-Number' => '1',
52
+ 'Document-Type' => 'Request',
53
+ 'Interface-Version' => 'Ruby|Orbital Gateway'
54
+ }
55
+ end
56
+
57
+ def bin
58
+ available_bins = {
59
+ 'stratus' => '000001',
60
+ 'pns' => '000002'
61
+ }
62
+ available_bins[set_bin]
63
+ end
64
+
65
+ def base_request
66
+ xml = xml_envelope
67
+ xml.tag! :Request do
68
+ xml.tag! :NewOrder do
69
+ add_xml_credentials(xml)
70
+ add_bin_merchant_and_terminal(xml)
71
+ end
72
+ end
73
+ end
74
+
75
+ def xml_envelope
76
+ xml = Builder::XmlMarkup.new(:indent => 2)
77
+ xml.instruct!(:xml, :version => '1.0', :encoding => 'UTF-8')
78
+ xml
79
+ end
80
+
81
+ def add_xml_credentials(xml)
82
+ xml.tag! :OrbitalConnectionUsername, orbital_connection_id
83
+ xml.tag! :OrbitalConnectionPassword, orbital_connection_password
84
+ end
85
+
86
+ def add_bin_merchant_and_terminal(xml)
87
+ xml.tag! :BIN, bin
88
+ xml.tag! :MerchantID, orbital_merchant_id
89
+ xml.tag! :TerminalID, '001'
90
+ end
91
+
92
+ CURRENCY_CODES = {
93
+ 'AUD' => '036',
94
+ 'BRL' => '986',
95
+ 'CAD' => '124',
96
+ 'CLP' => '152',
97
+ 'CZK' => '203',
98
+ 'DKK' => '208',
99
+ 'HKD' => '344',
100
+ 'ICK' => '352',
101
+ 'JPY' => '392',
102
+ 'MXN' => '484',
103
+ 'NZD' => '554',
104
+ 'NOK' => '578',
105
+ 'SGD' => '702',
106
+ 'SEK' => '752',
107
+ 'CHF' => '756',
108
+ 'GBP' => '826',
109
+ 'USD' => '840',
110
+ 'EUR' => '978'
111
+ }
112
+
113
+ CURRENCY_EXPONENTS = {
114
+ 'AUD' => '2',
115
+ 'BRL' => '2',
116
+ 'CAD' => '2',
117
+ 'CLP' => '2',
118
+ 'CZK' => '2',
119
+ 'DKK' => '2',
120
+ 'HKD' => '2',
121
+ 'ICK' => '2',
122
+ 'JPY' => '0',
123
+ 'MXN' => '2',
124
+ 'NZD' => '2',
125
+ 'NOK' => '2',
126
+ 'SGD' => '2',
127
+ 'SEK' => '2',
128
+ 'CHF' => '2',
129
+ 'GBP' => '2',
130
+ 'USD' => '2',
131
+ 'EUR' => '2'
132
+ }
133
+
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,145 @@
1
+ module Orbital
2
+ module Gateway
3
+ class Api::Authorization < Api
4
+ class << self
5
+ def void(parameters)
6
+ gateway = new
7
+ xml_data = gateway.void(parameters)
8
+ response = gateway.post(xml_data)
9
+ OrbitalResponse::AuthorizationResponse.new(response, xml_data)
10
+ end
11
+
12
+ def refund(tx_ref_num:, account_num: nil, order_id: SecureRandom.hex(8), tx_ref_idx: nil, card_brand: nil, amount: nil)
13
+ gateway = new
14
+ xml_data = gateway.refund({tx_ref_num: tx_ref_num, account_num: account_num, order_id: order_id, tx_ref_idx: nil, card_brand: card_brand, amount: amount})
15
+ response = gateway.post(xml_data)
16
+ OrbitalResponse::AuthorizationResponse.new(response, xml_data)
17
+ end
18
+
19
+ def auth_and_capture(parameters, retry_trace=nil)
20
+ gateway = new
21
+ xml_data = gateway.auth_and_capture(parameters)
22
+ response = gateway.post(xml_data, retry_trace || rand(9999999999999999))
23
+ OrbitalResponse::AuthorizationResponse.new(response, xml_data)
24
+ end
25
+
26
+ def auth_only(parameters)
27
+ gateway = new
28
+ xml_data = gateway.auth_only(parameters)
29
+ response = gateway.post(xml_data)
30
+ OrbitalResponse::AuthorizationResponse.new(response, xml_data)
31
+ end
32
+ end
33
+
34
+ def add_bin_merchant_and_terminal(xml)
35
+ xml.tag! :BIN, bin
36
+ xml.tag! :MerchantID, orbital_merchant_id
37
+ xml.tag! :TerminalID, '001'
38
+ end
39
+
40
+ def auth_only(parameters)
41
+ xml = xml_envelope
42
+ xml.tag! :Request do
43
+ xml.tag! :NewOrder do
44
+ add_xml_credentials(xml)
45
+ xml.tag! :IndustryType, 'EC'
46
+ xml.tag! :MessageType, 'A'
47
+ add_bin_merchant_and_terminal(xml)
48
+ add_data(xml, parameters)
49
+ end
50
+ end
51
+ end
52
+
53
+ def auth_and_capture(parameters)
54
+ xml = xml_envelope
55
+ xml.tag! :Request do
56
+ xml.tag! :NewOrder do
57
+ add_xml_credentials(xml)
58
+ xml.tag! :IndustryType, 'EC'
59
+ xml.tag! :MessageType, 'AC'
60
+ add_bin_merchant_and_terminal(xml)
61
+ add_data(xml, parameters)
62
+ end
63
+ end
64
+ end
65
+
66
+ def refund(parameters)
67
+ xml = xml_envelope
68
+ xml.tag! :Request do
69
+ xml.tag! :NewOrder do
70
+ add_xml_credentials(xml)
71
+ xml.tag! :IndustryType, 'EC'
72
+ xml.tag! :MessageType, 'R'
73
+ add_bin_merchant_and_terminal(xml)
74
+ add_data(xml, parameters)
75
+ end
76
+ end
77
+ end
78
+
79
+ def void(parameters)
80
+ xml = xml_envelope
81
+ xml.tag! :Request do
82
+ xml.tag! :Reversal do
83
+ add_xml_credentials(xml)
84
+ void_data(xml, parameters)
85
+ xml.target!
86
+ end
87
+ end
88
+ end
89
+
90
+ def add_data(xml, parameters)
91
+ xml.tag! :CardBrand, parameters[:card_brand]
92
+ xml.tag! :AccountNum, parameters[:account_num]
93
+ xml.tag! :Exp, parameters[:expiration_date]
94
+ xml.tag! :CurrencyCode, CURRENCY_CODES.fetch(parameters[:currency_country], '840')
95
+ xml.tag! :CurrencyExponent, CURRENCY_EXPONENTS.fetch(parameters[:currency_country], '2')
96
+ xml.tag! :AVSzip, parameters[:avs_zip]
97
+ xml.tag! :AVSaddress1, parameters[:avs_address_one]
98
+ xml.tag! :AVSaddress2, parameters[:avs_address_two]
99
+ xml.tag! :AVScity, parameters[:avs_city]
100
+ xml.tag! :AVSstate, parameters[:avs_state]
101
+ xml.tag! :AVSphoneNum, parameters[:avs_phone]
102
+ xml.tag! :CustomerRefNum, parameters[:customer_ref_num]
103
+ xml.tag! :OrderID, parameters[:order_id]
104
+ xml.tag! :Amount, parameters[:amount]
105
+ xml.tag!(:TxRefNum, parameters[:tx_ref_num]) if parameters[:tx_ref_num]
106
+ xml.tag!(:PartialAuthInd, parameters[:partial_auth_ind]) if parameters[:partial_auth_ind]
107
+ xml.target!
108
+ end
109
+
110
+ def refund_data(xml, parameters)
111
+ xml.tag! :CurrencyCode, CURRENCY_CODES.fetch(parameters[:currency_country], '840')
112
+ xml.tag! :CurrencyExponent, CURRENCY_EXPONENTS.fetch(parameters[:currency_country], '2')
113
+ xml.tag! :OrderID, parameters[:order_id]
114
+ xml.tag! :Amount, parameters[:amount]
115
+ xml.tag! :CardBrand, parameters[:card_brand]
116
+ xml.tag! :AccountNum, parameters[:account_num]
117
+ xml.tag! :TxRefNum, parameters[:tx_ref_num]
118
+ xml.tag! :TxRefIdx, parameters[:tx_ref_idx]
119
+ xml.target!
120
+ end
121
+
122
+ def void_data(xml, parameters)
123
+ xml.tag! :TxRefNum, parameters[:tx_ref_num]
124
+ xml.tag! :TxRefIdx, parameters[:tx_ref_idx]
125
+ xml.tag! :AdjustedAmt, parameters[:amount] if parameters[:amount]
126
+ xml.tag! :OrderID, parameters[:order_id]
127
+ add_bin_merchant_and_terminal(xml)
128
+ xml.tag! :ReversalRetryNumber, parameters[:reversal_retry_number] if parameters[:reversal_retry_number]
129
+ xml.tag! :OnlineReversalInd, parameters[:online_reversal_ind] if parameters[:online_reversal_ind]
130
+ end
131
+
132
+ def inquery_data(xml, parameters)
133
+ xml.tag! :OrderID, parameters[:order_id]
134
+ xml.tag! :InquiryRetryNumber, parameters[:inquiry_retry_number]
135
+ end
136
+
137
+ def add_cryptogram(xml, parameters)
138
+ card_brand = parameters[:card_brand]
139
+ if card_brand == 'VI'
140
+ xml.tag!(:CAVV, Base64.encode64(parameters[:avs_cvv]).strip)
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,104 @@
1
+ module Orbital
2
+ module Gateway
3
+ class Api::Customer < Api
4
+ class << self
5
+ def create_profile(parameters)
6
+ gateway = new
7
+ xml_data = gateway.create_profile(parameters)
8
+ response = gateway.post(xml_data)
9
+ OrbitalResponse::ProfileResponse.new(response, xml_data)
10
+ end
11
+
12
+ def update_profile(parameters)
13
+ gateway = new
14
+ xml_data = gateway.update_profile(parameters)
15
+ response = gateway.post(xml_data)
16
+ OrbitalResponse::ProfileResponse.new(response, xml_data)
17
+ end
18
+
19
+ def delete_profile(parameters)
20
+ gateway = new
21
+ xml_data = gateway.delete_profile(parameters)
22
+ response = gateway.post(xml_data)
23
+ OrbitalResponse::ProfileResponse.new(response, xml_data)
24
+ end
25
+
26
+ def retrieve_profile(parameters)
27
+ gateway = new
28
+ xml_data = gateway.retrieve_profile(parameters)
29
+ response = gateway.post(xml_data)
30
+ OrbitalResponse::ProfileResponse.new(response, xml_data)
31
+ end
32
+ end
33
+
34
+ def xml_body(parameters)
35
+ xml = xml_envelope
36
+ xml.tag! :Request do
37
+ xml.tag! :Profile do
38
+ add_xml_credentials(xml)
39
+ add_bin_merchant_and_terminal(xml)
40
+ add_data(xml, parameters)
41
+ end
42
+ end
43
+ end
44
+
45
+ def create_profile(parameters)
46
+ xml_body(parameters.merge({customer_profile_action: :create}))
47
+ end
48
+
49
+ def update_profile(parameters)
50
+ xml_body(parameters.merge({customer_profile_action: :update}))
51
+ end
52
+
53
+ def delete_profile(parameters)
54
+ xml_body(parameters.merge({customer_profile_action: :delete}))
55
+ end
56
+
57
+ def retrieve_profile(parameters)
58
+ xml_body(parameters.merge({customer_profile_action: :retrieve}))
59
+ end
60
+
61
+ private
62
+
63
+ def add_bin_merchant_and_terminal(xml)
64
+ xml.tag! :CustomerBin, bin
65
+ xml.tag! :CustomerMerchantID, orbital_merchant_id
66
+ end
67
+
68
+ def add_data(xml, parameters)
69
+ xml.tag! :CustomerName, parameters[:customer_name]
70
+ xml.tag! :CustomerRefNum, parameters[:customer_ref_num]
71
+ xml.tag! :CustomerAddress1, parameters[:customer_address_one]
72
+ xml.tag! :CustomerAddress2, parameters[:customer_address_two] if parameters[:customer_address_two]
73
+ xml.tag! :CustomerCity, parameters[:customer_city]
74
+ xml.tag! :CustomerState, parameters[:customer_state]
75
+ xml.tag! :CustomerZIP, parameters[:customer_zip]
76
+ xml.tag! :CustomerEmail, parameters[:customer_email]
77
+ xml.tag! :CustomerPhone, parameters[:customer_phone]
78
+ xml.tag! :CustomerCountryCode, parameters[:customer_country_code]
79
+ xml.tag! :CustomerProfileAction, action(parameters[:customer_profile_action])
80
+ xml.tag!(:CustomerProfileOrderOverrideInd, 'NO') unless parameters[:customer_profile_action] == :delete
81
+ if parameters[:customer_profile_action] == :create
82
+ xml.tag! :CustomerProfileFromOrderInd, 'S'
83
+ end
84
+ xml.tag! :OrderDefaultDescription, parameters[:order_default_description]
85
+ xml.tag! :OrderDefaultAmount, parameters[:order_default_amount]
86
+ xml.tag!(:CustomerAccountType, 'CC') unless parameters[:customer_profile_action] == :delete
87
+ xml.tag! :Status, 'A'
88
+ xml.tag! :CCAccountNum, parameters[:credit_card_number]
89
+ xml.tag! :CCExpireDate, parameters[:expiration_date]
90
+ xml.target!
91
+ end
92
+
93
+ def action(chosen_action)
94
+ available_actions = {
95
+ create: 'C',
96
+ retrieve: 'R',
97
+ update: 'U',
98
+ delete: 'D'
99
+ }
100
+ available_actions[chosen_action]
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,31 @@
1
+ module Orbital
2
+ module Gateway
3
+ class Api::Inquiry < Api
4
+ class << self
5
+ def find_request(retry_trace_number)
6
+ gateway = new
7
+ xml_data = gateway.xml_body({retry_trace_number: retry_trace_number})
8
+ response = gateway.post(xml_data)
9
+ OrbitalResponse::InquiryResponse.new(response)
10
+ end
11
+ end
12
+
13
+ def xml_body(parameters)
14
+ xml = xml_envelope
15
+ xml.tag! :Request do
16
+ xml.tag! :Inquiry do
17
+ add_xml_credentials(xml)
18
+ add_bin_merchant_and_terminal(xml)
19
+ add_data(xml, parameters)
20
+ end
21
+ end
22
+ end
23
+
24
+ def add_data(xml, parameters)
25
+ xml.tag! :OrderID, parameters[:order_id]
26
+ xml.tag! :InquiryRetryNumber, parameters[:retry_trace_number]
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ module Orbital
2
+ module Gateway
3
+ class OrbitalResponse
4
+ attr_accessor :nokogiri, :request_xml
5
+ def initialize(response_xml, request_xml)
6
+ @nokogiri = Nokogiri.parse response_xml
7
+ @request_xml = request_xml
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,85 @@
1
+ module Orbital
2
+ module Gateway
3
+ class OrbitalResponse::AuthorizationResponse < OrbitalResponse
4
+ attr_reader :industry_type,
5
+ :message_type,
6
+ :merchant_id,
7
+ :terminal_id,
8
+ :card_brand,
9
+ :account_num,
10
+ :order_id,
11
+ :tx_ref_num,
12
+ :tx_ref_idx,
13
+ :proc_status,
14
+ :approval_status,
15
+ :resp_code,
16
+ :avs_resp_code,
17
+ :cvv2_resp_code,
18
+ :auth_code,
19
+ :recurring_advice_cd,
20
+ :cavv_resp_code,
21
+ :status_msg,
22
+ :resp_msg,
23
+ :host_resp_code,
24
+ :host_avs_resp_code,
25
+ :host_cvv2_resp_code,
26
+ :customer_ref_num,
27
+ :customer_name,
28
+ :profile_proc_status,
29
+ :customer_profile_message,
30
+ :resp_time,
31
+ :partial_auth_occurred,
32
+ :requested_amount,
33
+ :redeemed_amount,
34
+ :remaining_balance,
35
+ :country_fraud_filter_status,
36
+ :iso_country_code
37
+
38
+ def initialize(response_xml, request_xml)
39
+ super
40
+ @message_type = nokogiri.at_css("Response MessageType")&.text
41
+ @merchant_id = nokogiri.at_css("Response MerchantID")&.text
42
+ @terminal_id = nokogiri.at_css("Response TerminalID")&.text
43
+ @card_brand = nokogiri.at_css("Response CardBrand")&.text
44
+ @account_num = nokogiri.at_css("Response AccountNum")&.text
45
+ @order_id = nokogiri.at_css("Response OrderID")&.text
46
+ @tx_ref_num = nokogiri.at_css("Response TxRefNum")&.text
47
+ @tx_ref_idx = nokogiri.at_css("Response TxRefIdx")&.text
48
+ @proc_status = nokogiri.at_css("Response ProcStatus")&.text
49
+ @approval_status = nokogiri.at_css("Response ApprovalStatus")&.text
50
+ @resp_code = nokogiri.at_css("Response RespCode")&.text
51
+ @avs_resp_code = nokogiri.at_css("Response AVSRespCode")&.text
52
+ @cvv2_resp_code = nokogiri.at_css("Response CVV2RespCode")&.text
53
+ @auth_code = nokogiri.at_css("Response AuthCode")&.text
54
+ @recurring_advice_cd = nokogiri.at_css("Response RecurringAdviceCd")&.text
55
+ @cavv_resp_code = nokogiri.at_css("Response CAVVRespCode")&.text
56
+ @status_msg = nokogiri.at_css("Response StatusMsg")&.text
57
+ @resp_msg = nokogiri.at_css("Response RespMsg")&.text
58
+ @host_resp_code = nokogiri.at_css("Response HostRespCode")&.text
59
+ @host_avs_resp_code = nokogiri.at_css("Response HostAVSRespCode")&.text
60
+ @host_cvv2_resp_code = nokogiri.at_css("Response HostCVV2RespCode")&.text
61
+ @customer_ref_num = nokogiri.at_css("Response CustomerRefNum")&.text
62
+ @customer_name = nokogiri.at_css("Response CustomerName")&.text
63
+ @profile_proc_status = nokogiri.at_css("Response ProfileProcStatus")&.text
64
+ @customer_profile_message = nokogiri.at_css("Response CustomerProfileMessage")&.text
65
+ @resp_time = nokogiri.at_css("Response RespTime")&.text
66
+ @partial_auth_occurred = nokogiri.at_css("Response PartialAuthOccurred")&.text
67
+ @requested_amount = nokogiri.at_css("Response RequestedAmount")&.text
68
+ @redeemed_amount = nokogiri.at_css("Response RedeemedAmount")&.text
69
+ @remaining_balance = nokogiri.at_css("Response RemainingBalance")&.text
70
+ @country_fraud_filter_status = nokogiri.at_css("Response CountryFraudFilterStatus")&.text
71
+ @iso_country_code = nokogiri.at_css("Response IsoCountryCode")&.text
72
+ end
73
+
74
+ def to_s
75
+ nokogiri.to_xml
76
+ end
77
+
78
+ def success?
79
+ resp_code == '00' || approval_status.to_s == '1'
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+
@@ -0,0 +1,20 @@
1
+ module Orbital
2
+ module Gateway
3
+ class OrbitalResponse::InquiryResponse < OrbitalResponse
4
+ attr_reader :industry_type
5
+
6
+ def initialize(response_xml)
7
+ super
8
+ end
9
+
10
+ def to_s
11
+ nokogiri.to_xml
12
+ end
13
+
14
+ def success?
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+
@@ -0,0 +1,87 @@
1
+ module Orbital
2
+ module Gateway
3
+ class OrbitalResponse::ProfileResponse < OrbitalResponse
4
+ attr_reader :customer_bin,
5
+ :customer_merchant_id,
6
+ :customer_bin,
7
+ :customer_merchant_id,
8
+ :customer_name,
9
+ :customer_ref_num,
10
+ :customer_profile_action,
11
+ :profile_proc_status,
12
+ :customer_profile_message,
13
+ :customer_address_one,
14
+ :customer_address_two,
15
+ :customer_city,
16
+ :customer_state,
17
+ :customer_zip,
18
+ :customer_email,
19
+ :customer_phone,
20
+ :customer_country_code,
21
+ :customer_profile_order_override_ind,
22
+ :order_default_description,
23
+ :order_default_amount,
24
+ :customer_account_type,
25
+ :status,
26
+ :cc_account_num,
27
+ :cc_expire_date,
28
+ :ecp_account_dda,
29
+ :ecp_account_type,
30
+ :ecp_account_rt,
31
+ :ecp_bank_pmt_dlv,
32
+ :switch_solo_start_date,
33
+ :swith_solo_issue_num,
34
+ :resp_time,
35
+ :mit_msg_type,
36
+ :mit_submitted_transaction_id
37
+
38
+ def initialize(response_xml, request_xml)
39
+ super
40
+ @customer_bin = nokogiri.at_css("Response ProfileResp CustomerBin")&.text
41
+ @customer_merchant_id = nokogiri.at_css("Response ProfileResp CustomerMerchantID")&.text
42
+ @customer_name = nokogiri.at_css("Response ProfileResp CustomerName")&.text
43
+ @customer_ref_num = nokogiri.at_css("Response ProfileResp CustomerRefNum")&.text
44
+ @customer_profile_action = nokogiri.at_css("Response ProfileResp CustomerProfileAction")&.text
45
+ @profile_proc_status = nokogiri.at_css("Response ProfileResp ProfileProcStatus")&.text
46
+ @customer_profile_message = nokogiri.at_css("Response ProfileResp CustomerProfileMessage")&.text
47
+ @customer_address_one = nokogiri.at_css("Response ProfileResp CustomerAddress1")&.text
48
+ @customer_address_two = nokogiri.at_css("Response ProfileResp CustomerAddress2")&.text
49
+ @customer_city = nokogiri.at_css("Response ProfileResp CustomerCity")&.text
50
+ @customer_state = nokogiri.at_css("Response ProfileResp CustomerState")&.text
51
+ @customer_zip = nokogiri.at_css("Response ProfileResp CustomerZIP")&.text
52
+ @customer_email = nokogiri.at_css("Response ProfileResp CustomerEmail")&.text
53
+ @customer_phone = nokogiri.at_css("Response ProfileResp CustomerPhone")&.text
54
+ @customer_country_code = nokogiri.at_css("Response ProfileResp CustomerCountryCode")&.text
55
+ @customer_profile_order_override_ind = nokogiri.at_css("Response ProfileResp CustomerProfileOrderOverrideInd")&.text
56
+ @order_default_description = nokogiri.at_css("Response ProfileResp OrderDefaultDescription")&.text
57
+ @order_default_amount = nokogiri.at_css("Response ProfileResp OrderDefaultAmount")&.text
58
+ @customer_account_type = nokogiri.at_css("Response ProfileResp CustomerAccountType")&.text
59
+ @status = nokogiri.at_css("Response ProfileResp Status")&.text
60
+ @cc_account_num = nokogiri.at_css("Response ProfileResp CCAccountNum")&.text
61
+ @cc_expire_date = nokogiri.at_css("Response ProfileResp CCExpireDate")&.text
62
+ @ecp_account_dda = nokogiri.at_css("Response ProfileResp ECPAccountDDA")&.text
63
+ @ecp_account_type = nokogiri.at_css("Response ProfileResp ECPAccountType")&.text
64
+ @ecp_account_rt = nokogiri.at_css("Response ProfileResp ECPAccountRT")&.text
65
+ @ecp_bank_pmt_dlv = nokogiri.at_css("Response ProfileResp ECPBankPmtDlv")&.text
66
+ @switch_solo_start_date = nokogiri.at_css("Response ProfileResp SwitchSoloStartDate")&.text
67
+ @swith_solo_issue_num = nokogiri.at_css("Response ProfileResp SwitchSoloIssueNum")&.text
68
+ @resp_time = nokogiri.at_css("Response ProfileResp RespTime")&.text
69
+ @mit_msg_type = nokogiri.at_css("Response ProfileResp MITMsgType")&.text
70
+ @mit_submitted_transaction_id = nokogiri.at_css("Response ProfileResp MITSubmittedTransactionID")&.text
71
+ end
72
+
73
+ def to_s
74
+ nokogiri.to_xml
75
+ end
76
+
77
+ def success?
78
+ profile_proc_status == '0'
79
+ # Example of a failure
80
+ # <ProfileProcStatus>9581</ProfileProcStatus>
81
+ # <CustomerProfileMessage>Profile: Cannot Read profile. Profile does not exist for Cust Ref Num: [62E66156562D01C7] and MID: [351154].</CustomerProfileMessage>
82
+ end
83
+ end
84
+ end
85
+ end
86
+
87
+
@@ -1,5 +1,5 @@
1
1
  module Orbital
2
2
  module Gateway
3
- VERSION = "0.1.0"
3
+ VERSION = "1.0.0"
4
4
  end
5
5
  end
@@ -35,6 +35,7 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency "bundler", "~> 1.16"
36
36
  spec.add_development_dependency "rake", "~> 10.0"
37
37
  spec.add_development_dependency "minitest", "~> 5.0"
38
+ spec.add_development_dependency "faker"
38
39
  # spec.add_development_dependency "vcr"
39
40
  # spec.add_development_dependency "webmock"
40
41
  spec.add_development_dependency "pry"
@@ -44,5 +45,7 @@ Gem::Specification.new do |spec|
44
45
  spec.add_development_dependency "simplecov"
45
46
  spec.add_development_dependency "dotenv"
46
47
  spec.add_dependency "httparty", ">= 0.14.0"
47
- # spec.add_dependency "activesupport"
48
+ spec.add_dependency "activesupport"
49
+ spec.add_dependency "nokogiri"
50
+ spec.add_dependency "builder"
48
51
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orbital-gateway
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Eggett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-17 00:00:00.000000000 Z
11
+ date: 2018-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faker
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: pry
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +150,48 @@ dependencies:
136
150
  - - ">="
137
151
  - !ruby/object:Gem::Version
138
152
  version: 0.14.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: activesupport
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: nokogiri
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: builder
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
139
195
  description: Ruby wrapper for interacting with the Chase Paymentech Orbital Gateway
140
196
  XML API
141
197
  email:
@@ -155,6 +211,14 @@ files:
155
211
  - bin/console
156
212
  - bin/setup
157
213
  - lib/orbital/gateway.rb
214
+ - lib/orbital/gateway/api.rb
215
+ - lib/orbital/gateway/api/authorization.rb
216
+ - lib/orbital/gateway/api/customer.rb
217
+ - lib/orbital/gateway/api/inquiry.rb
218
+ - lib/orbital/gateway/orbital_response.rb
219
+ - lib/orbital/gateway/orbital_response/authorization_response.rb
220
+ - lib/orbital/gateway/orbital_response/inquiry_response.rb
221
+ - lib/orbital/gateway/orbital_response/profile_response.rb
158
222
  - lib/orbital/gateway/version.rb
159
223
  - orbital-gateway.gemspec
160
224
  homepage: https://github.com/beneggett/orbital-gateway
@@ -178,7 +242,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
242
  version: '0'
179
243
  requirements: []
180
244
  rubyforge_project:
181
- rubygems_version: 2.6.10
245
+ rubygems_version: 2.6.12
182
246
  signing_key:
183
247
  specification_version: 4
184
248
  summary: Chase Paymentech Orbital Gateway API