Class: Paynow
- Inherits:
-
Object
- Object
- Paynow
- Defined in:
- lib/paynow_sdk.rb
Class Method Summary collapse
- .integration_id ⇒ Object
- .integration_id=(val) ⇒ Object
- .integration_key ⇒ Object
- .integration_key=(val) ⇒ Object
- .result_url ⇒ Object
- .result_url=(val) ⇒ Object
- .return_url ⇒ Object
- .return_url=(val) ⇒ Object
- .url_initiate_mobile_transaction ⇒ Object
- .url_initiate_mobile_transaction=(val) ⇒ Object
- .url_initiate_transaction ⇒ Object
- .url_initiate_transaction=(val) ⇒ Object
Instance Method Summary collapse
-
#build(payment) ⇒ Object
web payments.
-
#build_mobile(payment, phone, method) ⇒ Object
mobile payments.
- #create_payment(reference, auth_email) ⇒ Object
- #createdhash(out) ⇒ Object
- #init(payment) ⇒ Object
- #init_mobile(payment, phone, method) ⇒ Object
-
#initialize(integration_id, integration_key, return_url, result_url) ⇒ Paynow
constructor
A new instance of Paynow.
- #integration_id ⇒ Object
- #integration_id=(val) ⇒ Object
- #integration_key ⇒ Object
- #integration_key=(val) ⇒ Object
- #process_status_update(data) ⇒ Object
-
#rebuild_response(response) ⇒ Object
rebuild a response from paynow into hash like the we send.
- #result_url ⇒ Object
- #result_url=(val) ⇒ Object
- #return_url ⇒ Object
- #return_url=(val) ⇒ Object
- #send(payment) ⇒ Object
- #send_mobile(payment, phone, method) ⇒ Object
- #set_result_url(url) ⇒ Object
- #set_return_url(url) ⇒ Object
- #url_initiate_mobile_transaction ⇒ Object
- #url_initiate_mobile_transaction=(val) ⇒ Object
- #url_initiate_transaction ⇒ Object
- #url_initiate_transaction=(val) ⇒ Object
- #verify(item) ⇒ Object
- #verify_hash(response) ⇒ Object
Constructor Details
#initialize(integration_id, integration_key, return_url, result_url) ⇒ Paynow
Returns a new instance of Paynow.
225 226 227 228 229 230 |
# File 'lib/paynow_sdk.rb', line 225 def initialize(integration_id, integration_key, return_url, result_url) @integration_id = integration_id @integration_key = integration_key @return_url = return_url @result_url = result_url end |
Class Method Details
.integration_id ⇒ Object
409 |
# File 'lib/paynow_sdk.rb', line 409 def self.integration_id; @@integration_id; end |
.integration_id=(val) ⇒ Object
410 |
# File 'lib/paynow_sdk.rb', line 410 def self.integration_id=(val); @@integration_id = val; end |
.integration_key ⇒ Object
415 |
# File 'lib/paynow_sdk.rb', line 415 def self.integration_key; @@integration_key; end |
.integration_key=(val) ⇒ Object
416 |
# File 'lib/paynow_sdk.rb', line 416 def self.integration_key=(val); @@integration_key = val; end |
.result_url ⇒ Object
427 |
# File 'lib/paynow_sdk.rb', line 427 def self.result_url; @@result_url; end |
.result_url=(val) ⇒ Object
428 |
# File 'lib/paynow_sdk.rb', line 428 def self.result_url=(val); @@result_url = val; end |
.return_url ⇒ Object
421 |
# File 'lib/paynow_sdk.rb', line 421 def self.return_url; @@return_url; end |
.return_url=(val) ⇒ Object
422 |
# File 'lib/paynow_sdk.rb', line 422 def self.return_url=(val); @@return_url = val; end |
.url_initiate_mobile_transaction ⇒ Object
403 |
# File 'lib/paynow_sdk.rb', line 403 def self.url_initiate_mobile_transaction; @@url_initiate_mobile_transaction; end |
.url_initiate_mobile_transaction=(val) ⇒ Object
404 |
# File 'lib/paynow_sdk.rb', line 404 def self.url_initiate_mobile_transaction=(val); @@url_initiate_mobile_transaction = val; end |
.url_initiate_transaction ⇒ Object
397 |
# File 'lib/paynow_sdk.rb', line 397 def self.url_initiate_transaction; @@url_initiate_transaction; end |
.url_initiate_transaction=(val) ⇒ Object
398 |
# File 'lib/paynow_sdk.rb', line 398 def self.url_initiate_transaction=(val); @@url_initiate_transaction = val; end |
Instance Method Details
#build(payment) ⇒ Object
web payments
324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 |
# File 'lib/paynow_sdk.rb', line 324 def build(payment) body = { "id": @integration_id, "reference": payment.reference, "amount": payment.total, "additionalinfo": payment.info, "returnurl": @return_url, "resulturl": @result_url, "authemail": payment.auth_email, "status": "Payment for goods", } joined = body.values.join add_key = joined += @integration_key body["hash"] = createdhash(add_key) body = URI.encode_www_form(body) body end |
#build_mobile(payment, phone, method) ⇒ Object
mobile payments
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 |
# File 'lib/paynow_sdk.rb', line 345 def build_mobile(payment, phone, method) body = { "resulturl": @result_url, "returnurl": @return_url, "reference": payment.reference, "amount": payment.total, "id": @integration_id, "additionalinfo": payment.info, "authemail": payment.auth_email, "phone": phone, "method": method, "status": "Message", } joined = body.values.join add_key = joined += @integration_key body["hash"] = createdhash(add_key) body = URI.encode_www_form(body) body end |
#create_payment(reference, auth_email) ⇒ Object
240 241 242 |
# File 'lib/paynow_sdk.rb', line 240 def create_payment(reference, auth_email) Payment.new(reference, auth_email) end |
#createdhash(out) ⇒ Object
366 367 368 |
# File 'lib/paynow_sdk.rb', line 366 def createdhash(out) Digest::SHA2.new(512).hexdigest(out).upcase end |
#init(payment) ⇒ Object
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 |
# File 'lib/paynow_sdk.rb', line 256 def init(payment) if payment.total <= 0 raise TypeError, "Transaction total cannot be less than 1" end data = build(payment) url = URI("https://www.paynow.co.zw/interface/initiatetransaction/") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new(url) request["content-type"] = "application/x-www-form-urlencoded" request.body = data response = http.request(request) response.read_body response_object = rebuild_response(response.read_body) if response_object["status"].to_s.downcase == "error" InitResponse.new(response_object) end if !verify_hash(response_object) raise HashMismatchException, "Hashes do not match" end InitResponse.new(response_object) end |
#init_mobile(payment, phone, method) ⇒ Object
288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'lib/paynow_sdk.rb', line 288 def init_mobile(payment, phone, method) if payment.total <= 0 raise TypeError, "Transaction total cannot be less than 1" end if !payment.auth_email || payment.auth_email.size <= 0 raise TypeError, "Auth email is required for mobile transactions. You can pass the auth email as the second parameter in the create_payment method call" end data = build_mobile(payment, phone, method) url = URI("https://www.paynow.co.zw/interface/remotetransaction") http = Net::HTTP.new(url.host, url.port) http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new(url) request["content-type"] = "application/x-www-form-urlencoded" request.body = data response = http.request(request) response.read_body response_object = rebuild_response(response.read_body) if response_object["status"].to_s.downcase == "error" InitResponse.new(response_object) end if !verify_hash(response_object) raise HashMismatchException, "Hashes do not match" end InitResponse.new(response_object) end |
#integration_id ⇒ Object
412 |
# File 'lib/paynow_sdk.rb', line 412 def integration_id; @integration_id = @@integration_id if @integration_id.nil?; @integration_id; end |
#integration_id=(val) ⇒ Object
413 |
# File 'lib/paynow_sdk.rb', line 413 def integration_id=(val); @integration_id = val; end |
#integration_key ⇒ Object
418 |
# File 'lib/paynow_sdk.rb', line 418 def integration_key; @integration_key = @@integration_key if @integration_key.nil?; @integration_key; end |
#integration_key=(val) ⇒ Object
419 |
# File 'lib/paynow_sdk.rb', line 419 def integration_key=(val); @integration_key = val; end |
#process_status_update(data) ⇒ Object
252 253 254 |
# File 'lib/paynow_sdk.rb', line 252 def process_status_update(data) StatusResponse.new(data, true) end |
#rebuild_response(response) ⇒ Object
rebuild a response from paynow into hash like the we send
393 394 395 |
# File 'lib/paynow_sdk.rb', line 393 def rebuild_response(response) URI.decode_www_form(response).to_h end |
#result_url ⇒ Object
430 |
# File 'lib/paynow_sdk.rb', line 430 def result_url; @result_url = @@result_url if @result_url.nil?; @result_url; end |
#result_url=(val) ⇒ Object
431 |
# File 'lib/paynow_sdk.rb', line 431 def result_url=(val); @result_url = val; end |
#return_url ⇒ Object
424 |
# File 'lib/paynow_sdk.rb', line 424 def return_url; @return_url = @@return_url if @return_url.nil?; @return_url; end |
#return_url=(val) ⇒ Object
425 |
# File 'lib/paynow_sdk.rb', line 425 def return_url=(val); @return_url = val; end |
#send(payment) ⇒ Object
244 245 246 |
# File 'lib/paynow_sdk.rb', line 244 def send(payment) init(payment) end |
#send_mobile(payment, phone, method) ⇒ Object
248 249 250 |
# File 'lib/paynow_sdk.rb', line 248 def send_mobile(payment, phone, method) init_mobile(payment, phone, method) end |
#set_result_url(url) ⇒ Object
232 233 234 |
# File 'lib/paynow_sdk.rb', line 232 def set_result_url(url) @result_url = url end |
#set_return_url(url) ⇒ Object
236 237 238 |
# File 'lib/paynow_sdk.rb', line 236 def set_return_url(url) @return_url = url end |
#url_initiate_mobile_transaction ⇒ Object
406 |
# File 'lib/paynow_sdk.rb', line 406 def url_initiate_mobile_transaction; @url_initiate_mobile_transaction = @@url_initiate_mobile_transaction if @url_initiate_mobile_transaction.nil?; @url_initiate_mobile_transaction; end |
#url_initiate_mobile_transaction=(val) ⇒ Object
407 |
# File 'lib/paynow_sdk.rb', line 407 def url_initiate_mobile_transaction=(val); @url_initiate_mobile_transaction = val; end |
#url_initiate_transaction ⇒ Object
400 |
# File 'lib/paynow_sdk.rb', line 400 def url_initiate_transaction; @url_initiate_transaction = @@url_initiate_transaction if @url_initiate_transaction.nil?; @url_initiate_transaction; end |
#url_initiate_transaction=(val) ⇒ Object
401 |
# File 'lib/paynow_sdk.rb', line 401 def url_initiate_transaction=(val); @url_initiate_transaction = val; end |
#verify(item) ⇒ Object
379 380 381 382 383 384 385 386 387 388 389 |
# File 'lib/paynow_sdk.rb', line 379 def verify(item) out = "" for key, value in item if key.to_s == "hash" next end out += value.to_s end out += @integration_key.downcase Digest::SHA2.new(512).hexdigest(out).upcase end |
#verify_hash(response) ⇒ Object
370 371 372 373 374 375 376 377 |
# File 'lib/paynow_sdk.rb', line 370 def verify_hash(response) if !response.include?("hash") raise TypeError, "Response from Paynow does not contain a hash" end old_hash = response["hash"] new_hash = verify(response) old_hash == new_hash end |