Skip to content

Commit 9dff942

Browse files
Merge pull request #35 from xegole/handle_response_data_from_successful_transaction
Fixed handle response data from successful transaction
2 parents 0b375cb + 97a3f8f commit 9dff942

File tree

3 files changed

+49
-15
lines changed

3 files changed

+49
-15
lines changed

Example/RXPiOS/ViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ final class ViewController: UIViewController, HPPManagerDelegate, GenericHPPMana
5555
}
5656

5757
// Is called in case of regular HPPManager()
58-
func HPPManagerCompletedWithResult(_ result: [String: String]) {
58+
func HPPManagerCompletedWithResult(_ result: [String: Any]) {
5959
display(result: NSString(format: "%@", result) as String)
6060
}
6161

Pod/Classes/RealexComponent/HPPManager.swift

Lines changed: 46 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import UIKit
22

33
/// The delegate callbacks which allow the host app to receive all possible results form the component.
44
@objc public protocol HPPManagerDelegate: class {
5-
@objc func HPPManagerCompletedWithResult(_ result: [String: String])
5+
@objc func HPPManagerCompletedWithResult(_ result: [String: Any])
66
@objc func HPPManagerFailedWithError(_ error: Error?)
77
@objc func HPPManagerCancelled()
88
}
@@ -44,7 +44,7 @@ fileprivate class AnyGenericHPPManagerDelegate<T: Decodable>: GenericHPPManagerD
4444

4545
/// The main object the host app creates.
4646
/// A convenience payment manager for payment service responses that have a `[String: String]` structure
47-
public class HPPManager: GenericHPPManager<[String: String]> { }
47+
public class HPPManager: GenericHPPManager<[String: String?]> { }
4848

4949
/// The main object the host app creates.
5050
/// A payment manager that can decode payment service responses that have a generic structure
@@ -353,17 +353,25 @@ public class GenericHPPManager<T: Decodable>: NSObject, HPPViewControllerDelegat
353353
UIApplication.shared.isNetworkActivityIndicatorVisible = false
354354
do {
355355
if let receivedData = data {
356-
let decodedResponse = try JSONDecoder().decode(T.self, from: receivedData)
357-
if let genericDelegate = self.genericDelegate {
358-
genericDelegate.HPPManagerCompletedWithResult(decodedResponse)
359-
return
356+
if var jsonData = try JSONSerialization.jsonObject(with: receivedData, options: []) as? [String: Any]{
357+
switch jsonData["response"] {
358+
case is String, nil:
359+
self.decodeDataOnCompleted(receivedData)
360+
break
361+
case let response as [String:String]:
362+
jsonData["responseCode"] = response["code"]
363+
jsonData["responseMessage"] = response["message"]
364+
jsonData["response"] = nil
365+
self.decodeDataOnCompleted(jsonData: jsonData as? [String:String])
366+
break
367+
default:
368+
let error = HPPManagerError.typeMismatch()
369+
self.HPPViewControllerFailedWithError(error)
370+
break
371+
}
372+
}else{
373+
self.decodeDataOnCompleted(receivedData)
360374
}
361-
guard let dictResponse = decodedResponse as? [String: String] else {
362-
let error = HPPManagerError.typeMismatch()
363-
self.HPPViewControllerFailedWithError(error)
364-
return
365-
}
366-
self.delegate?.HPPManagerCompletedWithResult(dictResponse)
367375
} else {
368376
self.HPPViewControllerFailedWithError(error)
369377
}
@@ -374,6 +382,32 @@ public class GenericHPPManager<T: Decodable>: NSObject, HPPViewControllerDelegat
374382
})
375383
dataTask.resume()
376384
}
385+
386+
private func decodeDataOnCompleted(_ receivedData: Data? = nil, jsonData: [String: String]? = nil ){
387+
do {
388+
if let data = receivedData {
389+
let decodedResponse = try JSONDecoder().decode(T.self, from: data)
390+
if let genericDelegate = self.genericDelegate {
391+
genericDelegate.HPPManagerCompletedWithResult(decodedResponse)
392+
return
393+
}
394+
guard let dictResponse = decodedResponse as? [String: Any] else {
395+
let error = HPPManagerError.typeMismatch()
396+
self.HPPViewControllerFailedWithError(error)
397+
return
398+
}
399+
self.delegate?.HPPManagerCompletedWithResult(dictResponse)
400+
}
401+
402+
if let data = jsonData{
403+
self.delegate?.HPPManagerCompletedWithResult(data)
404+
print(data)
405+
}
406+
407+
} catch {
408+
self.HPPViewControllerFailedWithError(error)
409+
}
410+
}
377411

378412
// MARK: - HPPViewControllerDelegate
379413

RXPiOS.podspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
Pod::Spec.new do |s|
1010
s.name = "RXPiOS"
11-
s.version = "1.7.1"
11+
s.version = "1.7.2"
1212
s.summary = "The official Realex Payments iOS SDK for HPP and Remote API."
1313
s.homepage = "https://developer.realexpayments.com"
1414
s.license = 'MIT'
@@ -24,4 +24,4 @@ Pod::Spec.new do |s|
2424

2525
s.source_files = 'Pod/Classes/**/*'
2626

27-
end
27+
end

0 commit comments

Comments
 (0)