eway_rapid 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.travis.yml +11 -0
  4. data/CHANGELOG.md +7 -0
  5. data/Gemfile +2 -0
  6. data/LICENSE.md +21 -0
  7. data/README.md +96 -0
  8. data/Rakefile +14 -0
  9. data/eway_rapid.gemspec +26 -0
  10. data/lib/eway_rapid.rb +78 -0
  11. data/lib/eway_rapid/constants.rb +126 -0
  12. data/lib/eway_rapid/entities/cancel_authorisation_request.rb +9 -0
  13. data/lib/eway_rapid/entities/cancel_authorisation_response.rb +34 -0
  14. data/lib/eway_rapid/entities/capture_payment_request.rb +11 -0
  15. data/lib/eway_rapid/entities/capture_payment_response.rb +34 -0
  16. data/lib/eway_rapid/entities/create_access_code_request.rb +35 -0
  17. data/lib/eway_rapid/entities/create_access_code_response.rb +128 -0
  18. data/lib/eway_rapid/entities/create_access_code_shared_request.rb +53 -0
  19. data/lib/eway_rapid/entities/create_access_code_shared_response.rb +40 -0
  20. data/lib/eway_rapid/entities/create_customer_response.rb +8 -0
  21. data/lib/eway_rapid/entities/direct_customer_search_request.rb +9 -0
  22. data/lib/eway_rapid/entities/direct_customer_search_response.rb +23 -0
  23. data/lib/eway_rapid/entities/direct_payment_request.rb +29 -0
  24. data/lib/eway_rapid/entities/direct_payment_response.rb +58 -0
  25. data/lib/eway_rapid/entities/direct_refund_request.rb +26 -0
  26. data/lib/eway_rapid/entities/direct_refund_response.rb +44 -0
  27. data/lib/eway_rapid/entities/transaction_search_response.rb +23 -0
  28. data/lib/eway_rapid/exceptions.rb +51 -0
  29. data/lib/eway_rapid/message/convert/customer_to_internal_customer.rb +70 -0
  30. data/lib/eway_rapid/message/convert/direct_payment_to_trans_status.rb +47 -0
  31. data/lib/eway_rapid/message/convert/direct_refund_to_trans_status.rb +33 -0
  32. data/lib/eway_rapid/message/convert/internal_customer_to_customer.rb +41 -0
  33. data/lib/eway_rapid/message/convert/internal_trans_to_trans.rb +62 -0
  34. data/lib/eway_rapid/message/convert/internal_transaction_to_address.rb +27 -0
  35. data/lib/eway_rapid/message/convert/internal_transaction_to_status.rb +55 -0
  36. data/lib/eway_rapid/message/convert/payment_to_payment_details.rb +25 -0
  37. data/lib/eway_rapid/message/convert/request/refund_to_direct_refund_req.rb +41 -0
  38. data/lib/eway_rapid/message/convert/request/transaction_to_capture_payment.rb +28 -0
  39. data/lib/eway_rapid/message/convert/request/transaction_to_create_access_code_request.rb +58 -0
  40. data/lib/eway_rapid/message/convert/request/transaction_to_create_access_code_shared_request.rb +54 -0
  41. data/lib/eway_rapid/message/convert/request/transaction_to_direct_payment.rb +45 -0
  42. data/lib/eway_rapid/message/convert/response/access_code_shared_to_create_cust.rb +23 -0
  43. data/lib/eway_rapid/message/convert/response/access_code_shared_to_create_trans.rb +28 -0
  44. data/lib/eway_rapid/message/convert/response/access_code_to_create_cust.rb +24 -0
  45. data/lib/eway_rapid/message/convert/response/access_code_to_create_trans.rb +27 -0
  46. data/lib/eway_rapid/message/convert/response/cancel_authorisation_to_refund.rb +37 -0
  47. data/lib/eway_rapid/message/convert/response/capture_payment_to_create_transaction.rb +43 -0
  48. data/lib/eway_rapid/message/convert/response/direct_customer_to_query_customer.rb +55 -0
  49. data/lib/eway_rapid/message/convert/response/direct_payment_to_create_cust.rb +23 -0
  50. data/lib/eway_rapid/message/convert/response/direct_payment_to_create_trans.rb +32 -0
  51. data/lib/eway_rapid/message/convert/response/direct_refund_to_refund_response.rb +28 -0
  52. data/lib/eway_rapid/message/convert/response/search_to_query_trans.rb +30 -0
  53. data/lib/eway_rapid/message/convert/shipping_details_to_address.rb +35 -0
  54. data/lib/eway_rapid/message/convert/transaction_shipping_address.rb +37 -0
  55. data/lib/eway_rapid/message/convert/transaction_to_arr_line_item.rb +14 -0
  56. data/lib/eway_rapid/message/convert/transaction_to_arr_option.rb +25 -0
  57. data/lib/eway_rapid/message/convert/transaction_to_payment.rb +29 -0
  58. data/lib/eway_rapid/message/convert/verification_to_verification_result.rb +33 -0
  59. data/lib/eway_rapid/message/process/customer_process.rb +255 -0
  60. data/lib/eway_rapid/message/process/refund_process.rb +76 -0
  61. data/lib/eway_rapid/message/process/rest_process.rb +87 -0
  62. data/lib/eway_rapid/message/process/transaction_process.rb +139 -0
  63. data/lib/eway_rapid/models/enums.rb +126 -0
  64. data/lib/eway_rapid/models/internal_models.rb +431 -0
  65. data/lib/eway_rapid/models/models.rb +334 -0
  66. data/lib/eway_rapid/output/create_transaction_response.rb +24 -0
  67. data/lib/eway_rapid/output/query_customer_response.rb +25 -0
  68. data/lib/eway_rapid/output/query_transaction_response.rb +16 -0
  69. data/lib/eway_rapid/output/refund_response.rb +9 -0
  70. data/lib/eway_rapid/output/response_output.rb +14 -0
  71. data/lib/eway_rapid/rapid_client.rb +444 -0
  72. data/lib/eway_rapid/rapid_logger.rb +40 -0
  73. data/lib/eway_rapid/resources/err_code_resource_en.yml +237 -0
  74. data/lib/eway_rapid/resources/rapid-api.yml +4 -0
  75. data/lib/eway_rapid/version.rb +3 -0
  76. metadata +201 -0
@@ -0,0 +1,76 @@
1
+ module EwayRapid
2
+ module Message
3
+ module RefundProcess
4
+
5
+ # Refund message process
6
+ class RefundMsgProcess
7
+ include RestProcess
8
+
9
+ # @param [Models::Refund] refund
10
+ # @return [DirectRefundRequest]
11
+ def self.create_request(refund)
12
+ converter = Convert::Request::RefundToDirectRefundReq.new
13
+ converter.do_convert(refund)
14
+ end
15
+
16
+ # @param [DirectRefundRequest] request
17
+ # @return [String]
18
+ def self.send_request(url, api_key, password, request)
19
+ url = url + '/' + request.refund.original_transaction_id.to_s + '/' + Constants::REFUND_SUB_PATH_METHOD
20
+ url = URI.encode(url)
21
+ RefundMsgProcess.new.do_post(url, api_key, password, request)
22
+ end
23
+
24
+ # @param [String] response
25
+ # @return [RefundResponse]
26
+ def self.make_result(response)
27
+ response = DirectRefundResponse.from_json(response)
28
+ converter = Convert::Response::DirectRefundToRefundResponse.new
29
+ converter.do_convert(response)
30
+ end
31
+ end
32
+
33
+ # cancel authorisation message process
34
+ class CancelAuthorisationMsgProcess
35
+ include RestProcess
36
+
37
+ # @param [Models::Refund] refund
38
+ # @return [CancelAuthorisationRequest]
39
+ def self.create_request(refund)
40
+ set_refund(refund)
41
+ request = CancelAuthorisationRequest.new
42
+
43
+ # @type [InternalModels::RefundDetails]
44
+ refund_detail = refund.refund_details
45
+ unless refund_detail
46
+ fail 'Refund detail has been null'
47
+ end
48
+ request.transaction_id = refund_detail.original_transaction_id
49
+ request
50
+ end
51
+
52
+ def self.send_request(url, api_key, password, request)
53
+ CancelAuthorisationMsgProcess.new.do_post(url, api_key, password, request)
54
+ end
55
+
56
+ # @param [String] response
57
+ # @return [RefundResponse]
58
+ def self.make_result(response)
59
+ cancel_response = CancelAuthorisationResponse.from_json(response)
60
+ converter = Convert::Response::CancelAuthorisationToRefund.new(get_refund)
61
+ converter.do_convert(cancel_response)
62
+ end
63
+
64
+ # @param [Models::Refund] refund
65
+ def self.set_refund(refund)
66
+ @refund = refund
67
+ end
68
+
69
+ # @return [Models::Refund]
70
+ def self.get_refund
71
+ @refund
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,87 @@
1
+ module EwayRapid
2
+ module Message
3
+ module RestProcess
4
+
5
+ # Call restful web service with post method
6
+ #
7
+ # @param [String] url rapid endpoint url
8
+ # @param [String] api_key rapid api key
9
+ # @param [String] password rapid password
10
+ # @param [String] request object to post
11
+ def do_post(url, api_key, password, request)
12
+ begin
13
+ RestClient::Request.execute(
14
+ :method => :post,
15
+ :url => url,
16
+ :user => api_key,
17
+ :password => password,
18
+ :payload => request.to_json,
19
+ :timeout => 9000000,
20
+ :headers => {
21
+ :accept => :json,
22
+ :content_type => :json,
23
+ :user_agent => get_user_agent
24
+ }
25
+ )
26
+ rescue SocketError => e
27
+ raise Exceptions::CommunicationFailureException.new(e.to_s)
28
+ rescue RestClient::Exception => e
29
+ if e.http_code == 401 || e.http_code == 403 || e.http_code == 404
30
+ raise Exceptions::AuthenticationFailureException.new(e.to_s)
31
+ else
32
+ raise Exceptions::SystemErrorException.new(e.to_s)
33
+ end
34
+ end
35
+ end
36
+
37
+ # Call restful web service with get method
38
+ #
39
+ # @param [String] url rapid endpoint url
40
+ # @param [String] api_key rapid api key
41
+ # @param [String] password rapid password
42
+ def do_get(url, api_key, password)
43
+ begin
44
+ RestClient::Request.new(
45
+ :method => :get,
46
+ :url => url,
47
+ :user => api_key,
48
+ :password => password,
49
+ :headers => {
50
+ :accept => :json,
51
+ :content_type => :json,
52
+ :user_agent => get_user_agent
53
+ }
54
+ ).execute
55
+ rescue SocketError => e
56
+ raise Exceptions::CommunicationFailureException.new(e.to_s)
57
+ rescue RestClient::Exception => e
58
+ if e.http_code == 401 || e.http_code == 403 || e.http_code == 404
59
+ raise Exceptions::AuthenticationFailureException.new(e.to_s)
60
+ else
61
+ raise Exceptions::SystemErrorException.new(e.to_s)
62
+ end
63
+ end
64
+ end
65
+
66
+ private
67
+
68
+ def get_user_agent
69
+ begin
70
+ property_array = YAML.load_file(File.join(File.dirname(__FILE__), '..', '..', 'resources', 'rapid-api.yml'))
71
+ property_array.each do |h|
72
+ if Constants::RAPID_SDK_USER_AGENT_PARAM == h.keys.first
73
+ if h[h.keys.first]
74
+ return "#{h[h.keys.first]} #{EwayRapid::VERSION}"
75
+ else
76
+ fail "Rapid endpoint '#{Constants::RAPID_API_RESOURCE}' is invalid."
77
+ end
78
+ end
79
+ end
80
+ rescue => e
81
+ @logger.error "Error loading user agent parameter #{e}" if @logger
82
+ end
83
+ ''
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,139 @@
1
+ module EwayRapid
2
+ module Message
3
+ module TransactionProcess
4
+
5
+ # Create transaction with direct payment message process
6
+ class TransDirectPaymentMsgProcess
7
+ include RestProcess
8
+
9
+ # @param [Models::Transaction] input
10
+ # @return [DirectPaymentRequest]
11
+ def self.create_request(input)
12
+ req_convert = Convert::Request::TransactionToDirectPayment.new
13
+ req_convert.do_convert(input)
14
+ end
15
+
16
+ # @param [String] url
17
+ # @param [String] api_key
18
+ # @param [String] password
19
+ # @param [DirectPaymentRequest] request
20
+ # @return [String]
21
+ def self.send_request(url, api_key, password, request)
22
+ TransDirectPaymentMsgProcess.new.do_post(url, api_key, password, request)
23
+ end
24
+
25
+ # @param [String] response
26
+ # @return [CreateTransactionResponse]
27
+ def self.make_result(response)
28
+ direct_payment_response = DirectPaymentResponse.from_json(response)
29
+ converter = Convert::Response::DirectPaymentToCreateTrans.new
30
+ converter.do_convert(direct_payment_response)
31
+ end
32
+ end
33
+
34
+ # Create transaction with responsive shared message process
35
+ class TransResponsiveSharedMsgProcess
36
+ include RestProcess
37
+
38
+ # @param [Models::Transaction] input
39
+ # @return [CreateAccessCodeSharedRequest]AccessCodeSharedToCreateCust
40
+ def self.create_request(input)
41
+ req_convert = Convert::Request::TransactionToCreateAccessCodeSharedRequest.new
42
+ req_convert.do_convert(input)
43
+ end
44
+
45
+ # @param [String] url
46
+ # @param [String] api_key
47
+ # @param [String] password
48
+ # @param [CreateAccessCodeSharedRequest] request
49
+ # @return [String]
50
+ def self.send_request(url, api_key, password, request)
51
+ TransResponsiveSharedMsgProcess.new.do_post(url, api_key, password, request)
52
+ end
53
+
54
+ # @param [String] response
55
+ # @return [CreateTransactionResponse]
56
+ def self.make_result(response)
57
+ access_code_shared_response = CreateAccessCodeSharedResponse.from_json(response)
58
+ converter = Convert::Response::AccessCodeSharedToCreateTrans.new
59
+ converter.do_convert(access_code_shared_response)
60
+ end
61
+ end
62
+
63
+ # Create transaction with transparent redirect method message process
64
+ class TransTransparentRedirectMsgProcess
65
+ include RestProcess
66
+
67
+ # @param [Models::Transaction] input
68
+ # @return [CreateAccessCodeRequest]
69
+ def self.create_request(input)
70
+ req_convert = Convert::Request::TransactionToCreateAccessCodeRequest.new
71
+ req_convert.do_convert(input)
72
+ end
73
+
74
+ # @param [String] url
75
+ # @param [String] api_key
76
+ # @param [String] password
77
+ # @param [CreateAccessCodeRequest] request
78
+ # @return [String]
79
+ def self.send_request(url, api_key, password, request)
80
+ TransTransparentRedirectMsgProcess.new.do_post(url, api_key, password, request)
81
+ end
82
+
83
+ # @param [String] response
84
+ # @return [CreateTransactionResponse]
85
+ def self.make_result(response)
86
+ create_access_code_response = CreateAccessCodeResponse.from_json(response)
87
+ converter = Convert::Response::AccessCodeToCreateTrans.new
88
+ converter.do_convert(create_access_code_response)
89
+ end
90
+ end
91
+
92
+ # Capture payment message process
93
+ class CapturePaymentMsgProcess
94
+ include RestProcess
95
+
96
+ # @param [Models::Transaction] input
97
+ # @return [CapturePaymentRequest]
98
+ def self.create_request(input)
99
+ req_convert = Convert::Request::TransactionToCapturePayment.new
100
+ req_convert.do_convert(input)
101
+ end
102
+
103
+ # @param [String] url
104
+ # @param [String] api_key
105
+ # @param [String] password
106
+ # @param [CapturePaymentRequest] request
107
+ # @return [String]
108
+ def self.send_request(url, api_key, password, request)
109
+ CapturePaymentMsgProcess.new.do_post(url, api_key, password, request)
110
+ end
111
+
112
+ # @param [String] response
113
+ # @return [CreateTransactionResponse]
114
+ def self.make_result(response)
115
+ capture_payment_response = CapturePaymentResponse.from_json(response)
116
+ converter = Convert::Response::CapturePaymentToCreateTransaction.new
117
+ converter.do_convert(capture_payment_response)
118
+ end
119
+ end
120
+
121
+ # Query transaction message process
122
+ class TransQueryMsgProcess
123
+ include RestProcess
124
+
125
+ def self.process_post_msg(url, api_key, password)
126
+ TransQueryMsgProcess.new.do_get(url, api_key, password)
127
+ end
128
+
129
+ # @param [String] response
130
+ # @return [QueryTransactionResponse]
131
+ def self.make_result(response)
132
+ transaction_search_resp = TransactionSearchResponse.from_json(response)
133
+ converter = Convert::Response::SearchToQueryTrans.new
134
+ converter.do_convert(transaction_search_resp)
135
+ end
136
+ end
137
+ end
138
+ end
139
+ end
@@ -0,0 +1,126 @@
1
+ module EwayRapid
2
+ module Enums
3
+
4
+ class BeagleVerifyStatus
5
+ NOT_VERIFIED = 'NotVerified'
6
+ ATTEMPTED = 'Attempted'
7
+ VERIFIED = 'Verified'
8
+ FAILED = 'Failed'
9
+
10
+ # @param [Integer] index
11
+ # @return [String]
12
+ def self.calculate_beagle_status(index)
13
+ case index
14
+ when 0 then NOT_VERIFIED
15
+ when 1 then ATTEMPTED
16
+ when 2 then VERIFIED
17
+ when 3 then FAILED
18
+ else
19
+ nil
20
+ end
21
+ end
22
+ end
23
+
24
+ class FraudAction
25
+ NOT_CHALLENGED = 'NotChallenged'
26
+ ALLOW = 'Allow'
27
+ REVIEW = 'Review'
28
+ PRE_AUTH = 'PreAuth'
29
+ PROCESSED = 'Processed'
30
+ APPROVED = 'Approved'
31
+ BLOCK = 'Block'
32
+ end
33
+
34
+ class PaymentMethod
35
+ DIRECT = 'Direct'
36
+ RESPONSIVE_SHARED = 'ResponsiveShared'
37
+ TRANSPARENT_REDIRECT = 'TransparentRedirect'
38
+ WALLET = 'Wallet'
39
+ AUTHORISATION = 'Authorisation'
40
+ end
41
+
42
+ class RequestMethod
43
+ PROCESS_PAYMENT = 'ProcessPayment'
44
+ CREATE_TOKEN_CUSTOMER = 'CreateTokenCustomer'
45
+ UPDATE_TOKEN_CUSTOMER = 'UpdateTokenCustomer'
46
+ TOKEN_PAYMENT = 'TokenPayment'
47
+ AUTHORISE = 'Authorise'
48
+ end
49
+
50
+ class ShippingMethod
51
+ UNKNOWN = 'Unknown'
52
+ LOW_COST = 'LowCost'
53
+ DESIGNATED_BY_CUSTOMER = 'DesignatedByCustomer'
54
+ INTERNATIONAL = 'International'
55
+ MILITARY = 'Military'
56
+ NEXT_DAY = 'NextDay'
57
+ STORE_PICKUP = 'StorePickup'
58
+ TWO_DAY_SERVICE = 'TwoDayService'
59
+ THREE_DAY_SERVICE = 'ThreeDayService'
60
+ OTHER = 'Other'
61
+ end
62
+
63
+ class TransactionType
64
+ PURCHASE = 'Purchase'
65
+ RECURRING = 'Recurring'
66
+ MOTO = 'MOTO'
67
+ end
68
+
69
+ class TransactionFilter
70
+ TRANSACTION_ID_INDEX = 1
71
+ ACCESS_CODE_INDEX = 2
72
+ INVOICE_NUMBER_INDEX = 3
73
+ INVOICE_REFERENCE_INDEX = 4
74
+
75
+ attr_accessor :transaction_id,
76
+ :access_code,
77
+ :invoice_number,
78
+ :invoice_reference
79
+
80
+ # @return [Integer]
81
+ def calculate_index_of_value
82
+ index = 0
83
+ count = 0
84
+ unless transaction_id.nil?
85
+ index = TRANSACTION_ID_INDEX
86
+ count += 1
87
+ end
88
+ unless access_code.nil?
89
+ index = ACCESS_CODE_INDEX
90
+ count += 1
91
+ end
92
+ unless invoice_number.nil?
93
+ index = INVOICE_NUMBER_INDEX
94
+ count += 1
95
+ end
96
+ unless invoice_reference.nil?
97
+ index = INVOICE_REFERENCE_INDEX
98
+ count += 1
99
+ end
100
+ if count == 1
101
+ index
102
+ else
103
+ nil
104
+ end
105
+ end
106
+ end
107
+
108
+ class VerifyStatus
109
+ UNCHECKED = 'unchecked'
110
+ VALID = 'valid'
111
+ INVALID = 'invalid'
112
+
113
+ # @param [Integer] index
114
+ # @return [String]
115
+ def self.calculate_status(index)
116
+ case index
117
+ when 0 then UNCHECKED
118
+ when 1 then VALID
119
+ when 2 then INVALID
120
+ else
121
+ nil
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,431 @@
1
+ module EwayRapid
2
+ module InternalModels
3
+ class BeagleVerification
4
+ attr_accessor :email
5
+ attr_accessor :phone
6
+
7
+ def to_json(options={})
8
+ hash = {}
9
+ hash[Constants::EMAIL] = email
10
+ hash[Constants::PHONE] = phone
11
+ hash.to_json
12
+ end
13
+
14
+ def self.from_json(json)
15
+ hash = JSON.parse(json)
16
+ from_hash(hash)
17
+ end
18
+
19
+ def self.from_hash(hash)
20
+ beagle_verification = self.new
21
+ beagle_verification.email = hash[Constants::EMAIL]
22
+ beagle_verification.phone = hash[Constants::PHONE]
23
+ beagle_verification
24
+ end
25
+ end
26
+
27
+ class Customer
28
+ attr_accessor :token_customer_id
29
+ attr_accessor :reference
30
+ attr_accessor :title
31
+ attr_accessor :first_name
32
+ attr_accessor :last_name
33
+ attr_accessor :company_name
34
+ attr_accessor :job_description
35
+ attr_accessor :street1
36
+ attr_accessor :street2
37
+ attr_accessor :city
38
+ attr_accessor :state
39
+ attr_accessor :postal_code
40
+ attr_accessor :country
41
+ attr_accessor :email
42
+ attr_accessor :phone
43
+ attr_accessor :mobile
44
+ attr_accessor :comments
45
+ attr_accessor :fax
46
+ attr_accessor :url
47
+ attr_accessor :card_number
48
+ attr_accessor :card_start_month
49
+ attr_accessor :card_start_year
50
+ attr_accessor :card_issue_number
51
+ attr_accessor :card_name
52
+ attr_accessor :card_expiry_month
53
+ attr_accessor :card_expiry_year
54
+ attr_accessor :is_active
55
+ attr_accessor :card_details
56
+ attr_accessor :customer_device_ip
57
+
58
+ def self.to_hash(customer)
59
+ hash = {}
60
+ if customer
61
+ hash[Constants::TOKEN_CUSTOMER_ID] = customer.token_customer_id if customer.token_customer_id
62
+ hash[Constants::REFERENCE] = customer.reference if customer.reference
63
+ hash[Constants::TITLE] = customer.title if customer.title
64
+ hash[Constants::FIRST_NAME] = customer.first_name if customer.first_name
65
+ hash[Constants::LAST_NAME] = customer.last_name if customer.last_name
66
+ hash[Constants::COMPANY_NAME] = customer.company_name if customer.company_name
67
+ hash[Constants::JOB_DESCRIPTION] = customer.job_description if customer.job_description
68
+ hash[Constants::STREET1] = customer.street1 if customer.street1
69
+ hash[Constants::STREET2] = customer.street2 if customer.street2
70
+ hash[Constants::CITY] = customer.city if customer.city
71
+ hash[Constants::STATE] = customer.state if customer.state
72
+ hash[Constants::POSTAL_CODE] = customer.postal_code if customer.postal_code
73
+ hash[Constants::COUNTRY] = customer.country if customer.country
74
+ hash[Constants::EMAIL] = customer.email if customer.email
75
+ hash[Constants::PHONE] = customer.phone if customer.phone
76
+ hash[Constants::MOBILE] = customer.mobile if customer.mobile
77
+ hash[Constants::COMMENTS] = customer.comments if customer.comments
78
+ hash[Constants::FAX] = customer.fax if customer.fax
79
+ hash[Constants::URL] = customer.url if customer.url
80
+ hash[Constants::CARD_DETAILS] = Models::CardDetails.to_hash(customer.card_details) if Models::CardDetails.to_hash(customer.card_details)
81
+ hash[Constants::IS_ACTIVE] = customer.is_active if customer.is_active
82
+
83
+ hash[Constants::CARD_NUMBER] = customer.card_number if customer.card_number
84
+ hash[Constants::CARD_START_MONTH] = customer.card_start_month if customer.card_start_month
85
+ hash[Constants::CARD_START_YEAR] = customer.card_start_year if customer.card_start_year
86
+ hash[Constants::CARD_ISSUE_NUMBER] = customer.card_issue_number if customer.card_issue_number
87
+ hash[Constants::CARD_NAME] = customer.card_name if customer.card_name
88
+ hash[Constants::CARD_EXPIRY_MONTH] = customer.card_expiry_month if customer.card_expiry_month
89
+ hash[Constants::CARD_EXPIRY_YEAR] = customer.card_expiry_year if customer.card_expiry_year
90
+ hash[Constants::CUSTOMER_DEVICE_IP] = customer.customer_device_ip if customer.customer_device_ip
91
+ end
92
+ hash
93
+ end
94
+
95
+ def self.from_json(json)
96
+ hash = JSON.parse(json)
97
+ from_hash(hash)
98
+ end
99
+
100
+ def self.from_hash(hash)
101
+ customer = Customer.new
102
+ customer.token_customer_id = hash[Constants::TOKEN_CUSTOMER_ID]
103
+ customer.reference = hash[Constants::REFERENCE]
104
+ customer.title = hash[Constants::TITLE]
105
+ customer.first_name = hash[Constants::FIRST_NAME]
106
+ customer.last_name = hash[Constants::LAST_NAME]
107
+ customer.company_name = hash[Constants::COMPANY_NAME]
108
+ customer.job_description = hash[Constants::JOB_DESCRIPTION]
109
+ customer.street1 = hash[Constants::STREET1]
110
+ customer.street2 = hash[Constants::STREET2]
111
+ customer.city = hash[Constants::CITY]
112
+ customer.state = hash[Constants::STATE]
113
+ customer.postal_code = hash[Constants::POSTAL_CODE]
114
+ customer.country = hash[Constants::COUNTRY]
115
+ customer.email = hash[Constants::EMAIL]
116
+ customer.phone = hash[Constants::PHONE]
117
+ customer.mobile = hash[Constants::MOBILE]
118
+ customer.comments = hash[Constants::COMMENTS]
119
+ customer.fax = hash[Constants::FAX]
120
+ customer.url = hash[Constants::URL]
121
+ customer.card_number = hash[Constants::CARD_NUMBER]
122
+ customer.card_start_month = hash[Constants::CARD_START_MONTH]
123
+ customer.card_start_year = hash[Constants::CARD_START_YEAR]
124
+ customer.card_issue_number = hash[Constants::CARD_ISSUE_NUMBER]
125
+ customer.card_name = hash[Constants::CARD_NAME]
126
+ customer.card_expiry_month = hash[Constants::CARD_EXPIRY_MONTH]
127
+ customer.card_expiry_year = hash[Constants::CARD_EXPIRY_YEAR]
128
+ customer.is_active = hash[Constants::IS_ACTIVE]
129
+ customer.card_details = Models::CardDetails.from_hash(hash[Constants::CARD_DETAILS])
130
+ customer.customer_device_ip = hash[Constants::CUSTOMER_DEVICE_IP]
131
+ customer
132
+ end
133
+
134
+ def self.from_array(array)
135
+ options = []
136
+ if array
137
+ array.each {|option_hash|
138
+ obj = Customer.from_hash(option_hash)
139
+ options.push(obj)
140
+ }
141
+ end
142
+ options
143
+ end
144
+ end
145
+
146
+ class Option
147
+ attr_accessor :value
148
+
149
+ def self.to_hash(option)
150
+ hash = {}
151
+ if option
152
+ hash[Constants::VALUE] = option.value if option.value
153
+ end
154
+ hash
155
+ end
156
+
157
+ def self.to_array(array)
158
+ options = []
159
+ if array
160
+ array.each {|option_hash|
161
+ if option_hash
162
+ obj = Option.to_hash(option_hash)
163
+ options.push(obj)
164
+ end
165
+ }
166
+ end
167
+ options
168
+ end
169
+
170
+ def self.from_json(json)
171
+ hash = JSON.parse(json)
172
+ from_hash(hash)
173
+ end
174
+
175
+ def self.from_hash(hash)
176
+ option = Option.new
177
+ option.value = hash[Constants::VALUE]
178
+ option
179
+ end
180
+
181
+ def self.from_array(array)
182
+ options = []
183
+ array.each {|option_hash|
184
+ obj = Option.from_hash(option_hash)
185
+ options.push(obj)
186
+ }
187
+ options
188
+ end
189
+ end
190
+
191
+ class Payment
192
+ attr_accessor :total_amount
193
+ attr_accessor :invoice_number
194
+ attr_accessor :invoice_description
195
+ attr_accessor :invoice_reference
196
+ attr_accessor :currency_code
197
+
198
+ def self.to_hash(payment)
199
+ hash = {}
200
+ if payment
201
+ hash[Constants::TOTAL_AMOUNT] = payment.total_amount if payment.total_amount
202
+ hash[Constants::INVOICE_NUMBER] = payment.invoice_number if payment.invoice_number
203
+ hash[Constants::INVOICE_DESCRIPTION] = payment.invoice_description if payment.invoice_description
204
+ hash[Constants::INVOICE_REFERENCE] = payment.invoice_reference if payment.invoice_reference
205
+ hash[Constants::CURRENCY_CODE] = payment.currency_code if payment.currency_code
206
+ end
207
+ hash
208
+ end
209
+
210
+ def self.from_json(json)
211
+ hash = JSON.parse(json)
212
+ from_hash(hash)
213
+ end
214
+
215
+ def self.from_hash(hash)
216
+ payment = Payment.new
217
+ payment.total_amount = hash[Constants::TOTAL_AMOUNT]
218
+ payment.invoice_number = hash[Constants::INVOICE_NUMBER]
219
+ payment.invoice_description = hash[Constants::INVOICE_DESCRIPTION]
220
+ payment.invoice_reference = hash[Constants::INVOICE_REFERENCE]
221
+ payment.currency_code = hash[Constants::CURRENCY_CODE]
222
+ payment
223
+ end
224
+ end
225
+
226
+ class RefundDetails
227
+ attr_accessor :original_transaction_id
228
+ attr_accessor :total_amount
229
+ attr_accessor :invoice_number
230
+ attr_accessor :invoice_description
231
+ attr_accessor :invoice_reference
232
+ attr_accessor :currency_code
233
+
234
+ def self.to_hash(refund_details)
235
+ hash = {}
236
+ if refund_details
237
+ hash[Constants::ORIGINAL_TRANSACTION_ID] = refund_details.original_transaction_id if refund_details.original_transaction_id
238
+ hash[Constants::TOTAL_AMOUNT] = refund_details.total_amount if refund_details.total_amount
239
+ hash[Constants::INVOICE_NUMBER] = refund_details.invoice_number if refund_details.invoice_number
240
+ hash[Constants::INVOICE_DESCRIPTION] = refund_details.invoice_description if refund_details.invoice_description
241
+ hash[Constants::INVOICE_REFERENCE] = refund_details.invoice_reference if refund_details.invoice_reference
242
+ hash[Constants::CURRENCY_CODE] = refund_details.currency_code if refund_details.currency_code
243
+ end
244
+ hash
245
+ end
246
+
247
+ def self.from_json(json)
248
+ hash = JSON.parse(json)
249
+ from_hash(hash)
250
+ end
251
+
252
+ def self.from_hash(hash)
253
+ refund_details = RefundDetails.new
254
+ refund_details.original_transaction_id = hash[Constants::ORIGINAL_TRANSACTION_ID]
255
+ refund_details.total_amount = hash[Constants::TOTAL_AMOUNT]
256
+ refund_details.invoice_number = hash[Constants::INVOICE_NUMBER]
257
+ refund_details.invoice_description = hash[Constants::INVOICE_DESCRIPTION]
258
+ refund_details.invoice_reference = hash[Constants::INVOICE_REFERENCE]
259
+ refund_details.currency_code = hash[Constants::CURRENCY_CODE]
260
+ refund_details
261
+ end
262
+ end
263
+
264
+ class ShippingAddress
265
+ attr_accessor :first_name
266
+ attr_accessor :last_name
267
+ attr_accessor :street1
268
+ attr_accessor :street2
269
+ attr_accessor :city
270
+ attr_accessor :state
271
+ attr_accessor :country
272
+ attr_accessor :postal_code
273
+ attr_accessor :email
274
+ attr_accessor :phone
275
+ attr_accessor :fax
276
+ attr_accessor :shipping_method
277
+
278
+ def self.to_hash(shipping_address)
279
+ hash = {}
280
+ if shipping_address
281
+ hash[Constants::FIRST_NAME] = shipping_address.first_name if shipping_address.first_name
282
+ hash[Constants::LAST_NAME] = shipping_address.last_name if shipping_address.last_name
283
+ hash[Constants::STREET1] = shipping_address.street1 if shipping_address.street1
284
+ hash[Constants::STREET2] = shipping_address.street2 if shipping_address.street2
285
+ hash[Constants::CITY] = shipping_address.city if shipping_address.city
286
+ hash[Constants::STATE] = shipping_address.state if shipping_address.state
287
+ hash[Constants::COUNTRY] = shipping_address.country if shipping_address.country
288
+ hash[Constants::POSTAL_CODE] = shipping_address.postal_code if shipping_address.postal_code
289
+ hash[Constants::EMAIL] = shipping_address.email if shipping_address.email
290
+ hash[Constants::PHONE] = shipping_address.phone if shipping_address.phone
291
+ hash[Constants::FAX] = shipping_address.fax if shipping_address.fax
292
+ hash[Constants::SHIPPING_METHOD] = shipping_address.shipping_method if shipping_address.shipping_method
293
+ end
294
+ hash
295
+ end
296
+
297
+ def self.from_json(json)
298
+ hash = JSON.parse(json)
299
+ from_hash(hash)
300
+ end
301
+
302
+ def self.from_hash(hash)
303
+ shipping_address = ShippingAddress.new
304
+ shipping_address.first_name = hash[Constants::FIRST_NAME]
305
+ shipping_address.last_name = hash[Constants::LAST_NAME]
306
+ shipping_address.street1 = hash[Constants::STREET1]
307
+ shipping_address.street2 = hash[Constants::STREET2]
308
+ shipping_address.city = hash[Constants::CITY]
309
+ shipping_address.state = hash[Constants::STATE]
310
+ shipping_address.country = hash[Constants::COUNTRY]
311
+ shipping_address.postal_code = hash[Constants::POSTAL_CODE]
312
+ shipping_address.email = hash[Constants::EMAIL]
313
+ shipping_address.phone = hash[Constants::PHONE]
314
+ shipping_address.fax = hash[Constants::FAX]
315
+ shipping_address.shipping_method = hash[Constants::SHIPPING_METHOD]
316
+ shipping_address
317
+ end
318
+ end
319
+
320
+ class Transaction
321
+ attr_accessor :customer_note
322
+ attr_accessor :authorisation_code
323
+ attr_accessor :response_code
324
+ attr_accessor :response_message
325
+ attr_accessor :invoice_number
326
+ attr_accessor :invoice_reference
327
+ attr_accessor :total_amount
328
+ attr_accessor :transaction_id
329
+ attr_accessor :transaction_status
330
+ attr_accessor :token_customer_id
331
+ attr_accessor :beagle_score
332
+ attr_accessor :options
333
+ attr_accessor :verification
334
+ attr_accessor :customer
335
+ attr_accessor :shipping_address
336
+ attr_accessor :beagle_verification
337
+ attr_accessor :errors
338
+
339
+ def to_json(opts={})
340
+ hash = {}
341
+ hash[Constants::CUSTOMER_NOTE] = customer_note if customer_note
342
+ hash[Constants::AUTHORISATION_CODE] = authorisation_code if authorisation_code
343
+ hash[Constants::RESPONSE_CODE] = response_code if response_code
344
+ hash[Constants::RESPONSE_MESSAGE] = response_message if response_message
345
+ hash[Constants::INVOICE_NUMBER] = invoice_number if invoice_number
346
+ hash[Constants::INVOICE_REFERENCE] = invoice_reference if invoice_reference
347
+ hash[Constants::TOTAL_AMOUNT] = total_amount if total_amount
348
+ hash[Constants::TRANSACTION_ID] = transaction_id if transaction_id
349
+ hash[Constants::TRANSACTION_STATUS] = transaction_status if transaction_status
350
+ hash[Constants::TOKEN_CUSTOMER_ID] = token_customer_id if token_customer_id
351
+ hash[Constants::BEAGLE_SCORE] = beagle_score if beagle_score
352
+ hash[Constants::OPTIONS] = options if options
353
+ hash[Constants::VERIFICATION] = verification if verification
354
+ hash[Constants::CUSTOMER] = customer if customer
355
+ hash[Constants::SHIPPING_ADDRESS] = shipping_address if shipping_address
356
+ hash[Constants::BEAGLE_VERIFICATION] = beagle_verification if beagle_verification
357
+ hash[Constants::ERRORS] = errors if errors
358
+ hash.to_json
359
+ end
360
+
361
+ def self.from_json(json)
362
+ hash = JSON.parse(json)
363
+ from_hash(hash)
364
+ end
365
+
366
+ def self.from_hash(hash)
367
+ transaction = Transaction.new
368
+ transaction.customer_note = hash[Constants::CUSTOMER_NOTE]
369
+ transaction.authorisation_code = hash[Constants::AUTHORISATION_CODE]
370
+ transaction.response_code = hash[Constants::RESPONSE_CODE]
371
+ transaction.response_message = hash[Constants::RESPONSE_MESSAGE]
372
+ transaction.invoice_number = hash[Constants::INVOICE_NUMBER]
373
+ transaction.invoice_reference = hash[Constants::INVOICE_REFERENCE]
374
+ transaction.total_amount = hash[Constants::TOTAL_AMOUNT]
375
+ transaction.transaction_id = hash[Constants::TRANSACTION_ID]
376
+ transaction.transaction_status = hash[Constants::TRANSACTION_STATUS]
377
+ transaction.token_customer_id = hash[Constants::TOKEN_CUSTOMER_ID]
378
+ transaction.beagle_score = hash[Constants::BEAGLE_SCORE]
379
+ transaction.options = Option.from_array(hash[Constants::OPTIONS])
380
+ transaction.verification = Verification.from_hash(hash[Constants::VERIFICATION])
381
+ transaction.customer = Customer.from_hash(hash[Constants::CUSTOMER])
382
+ transaction.shipping_address = ShippingAddress.from_hash(hash[Constants::SHIPPING_ADDRESS])
383
+ transaction.beagle_verification = BeagleVerification.from_hash(hash[Constants::BEAGLE_VERIFICATION])
384
+ transaction.errors = hash[Constants::ERRORS]
385
+ transaction
386
+ end
387
+
388
+ def self.from_array(array)
389
+ transactions = []
390
+ array.each {|transaction_hash|
391
+ obj = from_hash(transaction_hash)
392
+ transactions.push(obj)
393
+ }
394
+ transactions
395
+ end
396
+ end
397
+
398
+ class Verification
399
+ attr_accessor :cvn
400
+ attr_accessor :address
401
+ attr_accessor :email
402
+ attr_accessor :mobile
403
+ attr_accessor :phone
404
+
405
+ def to_json(options={})
406
+ hash = {}
407
+ hash[Constants::CVN] = cvn if cvn
408
+ hash[Constants::ADDRESS] = address if address
409
+ hash[Constants::EMAIL] = email if email
410
+ hash[Constants::MOBILE] = mobile if mobile
411
+ hash[Constants::PHONE] = phone if phone
412
+ hash.to_json
413
+ end
414
+
415
+ def self.from_json(json)
416
+ hash = JSON.parse(json)
417
+ from_hash(hash)
418
+ end
419
+
420
+ def self.from_hash(hash)
421
+ verification = Verification.new
422
+ verification.cvn = hash[Constants::CVN]
423
+ verification.address = hash[Constants::ADDRESS]
424
+ verification.email = hash[Constants::EMAIL]
425
+ verification.mobile = hash[Constants::MOBILE]
426
+ verification.phone = hash[Constants::PHONE]
427
+ verification
428
+ end
429
+ end
430
+ end
431
+ end