Skip to content

Commit

Permalink
add missing analytics, separate cancel error for paypal vault
Browse files Browse the repository at this point in the history
  • Loading branch information
KunJeongPark committed Oct 23, 2024
1 parent c0ff4f0 commit fbc483e
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 10 deletions.
10 changes: 6 additions & 4 deletions Sources/CardPayments/CardClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,11 @@ public class CardClient: NSObject {
if result.status == "PAYER_ACTION_REQUIRED",
let urlString = result.links.first(where: { $0.rel == "approve" })?.href {
guard urlString.contains("helios"), let url = URL(string: urlString) else {
analyticsService?.sendEvent("card-payments:vault-wo-purchase:failed")
throw CardClientError.threeDSecureURLError
}
analyticsService?.sendEvent("card-payments:vault-wo-purchase:challenge-required")
let cardVaultResult = try await startAsyncVaultThreeDSecureChallenge(url: url, setupTokenID: vaultRequest.setupTokenID)
let cardVaultResult = try await startVaultThreeDSecureChallenge(url: url, setupTokenID: vaultRequest.setupTokenID)
return cardVaultResult
} else {
let vaultResult = CardVaultResult(setupTokenID: result.id, status: result.status, didAttemptThreeDSecureAuthentication: false)
Expand Down Expand Up @@ -107,11 +108,12 @@ public class CardClient: NSObject {
guard getQueryStringParameter(url: url, param: "flow") == "3ds",
url.contains("helios"),
let url = URL(string: url) else {
analyticsService?.sendEvent("card-payments:3ds:failed")
throw CardClientError.threeDSecureURLError
}

analyticsService?.sendEvent("card-payments:3ds:confirm-payment-source:challenge-required")
let cardResult = try await startAsyncThreeDSecureChallenge(url: url, orderId: result.id)
let cardResult = try await startThreeDSecureChallenge(url: url, orderId: result.id)
return cardResult
} else {
analyticsService?.sendEvent("card-payments:3ds:confirm-payment-source:succeeded")
Expand Down Expand Up @@ -147,7 +149,7 @@ public class CardClient: NSObject {
}
}

private func startAsyncThreeDSecureChallenge(
private func startThreeDSecureChallenge(
url: URL,
orderId: String
) async throws -> CardResult {
Expand Down Expand Up @@ -184,7 +186,7 @@ public class CardClient: NSObject {
}
}

private func startAsyncVaultThreeDSecureChallenge(
private func startVaultThreeDSecureChallenge(
url: URL,
setupTokenID: String
) async throws -> CardVaultResult {
Expand Down
4 changes: 2 additions & 2 deletions Sources/PayPalWebPayments/PayPalWebCheckoutClient.swift
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public class PayPalWebCheckoutClient: NSObject {
switch error {
case ASWebAuthenticationSessionError.canceledLogin:
self.analyticsService?.sendEvent("paypal-web-payments:browser-login:canceled")
continuation.resume(throwing: PayPalWebCheckoutClientError.paypalCancellation)
continuation.resume(throwing: PayPalWebCheckoutClientError.paypalCancellationError)
default:
self.analyticsService?.sendEvent("paypal-web-payments:failed")
continuation.resume(throwing: PayPalWebCheckoutClientError.webSessionError(error))
Expand Down Expand Up @@ -153,7 +153,7 @@ public class PayPalWebCheckoutClient: NSObject {
switch error {
case ASWebAuthenticationSessionError.canceledLogin:
self.analyticsService?.sendEvent("paypal-web-payments:vault-wo-purchase:canceled")
continuation.resume(throwing: PayPalWebCheckoutClientError.paypalCancellation)
continuation.resume(throwing: PayPalWebCheckoutClientError.paypalVaultCancellationError)
default:
self.analyticsService?.sendEvent("paypal-web-payments:vault-wo-purchase:failed")
continuation.resume(throwing: PayPalWebCheckoutClientError.webSessionError(error))
Expand Down
13 changes: 11 additions & 2 deletions Sources/PayPalWebPayments/PayPalWebCheckoutClientError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@ enum PayPalWebCheckoutClientError {
/// 4. Vault result did not return a token id
case paypalVaultResponseError

/// 5. Vault result did not return a token id
/// 5. WebSession is cancelled by the user
case paypalCancellationError

/// 6. WebSession is cancelled by the user
case paypalVaultCancellationError
}

static let webSessionError: (Error) -> CoreSDKError = { error in
Expand Down Expand Up @@ -54,9 +57,15 @@ enum PayPalWebCheckoutClientError {
errorDescription: "Error parsing paypal vault response"
)

static let paypalCancellation = CoreSDKError(
static let paypalCancellationError = CoreSDKError(
code: Code.paypalCancellationError.rawValue,
domain: domain,
errorDescription: "paypal checkout has been cancelled by the user."
)

static let paypalVaultCancellationError = CoreSDKError(
code: Code.paypalVaultCancellationError.rawValue,
domain: domain,
errorDescription: "paypal vault has been cancelled by the user."
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,8 @@ class PayPalClient_Tests: XCTestCase {
XCTFail("Returned PayPalVaultResult. Should return Error.")
} catch let error as CoreSDKError {
XCTAssertEqual(error.domain, PayPalWebCheckoutClientError.domain)
XCTAssertEqual(error.code, PayPalWebCheckoutClientError.Code.paypalCancellationError.rawValue)
XCTAssertEqual(error.localizedDescription, "paypal checkout has been cancelled by the user.")
XCTAssertEqual(error.code, PayPalWebCheckoutClientError.Code.paypalVaultCancellationError.rawValue)
XCTAssertEqual(error.localizedDescription, "paypal vault has been cancelled by the user.")
}
}

Expand Down

0 comments on commit fbc483e

Please sign in to comment.