Class: Paymentwall::Pingback
- Inherits:
-
Base
- Object
- Base
- Paymentwall::Pingback
show all
- Defined in:
- lib/Paymentwall/Pingback.rb
Constant Summary
collapse
- PINGBACK_TYPE_REGULAR =
0
- PINGBACK_TYPE_GOODWILL =
1
- PINGBACK_TYPE_NEGATIVE =
2
- PINGBACK_TYPE_RISK_UNDER_REVIEW =
200
- PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED =
201
- PINGBACK_TYPE_RISK_REVIEWED_DECLINED =
202
- PINGBACK_TYPE_RISK_AUTHORIZATION_VOIDED =
203
- PINGBACK_TYPE_SUBSCRIPTION_CANCELLED =
12
- PINGBACK_TYPE_SUBSCRIPTION_EXPIRED =
13
- PINGBACK_TYPE_SUBSCRIPTION_FAILED =
14
Constants inherited
from Base
Base::API_CART, Base::API_GOODS, Base::API_VC, Base::CONTROLLER_PAYMENT_CART, Base::CONTROLLER_PAYMENT_DIGITAL_GOODS, Base::CONTROLLER_PAYMENT_VIRTUAL_CURRENCY, Base::DEFAULT_SIGNATURE_VERSION, Base::SIGNATURE_VERSION_1, Base::SIGNATURE_VERSION_2, Base::SIGNATURE_VERSION_3, Base::VERSION
Instance Method Summary
collapse
Methods inherited from Base
getApiType, getAppKey, #getErrorSummary, #getErrors, getSecretKey, setApiType, setAppKey, setSecretKey
Constructor Details
#initialize(parameters = {}, ipAddress = '') ⇒ Pingback
Returns a new instance of Pingback.
18
19
20
21
|
# File 'lib/Paymentwall/Pingback.rb', line 18
def initialize(parameters = {}, ipAddress = '')
@parameters = parameters
@ipAddress = ipAddress
end
|
Instance Method Details
#getParameter(param) ⇒ Object
106
107
108
109
110
111
112
|
# File 'lib/Paymentwall/Pingback.rb', line 106
def getParameter(param)
if @parameters.include?(param)
return @parameters[param]
else
return nil
end
end
|
#getPingbackUniqueId ⇒ Object
186
187
188
|
# File 'lib/Paymentwall/Pingback.rb', line 186
def getPingbackUniqueId()
self.getReferenceId().to_s + '_' + self.getType().to_s
end
|
#getProductId ⇒ Object
145
146
147
|
# File 'lib/Paymentwall/Pingback.rb', line 145
def getProductId()
self.getParameter('goodsid').to_s
end
|
#getProductPeriodLength ⇒ Object
149
150
151
|
# File 'lib/Paymentwall/Pingback.rb', line 149
def getProductPeriodLength()
self.getParameter('slength').to_i
end
|
#getProductPeriodType ⇒ Object
153
154
155
|
# File 'lib/Paymentwall/Pingback.rb', line 153
def getProductPeriodType()
self.getParameter('speriod').to_s
end
|
#getProducts ⇒ Object
169
170
171
172
173
174
175
176
177
178
179
180
|
# File 'lib/Paymentwall/Pingback.rb', line 169
def getProducts()
result = []
productIds = self.getParameter('goodsid')
if productIds.kind_of?(Array) && productIds.length > 0
productIds.each do |id|
result.push(Paymentwall::Product.new(id))
end
end
return result
end
|
#getReferenceId ⇒ Object
182
183
184
|
# File 'lib/Paymentwall/Pingback.rb', line 182
def getReferenceId()
self.getParameter('ref').to_s
end
|
#getType ⇒ Object
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/Paymentwall/Pingback.rb', line 114
def getType()
pingbackTypes = [
self.class::PINGBACK_TYPE_REGULAR,
self.class::PINGBACK_TYPE_GOODWILL,
self.class::PINGBACK_TYPE_NEGATIVE,
self.class::PINGBACK_TYPE_RISK_UNDER_REVIEW,
self.class::PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,
self.class::PINGBACK_TYPE_RISK_REVIEWED_DECLINED,
self.class::PINGBACK_TYPE_RISK_AUTHORIZATION_VOIDED,
self.class::PINGBACK_TYPE_SUBSCRIPTION_CANCELLED,
self.class::PINGBACK_TYPE_SUBSCRIPTION_EXPIRED,
self.class::PINGBACK_TYPE_SUBSCRIPTION_FAILED
]
if @parameters.include?('type')
if pingbackTypes.include?(@parameters['type'].to_i)
return @parameters['type'].to_i
end
end
return nil
end
|
#getUserId ⇒ Object
137
138
139
|
# File 'lib/Paymentwall/Pingback.rb', line 137
def getUserId
self.getParameter('uid').to_s
end
|
#getVirtualCurrencyAmount ⇒ Object
141
142
143
|
# File 'lib/Paymentwall/Pingback.rb', line 141
def getVirtualCurrencyAmount()
self.getParameter('currency').to_i
end
|
#isCancelable ⇒ Object
196
197
198
199
|
# File 'lib/Paymentwall/Pingback.rb', line 196
def isCancelable()
self.getType() == self.class::PINGBACK_TYPE_NEGATIVE ||
self.getType() == self.class::PINGBACK_TYPE_RISK_REVIEWED_DECLINED
end
|
#isDeliverable ⇒ Object
190
191
192
193
194
|
# File 'lib/Paymentwall/Pingback.rb', line 190
def isDeliverable()
self.getType() == self.class::PINGBACK_TYPE_REGULAR ||
self.getType() == self.class::PINGBACK_TYPE_GOODWILL ||
self.getType() == self.class::PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED
end
|
#isIpAddressValid ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
|
# File 'lib/Paymentwall/Pingback.rb', line 72
def isIpAddressValid()
ipsWhitelist = [
'174.36.92.186',
'174.36.96.66',
'174.36.92.187',
'174.36.92.192',
'174.37.14.28'
]
ipsWhitelist.include? @ipAddress
end
|
#isParametersValid ⇒ Object
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# File 'lib/Paymentwall/Pingback.rb', line 84
def isParametersValid()
errorsNumber = 0
requiredParams = []
if self.class::getApiType() == self.class::API_VC
requiredParams = ['uid', 'currency', 'type', 'ref', 'sig']
elsif self.class::getApiType() == self.class::API_GOODS
requiredParams = ['uid', 'goodsid', 'type', 'ref', 'sig']
else
requiredParams = ['uid', 'goodsid', 'type', 'ref', 'sig']
end
requiredParams.each do |field|
if !@parameters.include?(field) self.appendToErrors("Parameter #{field} is missing")
errorsNumber += 1
end
end
errorsNumber == 0
end
|
#isSignatureValid ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/Paymentwall/Pingback.rb', line 43
def isSignatureValid()
signatureParamsToSign = {}
if self.class::getApiType() == self.class::API_VC
signatureParams = Array['uid', 'currency', 'type', 'ref']
elsif self.class::getApiType() == self.class::API_GOODS
signatureParams = Array['uid', 'goodsid', 'slength', 'speriod', 'type', 'ref']
else
signatureParams = Array['uid', 'goodsid', 'type', 'ref']
end
if !@parameters.include?('sign_version') || @parameters['sign_version'].to_i == self.class::SIGNATURE_VERSION_1
signatureParams.each do |field|
signatureParamsToSign[field] = @parameters.include?(field) ? @parameters[field] : nil
end
@parameters['sign_version'] = self.class::SIGNATURE_VERSION_1
else
signatureParamsToSign = @parameters
end
signatureCalculated = self.calculateSignature(signatureParamsToSign, self.class::getSecretKey(), @parameters['sign_version'])
signature = @parameters.include?('sig') ? @parameters['sig'] : nil
signature == signatureCalculated
end
|
#isUnderReview ⇒ Object
201
202
203
|
# File 'lib/Paymentwall/Pingback.rb', line 201
def isUnderReview()
self.getType() == self.class::PINGBACK_TYPE_RISK_UNDER_REVIEW
end
|
#validate(skipIpWhitelistCheck = false) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/Paymentwall/Pingback.rb', line 23
def validate(skipIpWhitelistCheck = false)
validated = false
if self.isParametersValid()
if self.isIpAddressValid() || skipIpWhitelistCheck
if self.isSignatureValid()
validated = true
else
self.appendToErrors('Wrong signature')
end
else
self.appendToErrors('IP address is not whitelisted')
end
else
self.appendToErrors('Missing parameters')
end
validated
end
|