Releases: processout/processout-ios
Releases · processout/processout-ios
Release v2.10.4
- Add support for customer action value without padding (matching 3DS2 specs)
Release v2.10.3
makeAPMPayment
now returns the URL string so that merchants can display the content in a webview if needed
Release v2.10.1
- HTTP: fix GET methods with empty body
Release v2.10.1
- Remove usage of UIWebView (deprecated)
Release v2.10.0
Alternative Payment Methods
- Add support for APM tokenization (It is now possible to update a customer token)
https://docs.processout.com/payments/alternative-payment-methods/ has been updated.
Release v2.9.0
What's new?
- Support for 3DS challenges in webview inside the app
- Support for makeCardToken method with card verification
- General improvements
Migration
SDK setup
Specifying a custom URL scheme is no longer required. Instantiate the SDK like so in your AppDelegate
:
ProcessOut.Setup(projectId: "project-id")
Payment instantiation
Use the makeCardPayment
or makeCardToken
methods like in v2.8.2
.
ProcessOut.makeCardPayment(invoiceId: "invoice-id", token: token!, handler: ProcessOut.createThreeDSTestHandler(viewController: self, completion: { (invoiceId, error) in
// If error is nil, send the invoice to your backend to complete the charge
}), with: self)
The only change relies in the ThreeDSHandler
protocol:
A new method has to be overridden (See the full protocol at the bottom of the PR):
public func doPresentWebView(webView: ProcessOutWebView) {
// Called when a web challenge is required
// Present the webView to your user the way you want
}
Deep-links (APM purposes)
The only case where your user might come back from the device browser is when dealing with Alternative Payment Methods.
In your AppDelegate
file:
// This method handles opening custom URL schemes (e.g., "yourapp://")
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if let token = ProcessOut.handleURLCallback(url: url) {
// Send the token to your backend to complete the charge
}
return false
}
Full ThreeDSHandler
protocol:
/// Custom protocol which lets you implement a 3DS2 integration
public protocol ThreeDSHandler {
/// method called when a device fingerprint is required
///
/// - Parameters:
/// - directoryServerData: Contains information required by the third-party handling the device fingerprinting
/// - completion: Callback containing the fingerprint information
func doFingerprint(directoryServerData: DirectoryServerData, completion: @escaping (ThreeDSFingerprintResponse) -> Void)
/// Method called when a 3DS2 challenge is required
///
/// - Parameters:
/// - authentificationData: Authentification data required to present the challenge
/// - completion: Callback specifying wheter or not the challenge was successful
func doChallenge(authentificationData: AuthentificationChallengeData, completion: @escaping (Bool) -> Void)
/// Method called when a web challenge is required
///
/// - Parameter webView: The webView to present
func doPresentWebView(webView: ProcessOutWebView)
/// Called when the authorization was successful
///
/// - Parameter invoiceId: Invoice id that was authorized
func onSuccess(invoiceId: String)
/// Called when the authorization process ends up in a failed state.
///
/// - Parameter error: Error
func onError(error: ProcessOutException)
}
Release v2.8.2
- Add support for idempotency key
- Set network timeout to 15s instead of 60 and implement retries
Release v2.8.1
APM: fix Decodable protocol handling for apm listing
Release v2.8.0
- Add support for 3DS1 fallback
Release v2.7.0
- Add support for 3DS1 fallback