@@ -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
0 commit comments